博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
算法导论: 第9章
阅读量:6929 次
发布时间:2019-06-27

本文共 1162 字,大约阅读时间需要 3 分钟。

9.1-1 同时找出最小值和次小值

比较过程同足球比赛淘汰赛阶段一样,两两比较,构成一个比较树。次小值只会出现在哪些跟最小值比较过的元素中,这些元素总共有的数目跟树高一样,为[lgn]。

所以,总共花费(n-1) + ([lgn]-1)

9.3-6 k分位数

先找第(k-1)/2个分位数,然后将数组分成两部分,在前一部分找(k-1)/2前的那些中位数,在后一部分找(k-1)/2后的那些中位数,则有T(k) = 2*T(k/2) + O(n)。每一层的代价均为O(n),总共有lgk层。即为O(nlgk)

9.3-7 最接近中位数的k个数

step1:求出数组S的中位数的值:O(n)

step2:计算数组每个数与中位数差的绝对值,存于另一个数组B中:O(n)

step3:求出数组B中第k小的数ret:O(n)

step4:计算数组S中与ret差的绝对值小于ret的数并输出:O(n)

9.3-8 两个排序数组的中位数

(1)找个数组X、Y的中位数x1,y1:O(1)

(2)如果它们相等,这就是要找的中位数。

(3)如果x1 < y1,则递归,在X中比x1大的b部分和Y中比y1小的c部分中找。

(4)如果x1 > y1,则递归,在X中比x1小的a部分和Y中比y1大的d部分中找。

X:[a部分]x1[b部分]

Y:[c部分]y1[d部分]

9-2 带权中位数

b) 使用最坏情况时间为O(nlgn)的排序算法对每个元素进行排序

然后,依次累加元素的权重,直到满足题目中公式。

c)step1:利用SELECT中寻找中位数的算法,找到中位数

step2:用中位数把数组分为三段,即A[1..q-1] < A[q] < A[q+1..r]

step3:计算A[1..q-1]和A[q+1..r]的权值和,看是否满足题目中的公式。

step4:若满足,A[q]就是所求的数。

step5:若不满足,就递归使用本算法进行查找。哪一半的权值和比0.5大,就在哪一半中找。

e)记f(x,y) = Sum{wi*(|x-xi| + |y-yi|)},即要最小化f(x,y)。

由于f(x,y) = Sum{wi*(|x-xi| + |y-yi|)}

              = Sum{wi*|x-xi|} + Sum{wi*|y-yi|}

              = g(x) + h(y)

所以有min{f(x,y)} = minx,y{g(x) + h(y)} = minx{miny{g(x) + h(y)}} = minx{g(x) + miny{h(y)}} = minx{g(x)} + miny{h(y)}

即分别解决两个一维带权中位数问题即可。

转载于:https://www.cnblogs.com/rolling-stone/p/3655327.html

你可能感兴趣的文章
(转)在SDL工程中让SDL_ttf渲染汉字
查看>>
Dp_F Pku1157
查看>>
解析大型.NET ERP系统 灵活复杂的界面控件Infragistics WinForms
查看>>
创建成功的Python项目
查看>>
servlet第2讲(上集)
查看>>
NOIP 2012 解决问题的方法
查看>>
apache virtualhost配置 apache配置多个网站
查看>>
Windows下LATEX排版论文攻略—CTeX、JabRef使用介绍
查看>>
DICOM:DICOM3.0网络通信协议
查看>>
spring-framework-3.2.4与hibernate-release-4.3.5下使用HibernateDaoSupport抛出异常
查看>>
将MapReduce的结果输出至Mysql数据库
查看>>
ASP.NET MVC 5 局部视图不支持异步问题
查看>>
CentOS7使用firewalld打开关闭防火墙与端口(转载)
查看>>
PHP判断客户端是PC web端还是移动手机端方法
查看>>
【Tomcat】JVM,Tomcat,Servlet,Tomcat中的应用。彻底弄懂这些概念之间的联系
查看>>
Safari 3D transform变换z-index层级渲染异常的研究
查看>>
《jquery实战》javascript 必知必会(1)
查看>>
Wavenet运行
查看>>
sqlserver怎么将excel表的数据导入到数据库中
查看>>
全栈开发者都应该关注这些(转载)
查看>>