- 博客(4)
- 收藏
- 关注
原创 任务分配问题
任务分配问题: 是排列树,考虑到用全排列的方式较难实现,考虑用n叉树 Hashset用来维护每个分支之前的任务分配情况,如果此任务已被分配,就不再分配,(加入set失败),此时查找任务的效率是O(1),效率比数组高,对于每一个出队的节点,如果不是叶子节点,就继续扩展子节点,如果是叶子,求此分配形式的花费与最优花费比较,谁小保留谁,扩展子节点时,先得到父节点的set信息,用for循环依次把第i个任务分配给子节点,利用是否可以加入set,判断此任务有没有被分配,若已被分配,剪枝,否则,计算此时对应的最小
2021-11-30 21:20:33 1519
原创 第四章贪心
活动安排问题: 问题描述:n个需要排队使用某公共资源的活动,计算安排的相容的最大活动个数,若用动态规划解决,定义子问题:Sij:在第i个活动结束后开始,在第j个活动开始前结束的活动的集合,状态转化方程:Sij=Sik+1+Skj(i<k<j),分析之后虽可行,但时间复杂度太高,考虑用贪心的思想解决,直觉选择结束时间最早的,(这样才能为以后的活动安排让出资源),证明:设am是Sij中结束时间最早的活动,Aij是Sij的一个最大相容活动子集,且ak是Aij中结束时间最早的活动,①若am=...
2021-11-14 20:39:52 633
原创 独立任务调度
求最少的调度时间就是看A和B的最晚结束时间的最小,把所有的情况列出来,用A来考虑B,记dp[i][j]为完成i个任务A花费j时间的条件下,B花费的时间。考虑如果把第i个任务放在A上还是放在B上,如果让B干,则dp[i-1][j]+b[i],如果让A干,则dp[i-1][j-a[i]],在两个中取小即为dp[i][j],一行一行的求,为优化,每一行的j最大为sum(1,i),就像在背包问题中一个一个物品选择一样,这个过程就是将所有的可能列出来,完成i个任务,A花费j时间时,B花费dp[i][i]时间,最优解在
2021-10-30 20:18:50 168
原创 第三章动态规划
最长公共子序列(LCS) 若用蛮力法,效率为n*2^m,用动态规划求解LCS,假如Xm=Yn,那么Zk=Xm=Yn,和Zk-1是Xm-1和Yn-1的LCS,假如XM!=Yn,那么若Zk!=Xm,则有Z是Xm-1和Yn的LCS,假如,Xm!=Yn,那么若Zk!=Yn,则有Z 是Xm和Yn-1的LCS 递归解,假如Xi=Yj,找Xi-1和Yj-1的LCS,然后将Xi追加到之后 假如Xi!=Yj,找Xi-1和Yj的LCS及,找Xi和Yj-1的LCS,取两者较长的LCS,得递推关系: c[...
2021-10-28 18:17:06 120
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人