数据结构(算法)总结.doc

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构(算法)总结

多项式时间 - 人们可以接受的时间复杂度(不会长到没尽头)。 P问题 - 可以在多项式时间内解决的问题。 NP问题 - 可以猜到答案,并可在多项式时间内验证是否正确的问题。 NPC(完全)问题 - 是NP问题,且其它所有NP问题都可约化到它的问题。 NP-Hard(难)问题 - 不一定是NP问题,但其它所有NP问题都可约化到它的问题。 时间复杂度的概念: 给定算法的运行时间增长趋势,一般输入规模看成很大。 (渐进)阶从低到高: 1 logn n nlogn n2 n3 2n n! nn 「大O阶表示法」的计算原则:保留最高阶,去头去尾。 头:最高阶项的系数。 尾:非最高阶项与常数。 比如: 6n3 + 4n2 + 10000 = O( n3 ) 10n2 + 2n = O(2n) 随机化算法分类: 数值随机化算法 舍伍德算法 拉斯维加斯算法 蒙特卡罗算法 棋盘覆盖(分治策略): 前提:棋盘必须正好有2k×2k(k = 自然数)个格子。 步骤: 将棋盘划分成4个子棋盘。 除了有特殊格的子棋盘外,其它3个盘里各取离结合点最近的格子,组成骨牌。 将每个子棋盘再划分成4个子棋盘,同样执行步骤2。 递归终止条件:子棋盘的普通格只剩3个。 比如一个8×8的棋盘(书p21页例子): 划为4等份: 不看有特殊格那份,其它3份取离结合点最近的格子,拉黑,就形成了一块骨牌。 现在每份都有1块特殊格,然后每份再划4等份: 每一小份重新执行上面的算法(递归了),忽视特殊份,拉黑离结合点近的。 然后继续递归,重复刚才的步骤(子问题结构完全相同)。 当然这里棋盘比较小,到这里已经可以看出结果。 递归中止条件:当子棋盘(划出的小份)只剩下3个普通格时。 七种常用排序算法的时间复杂度: 最好情况O( ? ) 平均情况O( ? ) 最坏情况O( ? ) 稳定性 冒泡 n n2 n2 稳定 选择 n2 n2 n2 稳定 插入 n n2 n2 稳定 希尔 n1.3 nlogn ~ n2 n2 不稳定 堆 nlogn nlogn nlogn 不稳定 归并 nlogn nlogn nlogn 稳定 快速 nlogn nlogn n2 不稳定 其中最坏情况最重要。 稳定性的意思: 假设有一个数组{ 2, 5, 2, 7, 1 } 其中第一个2假设叫a元素,第二个2叫b元素吧。 对其排序后得{ 1, 2, 2, 5, 7 } 原本a在b前面,如果排序后,a还在b前面,就是稳定的。它们调换了就是不稳定的。 也就是说稳定性,决定了同值元素的顺序会不会变动。 理论上,希尔和堆排序不会考,因为上课没讲过。 0-1背包(动态规划): 假设有3个物品: 物品A重3斤,价值4元; 物品A重4斤,价值5元; 物品A重5斤,价值6元。 考虑方式: 当放了n-1个物品时,第n个物品放还是不放? 设: C - 当前背包容量(斤) w[n] - 第n个物品的重量(斤) v[n] - 第n个物品的价值(元)。 F( n, C ) - 将前n个物品放入容量为C的背包时,能获取的总价值。 如果不放第n个物品: 公式: F( n-1, C ) 如果放第n个物品 公式: F( n-1, C - w[n] ) + v[n] 简单来说,就是把C、w[n]、v[n] 代入公式,看2个公式哪个得出的结果大,就选哪个。 然后可以构造出一张表: 背包容量为C时,能选择的最大价值。 重量 价值 C=1 C=2 C=3 C=4 C=5 C=6 C=7 C=8 C=9 C=10 A 3斤 4元 A X X 4 4 4 4 4 4 4 4 B 4斤 5元 A + B X X 4 5

文档评论(0)

文档精品 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:6203200221000001

1亿VIP精品文档

相关文档