社区
数据结构与算法
帖子详情
求证,将五个随机数进行排序,至少需要七次比较!
friendliu
2003-12-07 09:50:19
求证,将随机数五个数进行排序,至少需要七次比较!
哪位高手会呀。。。
...全文
2857
19
打赏
收藏
求证,将五个随机数进行排序,至少需要七次比较!
求证,将随机数五个数进行排序,至少需要七次比较! 哪位高手会呀。。。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
19 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
PuzzleFan
2003-12-11
打赏
举报
回复
To liuhuimingming91(lam)
应该是 7次
例如a1,a2,a3,a4,a5;
先排(a1,a2);(a3,a4);这样就比较了2次;//'()'表示其内部元素为有序
然后用Max(a3,a4)分别和a1,a2,比较 这样就有 了有序的(a1,a2,a3,a4),这样有又比较了2次
总共4次 然后用a5逐个的跟(a1,a2,a3,a4)中的三个比较就可以得出有序的(a1,a2,a3,a4,a5)
如果Max(a3,a4)>a1,Max(a3,a4)>a2, you cannot make sure (a1,a2,a3,a4),
a1=1 a2=2 a3=3 a4=4,Max(a3,a4)>a1,Max(a3,a4)>a2, (a1,a2,a3,a4)?
a1=1 a2=2 a3=0 a4=4,Max(a3,a4)>a1,Max(a3,a4)>a2, (a3,a1,a2,a4)?
Autom
2003-12-11
打赏
举报
回复
一个有用的结论是对n个数使用基于比较的排序算法,至少需要ceiling(lg(n!))次比较,那么五个数至少需要ceiling(lg(5!))=7次比较。只需证明7次比较可以排序就行了。
如下5个随机的数据:
o o o o o
两次比较后:(对于有边相连的点,上面的大于下面的,右面的大于左面的)
* *
| |
# # o
比较两个*:
*---*
| |
# # o
再用两次比较,将o插入由两个*和左边的#组成的链中,有四种情况:
*---* *---* *---o---* *---*---o
| | | | | | | |
# $ o $ # $ # $
| |
o #
无论哪种情况,我们都可以通过两次比较(注意,我们将原来右边的#换成了$)将$插入到其它四个数中。
所以,7次比较足够了。
boodweb
2003-12-10
打赏
举报
回复
2
将n个数的排序过程看作是在一棵2叉树上寻路(因为每次比较只有2个可能结果),而各种排序结果就是树的叶子,显然有n!个叶子,于是树高至少为h=upper_bound(log2(n!)),于是:
n个数排序至少要upper_bound(log2(n!))次比较
对于n=5,log2(5!)=6.9,即至少7次
liuhuimingming91
2003-12-10
打赏
举报
回复
应该是 7次
例如a1,a2,a3,a4,a5;
先排(a1,a2);(a3,a4);这样就比较了2次;//'()'表示其内部元素为有序
然后用Max(a3,a4)分别和a1,a2,比较 这样就有 了有序的(a1,a2,a3,a4),这样有又比较了2次
总共4次 然后用a5逐个的跟(a1,a2,a3,a4)中的三个比较就可以得出有序的(a1,a2,a3,a4,a5)
BlueSky2008
2003-12-09
打赏
举报
回复
那就是用对手论证法。
IT_worker
2003-12-09
打赏
举报
回复
从前面2,3,4,5几个数来看f(n)似乎满足
log2(n!)<f(n)<log2(n!)+1
但如此精确的界证明起来恐怕非常难,所以上面给出一个稍微宽松的界。
IT_worker
2003-12-09
打赏
举报
回复
定义f(n)为决定n个数的序所需要的最少比较次数,那么本人猜想:
log2(n!) < f(n) < log2(n!)+log2(n)
这里log2(x)表示x对2的对数。
willbin
2003-12-09
打赏
举报
回复
最多的比较次数是4+3+2+1=10次.
willbin
2003-12-09
打赏
举报
回复
求证,将随机数五个数进行排序,至少需要七次比较!
哪位高手会呀。。。
"至少需要"的意思不是说在最佳情况下的比较次数吗?!
短歌如风
2003-12-09
打赏
举报
回复
>...若选一数(c)与其他四数比较,恰有两个(a,b)比它大,有两个(d,f)比它小,...
若“恰好”这个数比其它数都小呢?
主要是楼主描述的不是很清楚,应该是对5个数的随机序列排序,最差情况下的比较次数最少是7次。就是说你编写一个排序算法对长度为5的序列排序,要达到无论序列处于哪一种排列,比较次数不超过N,则N>=7。否则单纯论“最少比较次数”,那4次就够了。
willbin
2003-12-09
打赏
举报
回复
用六次也可以呀!(七次不是最少的.)
例如:a,b,c,d,e五个数,若选一数(c)与其他四数比较,恰有两个(a,b)比它大,有两个(d,f)比它小,此次比较有四次.现分别比较(a,b)和(d,f),(假如a>b,d>f),则须比较两次.
可知大小顺序为a>b>c>d>e.共比较4+2=6次!
短歌如风
2003-12-08
打赏
举报
回复
例证法只能证明“可以”用7次比较完成,不能证明“至少”。
5个元素的全排列为5!=120,每次比较都可以把这些排列均分为二,则6次比较可以把排列分为2^6= 64组。因此必然至少有两个不同排列分在同一组,而这两个排列顺序不同,无法用同一交换序列完成排序。因此,无法用小于7次的比较次数完成排序。
PuzzleFan
2003-12-08
打赏
举报
回复
楼上第二步(再取另外两个数比较)有问题,此处还遗漏一种情况:
取第三数与刚参与比较的两数比较。
因此只证明这种方式>>>可以<<<通过7次比较排序,不是>>>所有<<可能方式。
levinjoe
2003-12-08
打赏
举报
回复
发信人: starfish (好好学习,天天向上), 信区: Algorithm
标 题: Re: 一个弱弱的问题,请高手指教
发信站: 南京大学小百合站 (Sun Sep 21 20:12:39 2003)
5个数通过7次比较排序的方法如下。
5个数之间的大小关系构成的一个树形图T。T中的一个结点代表一个数,而一条边代表它所
关联的两个数的大小关系,T的根就是中位数。显然T中的一条边要由一次比赛来确定。在
下
面的图中,如果x大于y,则节点x在节点y的上方且x和y有一条边相连。另外,*表示一般的
数,o表示下一次即将进行比较的两个数。
第1步,先任取两个数比较,结果为:
*
|
* o o *
第2步,再取另外两个数比较,结果为:
o o
| |
* * *
第3步,按照上图比较其中两个标记为o的数,比较结果只有一种情况:
*
/ \
o *
|
* o
第4步,按照上图比较其中两个标记为o的数,比较结果有两种情况:
o o *
\ / \ / \
* * * *
| / \
* o o
第5步,按照上图比较其中两个标记为o的数,比较结果有两种情况:
* *
| / \
* * o
/ \ |
o o o
| |
* *
第6步,按照上图比较其中两个标记为o的数,比较结果有三种情况:
* * *
| | / \
* * o o
| | \ /
* * *
| / \ |
* o o *
|
*
其中第一种情况已经排好序了
第7步,按照上图比较其中两个标记为o的数,比较结果只有一种情况:
*
|
*
|
*
|
*
|
*
所以只需要7步比较就可以把5个数排好序
--
※ 来源:.南京大学小百合站 http://bbs.nju.edu.cn/[FROM: 220.114.110.215]
gushaoping
2003-12-08
打赏
举报
回复
TAOCP是本什么书
friendliu
2003-12-07
打赏
举报
回复
哥们,看不懂,解释一下吧。。大侠。。。
HUNTON
2003-12-07
打赏
举报
回复
7次比较把5个字母按顺序排列
void Compare(int A, int B, int C, int D, int E)
{
if(A<B)
swap(A, B);
// --> A>B
if(C<D)
swap(C, D);
// --> (A>B) && (C>D)
if(A<C){
swap(A, C);
swap(B, D);
}
// (A>B) && (C>D) && (A>C) --> A>B && A>C>D
if(E>C){ // A>B && A>C>D && E>C
if(A>E){ // --> A>B && A>E>C>D
if(B>C){ // --> A>B>C && A>E>C>D
if(B>E) // --> A>B>E>C>D
printf("%d>%d>%d>%d>%d", A,B,E,C,D);
else // --> A>E>B>C>D
printf("%d>%d>%d>%d>%d", A,E,B,C,D);
}else{ // (A>B && A>E>C>D) && B<C --> A>E>C>D && C>B
if(B>D) // --> A>E>C>B>D
printf("%d>%d>%d>%d>%d", A,E,C,B,D);
else // --> A>E>C>D>B
printf("%d>%d>%d>%d>%d", A,E,C,D,B);
}
}else{ // (A>B && A>C>D && E>C) && A<E --> E>A>C>D && A>B
if(B>C){ // --> E>A>B>C>D
printf("%d>%d>%d>%d>%d", E,A,B,C,D);
}else{ // (E>A>C>D && A>B) && B<C --> E>A>C>D && C>B
if(B>D)// --> E>A>C>B>D
printf("%d>%d>%d>%d>%d", E,A,C,B,D);
else // --> E>A>C>D>B
printf("%d>%d>%d>%d>%d", E,A,C,D,B);
}
}
}else{// (A>B && A>C>D) && E<C --> A>B && A>C>D && C>E
if(E>D){// --> A>B && A>C>E>D
if(B>E){ // --> A>B>E && A>C>E>D
if(B>C)// --> A>B>C>E>D
printf("%d>%d>%d>%d>%d", A,B,C,E,D);
else// --> A>C>B>E>D
printf("%d>%d>%d>%d>%d", A,C,B,E,D);
}else{ // (A>B && A>C>E>D) && B<E --> A>C>E>D && E>B
if(B>D) // --> A>C>E>B>D
printf("%d>%d>%d>%d>%d", A,C,E,B,D);
else // --> A>C>E>D>B
printf("%d>%d>%d>%d>%d", A,C,E,D,B);
}
}else{ // (A>B && A>C>D && C>E) && E<D --> A>B && A>C>D>E
if(B>D){ // --> A>B>D && A>C>D>E
if(B>C) // --> A>B>C>D>E
printf("%d>%d>%d>%d>%d", A,B,C,D,E);
else // --> A>C>B>D>E
printf("%d>%d>%d>%d>%d", A,C,B,D,E);
}else{ // (A>B && A>C>D>E) && B<D --> A>C>D>E && D>B
if(B>E) // --> A>C>D>B>E
printf("%d>%d>%d>%d>%d", A,C,D,B,E);
else // --> A>C>D>E>B
printf("%d>%d>%d>%d>%d", A,C,D,E,B);
}
}
}
}
saint001
2003-12-07
打赏
举报
回复
搜索
http://search.csdn.net/expert/topic/6/603/2002/11/27/1210587.htm
BlueSky2008
2003-12-07
打赏
举报
回复
TAOCP 上讲到的。最少比较排序。
CRC与ADC与DMA与
随机数
发生器-第5季第5部分
《朱有鹏老师单片机完全学习系列课程》针对有志于物联网技术开发行业的零基础学员设计,共分6季,总200余小时的课程。本课程属于第5季。本季课程主要讲解STM32的全新开发方式:使用STM32CubeMX工具做图形化配置,自动生成初始化代码;添加各种中间件;使用HAL库和LL库来操作外设。结合朱老师物联网大讲堂专为nbiot物联网开发而设计的NB476开发板,本季课程能够让大家彻底掌握物联网时代以nbiot和低功耗STM32L4单片机为代表的典型开发模式,实战意义非常重要。课程特色*完全零基础,降低学习门槛。*深入浅出,通俗易懂。不怕学不会,就怕你不学习。*思路清晰、语言风趣,对着视频看也不会想睡觉······*视频 + 文档 + 练习题 + 答疑,全方位保证学习质量。*基础知识 + 思路引导的教学方式,授之以鱼更授之以渔。
将5个数的序列排序,不论原先的顺序如何,求
至少
要通过几次
比较
才能完成排序
随机排序的
五个
数,最少要通过多少次
比较
才能完成排序工作。利用图表,帮助读者理解相关思想。
5个数7次
比较
排序
问题内容:
五个
数
七次
比较
排序原讨论链接:http://community.csdn.net/expert/topicview1.asp?id=2537867所属论坛:数据结构与算法 审核组:其他提问者:friendliu 解决者:zlf_jack感谢:HUNTON、zlf_jack、plainsong、IT_w
遗传算法小结
这两天在本部做项目,到现在脑子还是一头雾水,不知如何进入。 开会后,分配了“遗传算法”,好歹也是咱数据挖掘的兄弟,那本书来研究研究。 学到了点小小小小的意思,放到这,千万别忘了。 遗传算法(Genetic Algorithm,简称GA),起源于对生物系统所进行的计算机模拟研究,是一种借鉴生物界自然选择和自然遗传机制的随机搜索方法。由美国(怎么
我在CSDN参与的3000个帖子
今日偶然翻到,感慨万千 1:申述:版主,是否扣了我的专家分? 2:100分急求,随机输出十个小写字母,但是,要求这十个字母不相同 3:求Sn=a+aa+aaa+…+aaa…a(n个a)之值 4:数组题 望高手帮忙! 5:呵呵,来推荐一下我的网站,本站提供大量当今流行的免费的音乐和免费电影,常用软件、游戏、精美图库下载,希望对网友有帮助!顺便散分! 6:VBA请教怎
数据结构与算法
33,008
社区成员
35,326
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章