编程思想与技术总结(一)

发表于:2011-10-24 09:55

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:shuqin1984    来源:51Testing软件测试网采编

分享:

  11、数组结构: 高效随机访问的下标集到值集的映射

  a)下标集是存储连续的,即最简单的数组形式;

  b)下标集是非连续的, 例如存储稀疏矩阵的元组集合

  12、链表

  a)单链表: 在列表中高效地插入、删除;

  b)多重栈、多重队列实现;

  13、栈: 先进后出型数据结构,仅允许在一端进行插入和删除

  a)深度优先搜索的辅助数据结构,比如回溯技术

  b)典型用例: 表达式计算,走迷宫

  14、队列: 先进先出型数据结构,仅允许在一端进行插入,在另一端进行删除

  a)FIFO服务的最佳选择,比如操作系统中各种就绪、阻塞队列

  b)广度优先搜索的辅助数据结构,比如二叉树的层序遍历

  15、二叉查找树

  在平均情形下,查找、插入、删除、最大元素、最小元素、前驱元素、后继元素的操作均为O(logn),最差情形是O(n)。中序遍历可用于排序。

  16、散列表

  通常主要支持查找、插入和删除操作;在平均情形下,这些操作可以在O(1)内完成;在最差情形下,在O(n)内完成。

  17、位图技术

  将给定元素标识成一个位,从而在后续处理中标识该元素的存在。可用于稠密集合的排序,节省空间资源。

  18、堆结构

  用来查找第k小(大)的元素,前K大的元素,实现优先级队列以及排序。

  19、算法分析: Ο(n), Ω(n), Θ(n)

  通过统计基本操作的次数,并取主项,可以得到算法运行的时间复杂度。

  a)Ο(n): 算法的上界,即至多要运行的时间近似;

  b)Ω(n): 算法的下界,即至少要运行的时间近似;

  c)Θ(n): 算法的精确界,不大于O(n),不小于Ω(n)

  NOTE: 这里通俗地说明三种界,精确定义请参考相关的算法书籍。

  通过取阶、无穷小可以快速判断算法复杂度。比如

  3n^2 + 2nlogn = O(n^2) 这是因为:

  (3n^2 +2nlogn)/(n^2) 对 n 取极限(当n趋于无穷大时)为零,而

  (3n^2 +2nlogn)/(nlogn) 取极限为无穷大,因此,

  3n^2 + 2nlogn = O(n^2), 3n^2 + 2nlogn =Ω(nlogn)

  通过对程序中的嵌套循环层数可以快速判断算法的时间复杂度;但有些情况是例外,比如外层循环的下标根据内层循环的下标进行跳跃性前进。

32/3<123>
重磅发布,2022软件测试行业现状调查报告~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计

法律顾问:上海漕溪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2023
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号