两个有序表合并成一个有序表最少与最多的比较次数

这篇具有很好参考价值的文章主要介绍了两个有序表合并成一个有序表最少与最多的比较次数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在数据结构(严蔚敏)第二章课后习题中有这样一个题,关于把两个有序表合并的操作比较次数

将两个各有 N 个元素的有序表归并成一个有序表,其最少的比较次数是( A)。
A.N
B.2N -1
C.2N
D.N -1

显然,比如A顺序表的最大值如果比B顺序表的最小值还要小,只需要拿B的最小元素与A中所有元素比较一遍即可,后续的B的所有元素都无需在比较。

在延伸一下,

将两个各有 N 个元素的有序表归并成一个有序表,其最多的比较次数是( B)。
A.N
B.2N -1
C.2N
D.N -1

这种可以想象一下A顺序表,1,3,5......,B顺序表2,4,6......

恰好把B顺序表平均插入A顺序表中,如果B顺序表第二个元素不是4,而是6,那么B顺序表的最后一个元素就无需比较了,这样就少一个元素拿去比较,总的比较次数也就相应减少了。

如何计算比较次数呢?

B中的元素2要和A中的元素1和元素3比较两次,B中的元素4要和A中的元素3和元素5比较两次,4一定是比2大的,2之前的元素无需再比较,类比下去,B中的每一个元素都要比较两次(除了最后一个元素,最后一个元素只需比较一次就可以)总的次数=2(n-1)+1=2n-1.

奉上顺序表的删除和插入操作的平均时间复杂度怎么计算的

先看插入

如下面顺序表有七个元素

合并两个有序表最好情况下比较次数,数据结构,数据结构

 但是插入位置却有八个,从第1个位置(最前面)到第8个位置(最后面),那么插入每个位置的概率是相等的,就是1/8。有n个元素时,当在第一个位置插入时需要移动n个元素,第二个位置插入时需要移动n-1个元素,类比下去第i个位置插入时,需要移动n-i+1个元素,于是:

合并两个有序表最好情况下比较次数,数据结构,数据结构

平均时间复杂度O(n)文章来源地址https://www.toymoban.com/news/detail-695693.html

 再看删除

合并两个有序表最好情况下比较次数,数据结构,数据结构

 同样的,一个顺序表有7个元素,可删除的位置也就是7个,从第1个到第7个。

假如有n个元素,删除每一个元素的概率都相等,就是1/n;删除第一个元素时,需要移动的元素个数是6,删除第2个元素时,需要移动的元素个数是5,类比,删除第i个元素时需要移动的元素个数是n-i,于是有:

合并两个有序表最好情况下比较次数,数据结构,数据结构

平均时间复杂度O(n)

到了这里,关于两个有序表合并成一个有序表最少与最多的比较次数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Centos 快速查看占用资源最多的进程

    ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head

    2024年02月11日
    浏览(39)
  • 将两个递增的有序链表合并为一个递增的有序链表

             要求结果链表仍使用原来两个链表的存储空间,不另外占用其他存储空间。表中不允许有重复的数据。   【算法思想】         要求利用现有的表中的结点空间建立新表,可通过更改结点的指针域来重新建立新的元素之间的线性关系。此题关键点在于:为保证

    2024年02月07日
    浏览(42)
  • 每日一题:LeetCode-11.盛水最多的容器

    前言: 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈    🔎🔎如果说代码有灵魂,那么它的灵魂一定是👉👉 算法 👈👈,因此,想要写出💚优美的程序💚,核心算法是必不可少的,少年,你渴望力量吗😆😆,想掌握程序的灵魂吗❓❗️那么就必须踏上这样一条漫长

    2024年02月03日
    浏览(43)
  • leetcode_2558 从数量最多的堆取走礼物

    1. 题意 给定一个数组,每次从中取走最大的数,返回开根号向下取整送入堆中,最后计算总和。 从数量最多的堆取走礼物 2. 题解 直接用堆模拟即可 2.1 我的代码 用了额外的空间 O( n ) priority_queue 会自动调用 make_heap() 、 pop_heap() 2.2 更简的代码 直接在原数组上建堆就可以了

    2024年02月06日
    浏览(46)
  • 「SQL面试题库」 No_28 订单最多的客户

    「SQL面试题库」是由 不是西红柿 发起,全员免费参与的SQL学习活动。我每天发布1道SQL面试真题,从简单到困难,涵盖所有SQL知识点,我敢保证只要做完这100道题,不仅能轻松搞定面试,代码能力和工作效率也会有明显提升。 1.1 活动流程 整理题目 :西红柿每天无论刮风下雨

    2023年04月10日
    浏览(60)
  • Linux如何查看当前占用CPU和内存最多的进程

    查看占用 CPU 最高的前10个进程 查看占用内存(MEM)最高的前10个进程 输入 top 命令,然后按下大写M按照内存MEM排序,按下大写P按照CPU排序

    2024年02月17日
    浏览(50)
  • Linux查询内存或CPU占用最多的几个进程

    一、可以使用以下命令查使用内存最多的10个进程 方法1: ps -aux | sort -k4nr | head -10 如果是最高的三个,10改为3即可 命令解释:  1. ps:参数a指代all——所有的进程,u指代userid——执行该进程的用户id,x指代显示所有程序,不以终端机来区分。ps -aux的输出格式如下: USER  

    2024年04月17日
    浏览(38)
  • 将两个递增的有序链表合并为一个递增的有序链表.【数据结构】【线性表】

    编写一个函数完成如下功能:将两个递增的有序链表合并为一个递增的有序链表。要求结果链表仍使用原来的链表空间,不另外占用其他的存储空间。表中不允许有重复的数据。 要求,在主函数中调用上面的函数测试。 提示:还需要定义其他函数,比如初始化链表,构造单

    2024年02月06日
    浏览(46)
  • 「SQL面试题库」 No_33 好友申请 II :谁有最多的好友

    「SQL面试题库」是由 不是西红柿 发起,全员免费参与的SQL学习活动。我每天发布1道SQL面试真题,从简单到困难,涵盖所有SQL知识点,我敢保证只要做完这100道题,不仅能轻松搞定面试,代码能力和工作效率也会有明显提升。 1.1 活动流程 整理题目 :西红柿每天无论刮风下雨

    2024年02月01日
    浏览(39)
  • 选读SQL经典实例笔记17_最多和最少

    2024年02月14日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包