Home
Categories
WIKI
Topic
User
LANGUAGE:
中文
English
比猴子排序还无聊的算法
deepin Talks
5910
views ·
4
replies ·
To
floor
Go
xliang9550
deepin
2015-08-07 09:58
Author
某本著名编程教材(笑话书)上的经典案例:二分法检索链表。
算法设计思路:
1,对链表中的结点进行排序;
2,顺序遍历链表,求出结点数量;
3,根据上一步求出的结点数量,顺序遍历链表前半,取出位于链表中点的结点中的数据成员;
4,比较中点结点中的数据成员和欲查找的数据项的大小关系,舍弃当前链表的前半或后半;
5,递归迭代2~4步,直到找到匹配的结点或者子链表只剩1个结点并且与欲查找数据项不符。
Reply
Like 0
Favorite
View the author
All Replies
BingoLove
deepin
2015-08-07 20:36
#1
是不是有这个功夫,遍历都完了
Reply
Like 0
View the author
xliang9550
deepin
2015-08-08 00:24
#2
本帖最后由 xliang9550 于 2015-8-7 22:27 编辑
初步统计一下,假设链表中有N个结点,并且在创建链表的时候已对各个结点进行单调性排序。
如果按顺序遍历,最好结果是1次,最坏结果是N次。
如果按照二分法查找,最好结果是3N/2 + 1次(N为偶数)或者3(N + 1)/2次(N为奇数),这已经比顺序遍历的最坏结果增加了50%的工作量。
最差情况应该是3N次查找,相当于在顺序遍历最坏情况基础上多做了两倍的无用功,用于切分链表。
总的来说,二分法查找链表的工作量是顺序遍历的3倍以上。
PS,即使是猴子排序法,还可以用于伪随机序列规律分析以及测试乱序算法的效率,有其存在的意义。参见wikipedia词条bogosort。
Reply
Like 0
View the author
SnDream
deepin
2015-08-08 06:45
#3
好像是“著名”C语言书的所谓“伴侣”上面的做法,而不是“著名”书上的。
Reply
Like 0
View the author
xliang9550
deepin
2015-08-08 07:02
#4
《C程序设计伴侣》也不失为一本著名的笑话书了。所以我觉得“著名”二字并无不妥。
Reply
Like 0
View the author
Please
sign
in first
New Thread
Popular Events
More
算法设计思路:
1,对链表中的结点进行排序;
2,顺序遍历链表,求出结点数量;
3,根据上一步求出的结点数量,顺序遍历链表前半,取出位于链表中点的结点中的数据成员;
4,比较中点结点中的数据成员和欲查找的数据项的大小关系,舍弃当前链表的前半或后半;
5,递归迭代2~4步,直到找到匹配的结点或者子链表只剩1个结点并且与欲查找数据项不符。