【发布时间】:2012-04-11 17:58:22
【问题描述】:
对于数组 [4,3,5,1,2], 我们称前缀为 4 的为 NULL,无前缀的 4 为 0; 3 的前缀是 [4],3 的无前缀是 0,因为前缀中没有一个小于 3; 5 的前缀是 [4,3],5 的无前缀是 2,因为 4 和 3 都小于 5; 1 的前缀是 [4,3,5],1 的无前缀是 0,因为前缀中没有一个小于 1; 2 的前缀是 [4,3,5,1],无前缀的 2 是 1,因为只有 1 小于 2
所以对于数组 [4, 3, 5, 1, 2],我们得到 [0,0, 2,0,1] 的无前缀数组, 我们可以通过 O(n) 算法来获得无前缀数组吗?
【问题讨论】:
-
我问这个是因为我想获得一个 O(n) 来计算给定数组的反转,即使这个数组是在流中出现的。
-
可能不会。看起来拥有一个无前缀数组使我们能够在 O(n) 时间内对原始数组进行排序。
-
@n.m.:我们如何使用无前缀数组在线性时间内对原始文件进行排序?我看到使用无前缀数组进行排序的方法是将每个元素插入位置 p[i],但不清楚如何在线性时间内完成。
-
@Nabb:我不确定它是否可以在 O(n) 中完成,但它肯定可以在不比较元素的情况下完成。排序是 O(nlog(n)) *comparisons.
-
@n.m. - 这个论点很有希望但很棘手,因为它假设 1) 元素来自无限域,以及 2) 我们拥有的唯一原始操作是常量分支(例如一个元素与另一个元素进行比较,如果我们不允许重复,如果我们这样做的话可能是 3 分支),这一次只给你 1 位信息)。让我们排除 bin 排序,然后理想情况下你应该把它写下来作为答案。
标签: arrays algorithm integer prefix