摘要:一、插入排序 1.直接插入排序 算法稳定,时间复杂度为O(n^2),空间移动复杂度为O(n2) 如果序列是有序的,最好的时间复杂度为O(n) 即该算法与初始数据的排序序列有关。 2.折半插入排序 查找插入位置采用折半查找法。 算法稳定,时间复杂度为O(nlog2n),空间移动复杂度为O(n2) 折半
阅读全文
随笔分类 - 00.Data Structure
摘要:转自:http://zh.lucida.me/blog/on-learning-algorithms/关于严格来说,本文题目应该是我的数据结构和算法学习之路,但这个写法实在太绕口——况且CS中的算法往往暗指数据结构和算法(例如算法导论指的实际上是数据结构和算法导论),所以我认为本文题目是合理的。原文...
阅读全文
摘要:Dijkstra算法当中将节点分为已求得最短路径的集合(记为S)和未确定最短路径的个集合(记为U),归入S集合的节点的最短路径及其长度不再变更,如果边上的权值允许为负值,那么有可能出现当与S内某点(记为a)以负边相连的点(记为b)确定其最短路径时,它的最短路径长度加上这条负边的权值结果小于a原先...
阅读全文
摘要:堆的初始化,时间复杂度为O(n)。 在堆排序中一次进行堆的初始化操作,其时间复杂度为O(n),n-1次进行堆的调整,每次调整的时间复杂度为O(logn), 所以,堆排序的时间复杂度为O(nlogn)。 因为堆的每次插入、删除元素均需要重新调整堆,所以插入语删除元素的时间复杂度为O(logn).
阅读全文
摘要:首先这个循环是从i = headsize/2 -> 1,也就是说这是一个bottom-up的建堆。于是,有1/2的元素向下比较了一次,有1/4的向下比较了两次,1/8的,向下比较了3次,......,1/2^k的向下比较了k次,其中1/2^k T = O(n).
阅读全文

浙公网安备 33010602011771号