执行排序操作时数据分布配置文件的确定性

时间:2014-10-24 17:59:47

标签: arrays algorithm sorting probability

让我们假设我们有一些数据结构,如n个条目的数组,并且为了参数,我们假设数据具有有界数值。

有没有办法确定数据的轮廓,比如单调上升,下降等到合理的程度,也许是z的确定性值检查了数据结构中的k个条目?

2 个答案:

答案 0 :(得分:0)

假设我们有一个大小为N的数组,这意味着我们在数组中的每个相邻元素之间进行N-1次比较。设M = N-1。 M代表关系的数量。数组不正确顺序的概率是

1/M

如果您选择K关系的子集来确定单调上升或下降,理论上的确定概率是

K / M

由于这些是两个线性方程式,很容易看出,如果你想成为.9肯定,那么你需要检查大约90%的条目。

这只考虑了你问题中的假设。如果您能够了解概率分布,那么使用统计数据,您可以随机检查一小部分数组。

如果你只关心数组的相对顺序(例如,在[0,10]之间的间隔,大多数1s将接近开头。),这是另一个问题。执行此操作而不仅仅是排序的算法必须具有交换元素的高成本和用于比较的便宜成本。否则,编写一个复杂的算法来处理检查就不会有绩效回报。

重要的是要注意这在理论上讲。我假设数组中没有分布。

答案 1 :(得分:0)

更容易的问题是检查从随机数据中遇到这种有序行为的概率。

EG。如果数字是随机排列的,则p = 0.5表示第一个数字低于第二个数字(我们将在稍后重复这种情况)。现在,如果您对k对进行采样,并且在每种情况下第一个数字都低于第二个数字,则观察它的概率为2 ^( - k)。

回到重复,跟踪观察到的重复并将其考虑在内。例如。如果重复的概率为q,则不观察重复的概率为(1-q),观察增加或相等的概率为q +(1-q)/ 2,因此用k取幂以获得概率。