当前位置: 首页 > news >正文

算法导论第9章思考题

9.1-1 证明:在最坏情况下,找到n个元素中第二小的元素需要n+ ⌈ lg ⁡ n ⌉ \lceil\lg n\rceil lgn-2此比较。(提示:可同时找最小元素)
先进行n-1次比较,每次比较中较大的数可能是第二小的元素
9.3-3 假设所有元素互异,说明在最坏情况下,如何才能使快排的运行时间为O(nlg n)
通过快速选择选取中位数作主元
9.3-7 设计一个O(n)时间的算法,对于一个给定的包含n个互异元素的集合S和一个正整数k<=n,该算法能确定S中最接近中位数的k个元素
在O(n)时间内找到中位数,用一个新数组存储其它元素与中位数的差值的绝对值。然后在O(n)时间内找到第k小的元素,输出小于等于此值的元素
9.3-8 设X和Y为两个数组,都包含n个有序的元素。请设计一个O(lg n)时间的算法来找出X和Y中所有2n个元素的中位数

MEDIAN(X, Y, n)if n == 1return min(X[1], Y[1])if X[n / 2] < Y[n / 2]return MEDIAN(X[n / 2 + 1..n], Y[1..n / 2], n / 2)return MEDIAN(X[1..n / 2], Y[n / 2 + 1..n], n / 2)

9-3
a. 设计一个能用U i _i i(n)次比较在n个元素中找出第i小元素的算法,其中,U i _i i(n)= { T ( n ) 若 i ⩾ n 2 ⌊ n 2 ⌋ + U i ( ⌈ n 2 ⌉ ) + T ( 2 i ) 其他 \left\{\begin{aligned}&T(n)&&若i\geqslant{n\over2}\\ &\lfloor{n\over2}\rfloor+U_i(\lceil{n\over2}\rceil)+T(2i)&&其他 \end{aligned}\right. T(n)2n+Ui(⌈2n⌉)+T(2i)i2n其他
(提示:从 ⌊ n 2 ⌋ \lfloor{n\over2}\rfloor 2n个不相交对的两两比较开始,然后对由每对中的较小元素构成的集合递归)

function SELECT(A, i):n=|A|if n <= 2i:return LINEAR_SELECT(A, i)  // O(n) 选择算法// Step 1: 分成 ⌊n/2⌋ 对,比较得到 S(较小者)pairs = split A into ⌊n/2⌋ disjoint pairsS = []for each pair (a, b) in pairs:if a < b:S.append(a)else:S.append(b)if n is odd:S.append(remaining element)// Step 2: 在 S 中递归找第 i 小的元素 xreturn SELECT(S, i)

9-4 假设所有的元素互异,输入数组的元素被重命名为z 1 _1 1,z 2 _2 2,…,z n _n n,其中z i _i i是第i小的元素。对所有1 ⩽ \leqslant i<j ⩽ \leqslant n,设X i j k _{ijk} ijk=I{在查找 z k z_k zk期间,z i _i i和z j _j j进行过比较}
a. 给出E[X i j k _{ijk} ijk]的准确表达式。(提示:表达式可能有不同的值,依赖于i、j、k的值)
E[X i j k _{ijk} ijk]= { 2 j − i + 1 若 i < k < j 0 其他 \left\{\begin{aligned}&2\over{j-i+1}&&若i<k<j\\ &0&&其他 \end{aligned}\right. ji+120i<k<j其他

http://www.xdnf.cn/news/397621.html

相关文章:

  • 深入理解深度循环神经网络(Deep RNN)
  • Beta分布--贝叶斯建模概率或比例常用分布
  • eNsp的使用
  • 数据结构【二叉树的遍历实现】
  • 免费公共DNS服务器推荐
  • 如何读论文【论文精读】
  • opencascade.js stp vite webpack 调试笔记
  • C++ STL编程 vector空间预留、vector高效删除、vector数据排序、vector代码练习
  • 风扇接口
  • 自制PowerPoint荧光笔插件指南
  • 集合(超详细)
  • 【人工智能】DeepSeek的崛起-下一代AI模型的秘密武器
  • 微调自qwen3的无审查大模型(需谨慎使用):Josiefied-Qwen3-8B-abliterated-v1
  • LeetCode 热题 100 101. 对称二叉树
  • 单链表C语言实现(付代码全)
  • 进程检测与控制
  • C++学习之STL学习
  • 联合类型的逻辑或关系与类型保护
  • 关于我在实现用户头像更换时遇到的图片上传和保存的问题
  • Colab使用_文件操作
  • C++.IP协议通信
  • 【C++进阶】第3课—二叉搜索树
  • C++猴子摘桃 2024年信息素养大赛复赛 C++小学/初中组 算法创意实践挑战赛 真题详细解析
  • [超详细,推荐!!!]前端性能优化策略详解
  • VC++ 获取CPU信息的两种方法
  • POSIX信号量
  • 【软件测试】基于项目驱动的功能测试报告(持续更新)
  • k8s中ingress-nginx介绍
  • Spring Boot 中的重试机制
  • 【Python】Python类型标注革命:Annotated类型深度解析与实战