算法导论中的一道习题:
证明: 在最坏情况下,找到n个元素中的第二小的元素需要n+ceil(lgn)-2次比较。(提示:可以同时找到最小元素,ceil表示向上取整)
思路:
找到最小元素需要n-1次比较。采用两两结合比较的方法。如果n为奇数,则取第一个元素为临时最小元素min,其它两两结合比较,形成一个类似树的比较过程。如果n为偶数,则直接进行两两结合比较,根节点即为最小元素。
接下来查找...
分类:
其他好文 时间:
2014-09-30 14:23:59
阅读次数:
181
一、什么是KMP算法Knuth-Morris-Pratt字符串查找算法(常简称为 “KMP算法”)是在一个“主文本字符串”S内查找一个“词”W的出现,,以此避免对以前匹配过的字符重新检查。(在原串中匹配模式串)二、KMP演示http://staff.ustc.edu.cn/~ypb/jpkc/fla...
分类:
其他好文 时间:
2014-09-25 23:51:08
阅读次数:
273
如果静态查找表是一个有序表,则可以使用折半查找。
折半查找的过程是:先确定待查记录所在的范围(区间),然后逐步缩小范围直到找到或找不到该记录为止。折半查找过程是以处于区间中间位置记录的关键字和给定值比较,若相等,则查找成功,若不等,则缩小范围,直至新的区间中间位置记录的关键字等于给定值或者查找区间的大小小于零时(表明查找不成功)为止。
关键字key与...
分类:
其他好文 时间:
2014-09-24 22:40:38
阅读次数:
213
//顺序查找//顺序查找是在一个已知无序队列中找出与给定关键字相同的数的具体位置。原理是让关键字与队列中的数从第一个开始逐个比较,直到找出与给定关键字相同的数为止。function search($array,$k){ $n = count($array); //count函数用于计算数组中的元素个...
分类:
其他好文 时间:
2014-09-21 21:27:51
阅读次数:
243
TBOX提供了各种常用算法,对容器中的元素进行各种操作,这里主要介绍下排序和查找算法。 排序算法目前支持如下几种: 1. 快速排序:tb_quick_sort 2. 堆排序: tb_heap_sort 3. 插入排序:tb_bubble_sort 4. 冒泡...
分类:
其他好文 时间:
2014-09-20 19:38:49
阅读次数:
183
二分查找算法是一种在有序数组中查找某一特定元素的搜索算法。搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组 为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半。折半搜索每次把搜索区域减少一半,时间复杂度为Ο(logn)。...
分类:
其他好文 时间:
2014-09-18 11:31:23
阅读次数:
340
Binary Search
Jon Bentley曾经说过类似的话:“90%的程序员无法正确实现二分查找算法
就冲着这句话去写binary search
binary_search 的算法实现部分
/*********************************************************
code writer ...
分类:
其他好文 时间:
2014-09-18 11:30:13
阅读次数:
230
就平均时间性能而言,二叉排序树上的查找和二分查找差不多。静态查找:数据集合稳定,不需要添加,删除元素的查找操作。动态查找:数据集合在查找的过程中需要添加或删除元素。 就表的有序性而言,二叉排序树无须移动结点,只需修改指针即可完成插入和删除操作,且其平均的执行时间均为O(lgn),因此更有效。二分查找...
分类:
其他好文 时间:
2014-09-16 00:09:19
阅读次数:
177