这次更新数据结构查找的部分,先上一个查找的思维导图,有一个宏观认识

今天要分享的主题就是导图中用红框括起来的地方,二分查找的题用二叉树去解决,这个来源于最近做数据结构自考题,把这个题先写出来

题目:

对有序顺序表(7,12,15,18,27,32,46,65,83)用二分查找,若查找成功,则查找所需比较次数最多的键值是?

解读:

刚开始看到这道题时,完全懵,说了个啥玩意。仔细研究发现,题描述的意思是,在这个顺序表中找到一个其中值,经过中间值对比次数最多的值是多少

解题思路:

我们知道在书本上,应用二分查找是通过low high两个指针对应的键值找出中间值,让这个中间值与要找的值对比,直到找到位置,这就需要将整个顺序表所有数据找一遍,很麻烦,有没有简单方法,有的!是什么?

将二分查找用二叉排序树实现,比如将题中的顺序表写成二叉排序树的形式

而27,12,46取得便是二分查找中mid得值

从图中可以直观的看出,找到18,83的路径最长,即经过的比较次数最多,因此18,83就是答案

举一反三:

当将二分查找转化为二叉排序树时,就可以不用二分查找的平均查找公式(关键带log运算费事)

用二叉排序树的平均查找长度公式时,假设查找概率相等

则ASL=(1+2*2+2*3+2*4)/9=19/9

参考博客

数据结构(三)——有序表查找(二分查找到二叉树)相关推荐

  1. BinarySearch 有序表的二分查找

    BinarySearch 有序表的二分查找 思路: 前提是线性表采用顺序存储(通常从小到大),然后在有序表中取中间记录作为比较对象,若给定值与中间记录的关键字相等,则查找成功:若小于,则在中间记录的左 ...

  2. 对长度为200的有序表进行二分查找_程序员常用的查找算法(顺序、二分、插值、分块、斐波那契)...

    顺序查找 基本思想 属于线性查找和无序查找,从一端开始顺序扫描,直到找到与目标值value相等的元素. 这是最基本的查找方法,也是时间复杂度最高的查找算法. 在数据过多时,这种方法并不适用. 代码实现 ...

  3. 顺序有序表进行二分查找

    设置low在有序表最左边,high在最右边,mid为(low+high)/2;取中间位置, 当mid的值等于k,返回第mid+1个(从0开始) 当mid的值大于k,从mid左边开始找,令high=mi ...

  4. 数据结构与算法(8-2)有序表查找(折半查找(二分查找)、插值查找)

    目录 一.折半查找(二分查找) 二.插值查找 总代码 一.折半查找(二分查找) 原理:一次次折半,不断向着查找值的位置靠近 . 适用场景:有序(必须) 流程:开始时,min标志首,max标志尾,med ...

  5. Java数据结构与算法——线性查找 二分查找 插值查找

    1.线性查找 有一个数列: {1,8, 10, 89, 1000, 1234} ,判断数列中是否包含此名称[顺序查找] 要求: 如果找到了,就提示找到,并给出下标值. package com.szh. ...

  6. lintcode-106-排序列表转换为二分查找树

    106-排序列表转换为二分查找树 给出一个所有元素以升序排序的单链表,将它转换成一棵高度平衡的二分查找树 样例 标签 递归 链表 思路 类似于二分查找,每次将链表二分,中间节点作为根节点,在建立左子树 ...

  7. 查找技术:有序表的对分查找(折半查找)类

    一 查找技术相关总结: 1.顺序查找:(1)如果线性表为无序表(即表中元素的排序是无序的),则不管是顺序存储结构还是链式存储结构,都只能用顺序查找:(2)即使是有序线性表,如果采用链式存储结构,也只能 ...

  8. 【C语言函数3.2】写一个函数,实现一个整形有序数组的二分查找代码

    写一个函数,实现一个整形有序数组的二分查找代码 #include <stdio.h>int binary_search(int a[], int k, int s) {int left = ...

  9. C语言之折半查找(二分查找)

    一.什么是折半查找? 二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好:其缺点是要求待查表为有序表,且插入删除困难.因此,折半查找方法适用于不经常变动而查找频繁的有序列表.首先,假设表中 ...

  10. 【Golang第6章:排序和查找】golang怎么排序,golang的顺序查找和二分查找,go语言中顺序查找二分查找介绍和案例

    介绍 这个是在B站上看边看视频边做的笔记,这一章是GO语言的排序和查找 有golang怎么排序,golang的顺序查找和二分查找,go语言中顺序查找二分查找介绍和案例,具体请看[文章目录] 配套视频自 ...

最新文章

  1. ubuntu16.04 英文环境安装中文输入法
  2. python 有趣的变量_Python进阶之路 3.2有趣的赋值操作
  3. wxWidgets:wxSpinCtrlDouble类用法
  4. step5 . day6 网络编程 基于TCP协议的多并发模式(使用多进程、多线程、select函数分别实现)...
  5. python zlib字符串压缩
  6. LING与HQL(三)
  7. Python Pandas读取修改excel操作攻略
  8. javascript 代码分离 的那些事儿
  9. arduino水温度传感器数字显示_液晶显示屏应用示例以及程序详解
  10. 【堆】leetcode215:第k大元素
  11. flink读取不到文件_Flink流处理API——Source
  12. python两个dataframe求差集_spark计算两个DataFrame的差集、交集、合集
  13. java 全排列非递归算法_我的字典序全排列java程序,怎么改成非递归算法
  14. 干净虚拟机(centos 6.4)上从头到尾安装并调试Mdrill(二)
  15. 微信H5开发问题集锦
  16. Android adb shell命令详解及实例
  17. 渗透测试-第一步 信息收集 【详细介绍】
  18. CMM---软件能力成熟度模型
  19. 潇洒郎: 凯酷84机械键盘win键被锁解决方法
  20. 基于PHP+MySQL的图书馆图书借阅系统

热门文章

  1. 【日语】日语国际贸易用语
  2. Redis服务器搭建
  3. Windows下安装Python 模块的三种方法
  4. 坚果投影携手徕卡研发的坚果J10S,5000元价位段竟稳居榜首?
  5. 二叉树深度优先遍历-递归实现
  6. matlab——梯形面积计算trapzcumtrapz
  7. wps之excel学习(一)
  8. java程序变成exe可执行文件
  9. 数据库技术的发展历史是怎么样的?
  10. java成长道路必备技能