随笔分类 -  算法导论自学

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