"几乎已排序"问题——Is this (almost) sorted?
来源:互联网 发布:linux ip限制 编辑:程序博客网 时间:2024/06/04 08:25
根据提示,通过构造一个具备以下两个性质的反例来说明斯内普教授的算法并不正确:
1)A不是90%已排序的
2)斯内普教授的算法以2/3的概率返回false当且仅当k=Ω(n)
特别地,我们考虑如下反例:A=[n/2+1, . . . , n, 1, 2, 3, . .. , n/2].
上面的列表A中,只有 n 和 1 两个元素会导致该算法返回false.
1)首先,很明显的是,如果列表A是已排序的,那么斯内普教授的算法总会返回true.
我们为列表中每一个元素贴上一个“good”或“bad”的标签,表示它通过“二分查找”的返回的下标是否和它经正确排序后的下标一致:
要判断哪些元素是“good”或“bad”并不是那么直观,有些元素可能是已排序正确的,但也有可能因为其它元素的乱序导致最终它们也是乱序的,类似的,有些元素可能完全就是乱序,但也有可能是阴差阳错地刚好处于某个正确的位置。关键点是一个糟糕的排序结果会导致很多“bad”元素。
2)如果列表A不是90%已排序的,那么至少有10%的“bad”元素。
反证法:假设“bad”元素不超过10%,那么至少有90%的元素是“good”,回想一下一个列表90%已排序的定义:如果去除掉那些排序结果不明确的10%元素,那么我们认为,余下的元素都是已排序正确的。考虑余下的“good”元素中任意两个元素,key1和key2,key1的坐标为 i,key2的坐标为 j.如果i<j,根据(c)可知,kwy1<key2,也就是说这两个元素是排序正确的。既然任意两个元素都是排序正确的,那么数组中所有的“good”元素是排序正确的,即列表A是90%已排序的,与已知矛盾,故假设不正确,因此命题得证。
3)如果列表不是90%已排序的,那么算法至少以2/3的概率返回false。
证明:根据上述(2)知道,至少有10%的元素是“bad”元素,从(b)又知,如果选择 k>lg(1/3)/lg 0.9,那么找到一个“bad”元素的概率至少为2/3,因此,得出结论:如果列表不是90%已排序的,那么算法至少以2/3的概率返回false。
- "几乎已排序"问题——Is this (almost) sorted?
- HDU 5532 Almost Sorted Array——LIS
- HDU-5532Almost Sorted Array LIS问题
- HDU5532-Almost Sorted Array
- HDU5532 Almost Sorted Array
- Almost Sorted Array HDU
- ytu2887——机器人排序问题(已解决)
- hdu 5532 Almost Sorted Array
- HDU 5532 Almost Sorted Array
- HDU 5532 Almost Sorted Array
- hdoj 5532 Almost Sorted Array
- 【HDU】 5532 Almost Sorted Array
- HDU 5532 Almost Sorted Array
- hdu5532 Almost Sorted Array(LIS)
- hdoj 5532 Almost Sorted Array
- HDU 5532:Almost Sorted Array
- leetcode(83)—— 删除已排序链表重复元素(Remove Duplicates from Sorted List)
- Leetcode刷题记—— Remove Duplicates from Sorted Array II(已排序数组移除重复元素2)
- android中ListView控件&&onItemClick点击事件
- 1.17 一周遇到的问题
- Linux网络编程一步一步学-UDP方式点对点通讯
- 如何安装ROS
- 站站排(重温儿时的游戏) http://acm.sdut.edu.cn/sdutoj/showproblem.php?pid=1573&cid=1211
- "几乎已排序"问题——Is this (almost) sorted?
- 基于visual Studio2013解决算法导论之046广度优先搜索
- NYOJ 264 国王的魔镜
- cc2531+cc2591的zstack协议栈修改
- 如果说相遇是一种错
- Android解析短信信息
- 车牌检测(定位)
- int 和 String 互相转换的多种方法
- 100 Ideas