算法设计与分析 第五章回溯 思维导图

在这里插入图片描述
在这里插入图片描述
1.装载问题
把n件物品装入容量为c1和c2的轮船,问能否将n件物品全部装入。
可以采用回溯法,每个物品装或者不装。
时间复杂度: O(2^n)
2.n皇后
经典问题,尝试性地在第k行放下一个棋子,如果check成功,接着放下一行,否则,接着试探该行的其余位置。
按照教材做法,每次check是和前k个放置的比,要花O(n)时间check.但是由于对角线的斜率是一样的,可以开两个数组分别记录对角线有没有被涉及到。
时间复杂度: O(n * n!) -> O(n!)
3.0-1背包
0-1背包爆搜,每个物品选和不选。可以花O(n)的时间通过计算上界函数进行最优解剪枝、可行性剪枝,在Acwing上跑的竟然比dp快,不是很理解。
时间复杂度: O(n*2^n)
4.图的m着色问题
给定n个点的图,判断能否用不超过m种颜色进行染色。
对于每个点,都有m种颜色供选择,加之每次选择颜色后需要与和它相邻的点进行判断是否冲突。
可以进行等效冗余剪枝 ,对于任意三个点,染有红、黄、蓝三种颜色,在其他点不变的情况下,有3!种排列方式,不需要搜索完所有方案。
时间复杂度: O(n * m ^ n)
5.TSP
经典问题,直接模拟退火。
考虑爆搜,每条合法路径需是除起点外的permutation,而且终点与起点有边相连。所以是个permutation树。
时间复杂度: O(n!)
6.最大团问题
最大团问题 等价于 补图的最大点独立集合。
最大团首先是一个团,而且要满足是所有团种的最大。团的定义是一个局部最大的完全子图。
一言以蔽之,直接爆搜每个点选还是不选,之后花O(n)的时间check当前方案是否满足是一个clique.
时间复杂度: O(n * 2 ^ n)
7.圆排列
给定n个圆,n个圆之间两两相切,求最小的圆排列长度。都没看懂那个最小的圆排列长度啥意思,是指最右边的圆 与 最左边的圆的圆心距。显然要求一个permutation。需要开一个数组额外求每个圆的圆心在何处。还要花O(n)时间找哪个圆在最右边哪个圆在最左边。
时间复杂度: O(n * n!)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值