随笔分类 - 算法导论自学
啃啃经典
摘要:散列表是实现字典操作的一种有效的数据结构。在最坏情况下查找一个元素的时间与链表中查找的时间相同,达到了O(n)。而理想的情况下,散列表查找一个元素的平均时间达到了O(1)。 下面就散列表的原理做一个简单的描述。 用最简单的数字x来做一个描述,就是一个数字在计算机中存放的位置坐标y与这个数字x有直接关
阅读全文
摘要:哨兵(sentinel)昨天看算法导论里对哨兵的描述后,觉得这是一种很有意思的编程思想。哨兵是一个哑对象。一般哨兵不存放任何数据,但其结构体与其他有用的元素一致。正如其字面意思,哨兵是在边界保卫祖国的军人,所以在编程的世界里,哨兵充当着简化边界条件处理的角色。 比较常见的应用是直接插入排序里的哨兵。
阅读全文
摘要:参考算法导论9.3节的内容和这位大神的博客:http://blog.csdn.net/v_JULY_v上对这一节内容代码的实现进行了学习 尝试实现了以查找中位数为前提的select算法。 算法功能:可以确定一个数组中第k大的元素。 算法思想描述如下: 1、将输入n个元素划分为(n/5:向下取整)个组
阅读全文
摘要:桶排序(bucket sort)是一种时间复杂度为线性时间(O(n))的排序。其原理如下:(参考算法导论第8章) 桶排序将[0,1)区间划分为n个大小相同的子区间,每个子区间称之为桶。桶与桶之间是有序的。对于n个输入的数,分别落入不同每一个桶中。落入同一个桶中的元素在结点接入的过程中要查找到其对应的
阅读全文
摘要:计数排序的算法思想: 对于每一个元素x,只要确定了元素x有多少个比它小的元素,那么就可以知道其最终的位置。 记输入数组为A[n],存放最后排序输出的数组为B[n],提供临时存储空间的中间数组记为C[k]。 1\首先,将中间数组C[k]清0,其中,0~k为A[n]中元素的取值范围。 2\一边遍历A[n
阅读全文
摘要:优先队列(priority queue)是一种用来维护一组数据集合S的数据结构。每一个元素都有一个相关的值,被称为关键字key。 这里以实现最大优先队列为例子 最大优先队列支持的操作如下:INSERT(S,x):把元素x插入集合S中MAXIMUN(S):返回S中具有最大键字的元素。EXTRACT-M
阅读全文
摘要:最近在自学算法导论,看到堆排序这一章,来做一下笔记。堆排序是一种时间复杂度为O(lgn)的原址排序算法。它使用了一种叫做堆的数据结构。堆排序具有空间原址性,即指任何时候都需要常数个额外的元素空间存储临时数据。 堆:二叉堆是一个数组,它可以被看成一个近似的完全二叉树。除了最底层以外,该树是满的;且最底
阅读全文
摘要:问题描述: Find the contiguous subarray within an array (containing at least one number) which has the largest sum. For example, given the array [−2,1,−3,4
阅读全文
摘要:快速排序 是非常经典的一个算法,可以在对数规模的时间下实现对一组数的排序。 其基于分治的思想,每一趟排序把原组数划分为更小的范围进行排序,并且一定有一个数会在每趟排序下放在最终的位置。 对于一个数组arr[p....r]进行快排: 划分:把数组划分为arr[p...q-1],arr[q],和arr[
阅读全文

浙公网安备 33010602011771号