因为预先不知道出现的单词列表,无法方便地排序并使用折半查找;也不能分别对输入中的每个单词都执行一次线性查找,开销太大-->O(n^n)。
所以考虑使用二叉树的数据结构(O(n*logn))来组织这些单词,实现如下:
-----
/*
* My practice of K&R 6.5
*
*/
#include
#include
#include
#include
#defin...
分类:
其他好文 时间:
2014-09-19 02:19:54
阅读次数:
223
所谓折半查找,又称二分查找,是一种在有序数组中查找某一特定元素的搜索算法。优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元...
分类:
其他好文 时间:
2014-09-18 20:21:44
阅读次数:
265
二分查找算法是一种在有序数组中查找某一特定元素的搜索算法。搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组 为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半。折半搜索每次把搜索区域减少一半,时间复杂度为Ο(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
给出三角形三个顶点,求出三个互切的圆的半径
虽然大白鼠说可以推出公式,可是这个公式只怕没那么容易推……我左看右看上看下看也推不出。
应该是要做辅助线什么的,那也……
由于很容易就推出了关于三个半径的三元方程组,那么就试试搜索吧,搜其中任意一个半径,只要满足这个方程组就可以了,
那么就二分搜索吧,当然,这个单调性呢?
看图可知,比方说,我们搜最靠近最上面的顶点的圆的半径r1,由于,...
分类:
其他好文 时间:
2014-09-17 16:53:02
阅读次数:
299
八数码问题。
BFS+康托展开。康托用来判重。直接搜的的话会超时。需要预处理。
我就用结构体存了一个状态。
struct lx
{
int can;//当前状态的康托展开
int pcan;//上一状态的康托展开
int k;//移动方向
};
把所有的 181442 种状态存下来。排序,然后二分搜索。迭代寻找上一状态,直到初始的 0 。
...
分类:
其他好文 时间:
2014-09-16 17:21:40
阅读次数:
181
就平均时间性能而言,二叉排序树上的查找和二分查找差不多。静态查找:数据集合稳定,不需要添加,删除元素的查找操作。动态查找:数据集合在查找的过程中需要添加或删除元素。 就表的有序性而言,二叉排序树无须移动结点,只需修改指针即可完成插入和删除操作,且其平均的执行时间均为O(lgn),因此更有效。二分查找...
分类:
其他好文 时间:
2014-09-16 00:09:19
阅读次数:
177
BFPRT算法解决的问题十分经典,即从某n个元素的序列中选出第k大(第k小)的元素,通过巧妙的分析,BFPRT可以保证在最坏情况下仍为线性时间复杂度。该算法的思想与快速排序思想相似,当然,为使得算法在最坏情况下,依然能达到o(n)的时间复杂度,五位算法作者做了精妙的处理。算法步骤:1.将n个元素每5...
分类:
其他好文 时间:
2014-09-15 12:35:28
阅读次数:
222
将排序数组按绝对值大小排序 代码(C)本文地址: http://blog.csdn.net/caroline_wendy排序的数组有可能包含正负, 可以使用折半查找确定中值位置, 然后再使用两个指针, 顺次排序两端.解决思路是: 1.数组中的元素全为正,返回; 2.数组中的元素全为负,返回; 3.数组中有正数有负数,就用二分法查找,判断中间元素的符号 a)中间元素为正...
分类:
其他好文 时间:
2014-09-14 22:12:02
阅读次数:
524
还有一个典型的递归例子是对已排序数组的二分查找算法。博e百娱乐城现在有一个已经排序好的数组,要在这个数组中查找一个元素,以确定它是否在这个数组中,很一般的想法是顺序检查每个元素,看它是否与待查找元素相同。这个方法很容易想到,但它的效率不能让人满意,它的复杂度是O(n)的。现在我们来看看递归在这里能不...
分类:
其他好文 时间:
2014-09-13 21:16:05
阅读次数:
166