随笔分类 - 算法学习
摘要:查找树search tree: 一种数据结构,支持多种动态集合操作。search, minimum, maximum, predecessor, successor, insert, delete等可以用作字典,也可以用作优先队列binary search tree中,执行基本操作的时间和树的高度成正比。随机构造的n节点bst,最坏情况运行时间是O(lg n)但如果树是n结点的线性链,这些操作的最坏情况运行时间是O(n)bst的问题:如何保证随机构造?或者,某些变种能使得最坏情况性能仍然不错?(红黑树)bst基本性质:设x是bst的某结点。则 key[LeftChild[x]]<=key
阅读全文
摘要:1、对于x1,x2,...xn的中位数即各xi的带权中位数,此处权值wi=1/n, i=1,2....n 此时x1,x2...xn的中位数为xk,k=┗(n+1)/2┛.则x1,x2...x(k-1)的权值和为┗(n-1)/2┛/n<=(n-1)/2n<1/22、通过排序,在O(nlgn)的最坏情况时间内求出n个元素的带权中位数 先用堆排序(按xi的增序)。设排序后的数组为x1,x2...xn. 再用一个数组zw[1,2...n]: zw[1]=w[1] for i=2->n zw[i]=w[i]+w[i-1] if(zw[n]-zw[i]<=1/2) resultpo
阅读全文
摘要:排序算法分类:分类方法一:简单排序(包括冒泡、插入、直接插入等),分治排序(快速、归并等)分类二:插入排序类(直接插入、shell排序)交换排序类(冒泡、快速)选择排序(直接选择、堆排序、选择书归并)分配排序(桶排序、基数排序、索引排序)1、直接插入排序原地算法最差时间复杂度O(n2)(原序列为逆序)平均时间复杂度O(n2)最佳时间复杂度O(n)(原序列是顺序)对于短序列,直接插入排序比较有效可以实现稳定排序2、shell排序(缩小增量排序法)利用了插入排序的两个优点(正序列排序时间O(n);对短序列较为有效)效率比直接插入排序高。增量序列需要考虑。如果增量每次除以2递减,效果不佳。(原因:增
阅读全文
摘要:今天学习《算法导论》 chapter9,查找数组中min:数组中元素个数为n,需要比较n-1次才能找出最小值。从比较次数来看,已经是最优的同时找出min和max:最多需要3┌ n/2┐次比较找到n个元素中的次小元素:最坏情况下,需要n+┌ lgn ┐-2次比较。需要有一个链表保存和最小值比较过的值。找到n个元素中第i小的元素:1、平均情况下,线性时间 利用了RANDOMIZED_PARTITION算法。类似于快排。对输入数字进行递归划分,但每次只处理划分的一边。 最坏情况下,时间复杂度是O(n2)。和快排类似2、最坏情况线性时间的选择:SELECT算法 (1)如果n=1,则select直...
阅读全文

浙公网安备 33010602011771号