查找算法学习(1)
来源:互联网 发布:土巴兔怎么样 知乎 编辑:程序博客网 时间:2024/06/05 16:06
1.对于静态表的顺序查找法,若在表头设置监视哨,则正确的查找方法:从第n个元素开始往前查找该数据元素。
分析:常把第一个或最后一个元素作为哨兵
表头设置监视哨,就是将空出来的下标为0的这个元素的值设为Key,
这样我们就不用多次判断 i是否越界,因为就算静态表中找不到,也会在0位置上配对成功,返回0!
n个元素都要比较一次,但都不成功,最后监视哨也要比较一次,比较成功,一共比较n+1次.
例子:有5个元素,分别是1,2,3,4,5.要找的元素是8.那么8就是监视哨,数列如下: 8,1,2,3,4,5.
从5开始向前查找,一共要比较6次,比较到监视哨成功,监视哨所在的下标是0,所以返回值为0.
2.将10个元素{54,28,16,34,73,62,95,60,26,43},按照依次插入方法生成一颗二叉排序树,查找值为62的结点所需要比较次数:3
分析:依次插入将带插入值直接放入二叉搜索树符合条件位置,使得整棵树左子树均比根小,右子树均比根大,结果如图所示
查找62需要比较3次,分别是和52、73、62比较
3.二元查找树的任何结点的左右子树都是二元查找树。
二元查找树的任意子树都是二元查找树。
二元查找树:它首先要是一棵二元树,在这基础上它或者是一棵空树;或者是具有下列性质的二元树:(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;(2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;(3)左、右子树也分别为二元查找树;
4.给定一个整数sum,有N个有序元素的数组中寻找元素a,b,使得a+b的结果最接近sum,最快的平均数据复杂度是:O(N)
分析:思想类似于两端向中间扫描
1)、设定两个指针P1、P2,分别指向数组开始和结尾,即P1指向最小值,P2指向最大值;
2)、计算 *P1+*P2的值为 SUM,与 sum比较,记录它们的差值 DIF和 SUM,若 SUM<sum,P1++,若SUM>sum,P2--;
3)、重复以上过程直到DIF最小
5.对大小均为n的有序表和无序表分别进行顺序查找,在等概率查找情况下,对于查找失败,它们的平均查找长度是:不同的;
对于查找成功,它们的平均查找长度是:相同的;
6. 折半查找属于随机访问特性链表不行
堆排序也不能用链表因为调整堆时没法随机访问底层孩子节点
快速排序可以链表
归并排序可用链表
基数排序可用链表
插入排序链表比数组要快一些减少移动次数
7.一个长度为32的有序表,采用二分查找一个不存在的元素,则最多比较次数是:6
分析:这题其实是考察完全二叉树的深度问题,比较次数也就是深度,只含有一个节点的时候深度为1,假设深度为k,则有2^k-1>=n>2^(k-1)-1,其中2^k-1对应深度为k的满二叉树对应节点数,那么等价于2^k>=(n+1)>2^(k-1),不等式两边同时取log,k>=log(n+1)>(k-1),此时k等于log(n+1)向上取整数,因此log(32+1)向上取整为6。
8.对于二分搜索法,下面描述正确的是(AC)
A 可用于数组 B 可用于单链表
C 只能在已排序的数据上进行
D 最坏情况下数据复杂度为O(N*log N)
分析:最坏时间复杂度为边缘位置,即O(log N)
9.二分查找要满足顺序存储。链存储、按value有序中的哪些条件? 顺序存储、按value有序
分析:首先二分查找要求序列必须有序的;其次序列可以随机访问任何有效范围内索引的值,链式存储不能随机访问,必须是顺序存储。
10、顺序查找法适用于查找顺序存储或链式存储的线性表,平均查找次数为 N/2;二分查找只适用于查找顺序存储的有序表,平均查找次数为logN。在此假定N为线性表中结点数,且每次查找都是成功的。
二叉查找树的查找效率与二叉树的树型有关,在呈单支树时其查找效率最低。
- 查找算法学习(1)
- 算法学习之查找算法:静态查找表(1)顺序表查找
- 算法学习--查找(一)
- 查找算法学习(2)
- 查找算法学习(3)
- 查找算法学习(4)
- 学习回顾算法(顺序查找算法)
- 算法学习之查找算法:动态查找表(1)二叉排序树
- 算法学习(1)二分查找法java版
- 学习算法(1)——2分查找法
- 查找算法(1)折半查找法
- 二分法查找(折半查找)算法学习笔记
- 二分法查找(折半查找)算法学习笔记
- Java算法学习(查找数字)
- 基础算法学习(01)-二分查找
- 学习回顾算法(二分法查找)
- 算法查找学习笔记
- 查找算法学习笔记
- python 发送邮件
- The app icon set named "AppIcon" did not have any applicable content.
- LINUX软件管理 (源代码、RPM、YUM)
- 模式设计之策略模式
- centos7/centos6 装mongodb
- 查找算法学习(1)
- 短信监听广播
- echarts 圆形图(比例)
- 如何用phptorm,SSH方式连接,服务器同步代码实现断电调试
- UVA-Ancient Cipher
- Java Web实现使用浏览器从服务器下载文件(后台)
- 检测文件被占用
- mackeeper病毒解决方法
- spring+freemarker+springMvc+mybatis+maven整合