编程统计,长度为N的有序数组进行二分查找时,查找成功与失败的平均查找长度。注意,表达成总查找长度除以总查找个数的形式。

输入样例:

输入数组的元素个数:一个正整数:

6

输出样例:

在第一行输出查找成功的平均查找长度,在第二行输出查找失败的平均查找长度: (不要求计算,也不进行约分,仅输出成分数形式)

14/6
27/7

如图所示的二叉排序树

查找成功的平均查找长度为:∑(本层高度*本层元素个数)/节点总数=(1*1+2*2+3*3+3*4)/9

查找不成功的平均查找长度:∑(本层高度*本层补上的叶子个数)/补上的叶子总数=(2*1+3*3+4*6)/10

查找成功的平均查找长度为:二叉树每一层的节点数乘以层数,然后累加,最后除以元素个数n。

查找失败的平均查找长度为:把每一个节点的叶子节点补齐,然后计算叶子节点的个数乘以所在的层数,然后累加,最后除以元素个数n加一。

代码实现:

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);int n = in.nextInt();int high=high(n);       //二叉树的高度int allSearch=0;               //成功总查找次数for(int i=1; i<high; i++)allSearch+=(i*Math.pow(2,i-1));int lastHeightNodes = n - (int)Math.pow(2,high-1) + 1;  //最下面一层的节点数allSearch+=(lastHeightNodes*high);System.out.println(allSearch+"/"+n);int unAllSearch=lastHeightNodes*2*(high+1);         //失败总查找次数(满)int mm = (int)Math.pow(2,high-1)-lastHeightNodes;unAllSearch+=(mm*high);System.out.println(unAllSearch+"/"+(n+1));}public static int high(int n){   //高度int s=0;while(n>0){n=n/2;s++;}return s;}}

平均查找长度之二分查找 -【Java】相关推荐

  1. 二分查找的平均查找长度_二分查找

    1.什么是二分查找 数据的查找在计算机的操作中非常常见,那么我们应该怎样在计算机中实现查找操作呢? 最简单的一种方法:"傻找",也就是一个一个的找,我们把数组中的每个元素都和我们想 ...

  2. 二分查找的平均查找长度_二分查找(折半查找)代码实现

    整理不易,手有余香请点赞! 折半查找,也称二分查找,在某些情况下相比于顺序查找,使用折半查找算法的效率更高.但是该算法的使用的前提是静态查找表中的数据必须是有序的. 在折半查找之前对查找表按照所查的关 ...

  3. 查找算法:二分查找、顺序查找

    08年9月入学,12年7月毕业,结束了我在软件学院愉快丰富的大学生活.此系列是对四年专业课程学习的回顾,索引参见:http://blog.csdn.net/xiaowei_cqu/article/de ...

  4. c语言实验报告 折半查找法,C语言数组之冒泡排序+折半查找法(二分查找)

    冒泡排序算法 将相邻的元素进行两两比较,大的向后"冒", 小的向前"赶". 口诀: N个数字来排队,两两比较小靠前 外层循环N-1(控制需要比较的轮数). 内层 ...

  5. c语言 二分查找法 及二分查找法的时间复杂度。

    二分查找法是用来查找数组中指定的那个元素.使用二分查找的前提是数组是有序的.(这里我们假设是升序) 在现实生活中,我们要猜一个区间内的数字,比如1~10之间,我们通常会猜它的中间数5,再根据要猜的数和 ...

  6. 散列表平均查找长度_如何查找链接列表的长度?

    散列表平均查找长度 什么是链表? (What is a Linked List?) A linked list is a linear data structure used for storing ...

  7. java二分查找(含二分查找代码)

    目录 一:二分查找的条件 二:二分查找思想​​​​​​​ 三:二分查找代码(循环) 四:二分查找代码(递归) 一:二分查找的条件 1.1 必须是顺序存储结构 1.2 必须有序序列 二:二分查找思想 当 ...

  8. java 二分查找_JAVA 实现二分查找算法。我知道你会,但没你想象的那么简单

    二分查找算法定义:二分查找(binary search),也称折半搜索,是一种在 有序数组 中 查找某一特定元素 的搜索算法.搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结 ...

  9. 查找算法之二分查找(对半查找)

      当有序表采用顺序存储时,可以采用二分查找的方式查找指定关键字的元素.   二分查找的基本思想是选择表中某一位置 i i i的元素 A i A_i Ai​,设该元素的关键字为 K i K_i Ki​ ...

最新文章

  1. PHP 用图片输出验证码 无法正常显示
  2. 阿里排查Java问题工具清单!
  3. 计算机技术是双证,计算机技术在职研究生单证可以转双证吗
  4. 永远不要在 MySQL 中使用 UTF-8
  5. bzoj1095 [ZJOI2007]Hide 捉迷藏
  6. 利用有名管道实现进程间的通信
  7. 中文python笔记_Python学习笔记-基础篇
  8. 【OpenCV 例程200篇】76. OpenCV 实现图像傅里叶变换
  9. 使用Swagger,ApiExplorer和NSwag掌握ASP.NET Core和ABP中的外部Web API
  10. 如何限制访问电脑磁盘
  11. 使用PackageManager获得应用(包)信息
  12. 再学 GDI+[36]: TGPPen - SetLineCap
  13. Drupal开发时如何使用远端图片减轻工作量
  14. 软件工程的可行性分析
  15. 牛转乾坤,管理者必读这10本书
  16. 不能不知道的分布式基础理论
  17. 2022年二级建造师报名需要准备什么
  18. 使用IP代理池伪装你的IP(python)
  19. 天生棋局与棋局判断(C语言)
  20. 个人作业2:APP案例分析

热门文章

  1. android 照片拼接长图_最智能的 Android 长图拼接应用:图片自动连接
  2. android 点击图片旋转90度,Android UI之ImageView实现图片旋转和缩放
  3. [报错]hive No files matching path file:
  4. Hi3531DV200的IVE中KCF目标跟踪
  5. 通俗讲解入栈、出栈(C语言)
  6. NYIST 擅长排列的小明
  7. 单片机难学吗?单片机培训机构哪个好?
  8. cad之文本对齐居中操作
  9. NVIDIA官网页面加载慢
  10. 《CSDN开发助手》CSDN官方合法免广告工具,内含大量实用开发工具