在固定的时间内找到元素的索引O(1)

时间:2017-04-15 17:51:48

标签: algorithm parallel-processing

我试图解决这个问题一个小时,但是找不到任何办法。 问题如下:

已排序列表,长度 N 。列表中可能存在重复项。 给定元素x,您需要在列表中找到x的最新索引。 如果x不存在,请返回相关消息。

注意:模型是CREW(并发读取独占写入) - 意味着允许并发读取,但写入是独占意味着并发写入允许。

1)描述使用 N CPU的并行算法,并在固定的时间内解决问题(我猜他们的意思是O(1))。

2)解释为什么所描述的算法是正确的。

1 个答案:

答案 0 :(得分:2)

我假设输入是长度为A[]的0索引,排序(增加)数组N

使用值UNSET初始化共享结果变量:

RESULT := "UNSET"

启动N具有以下程序的CPU,由i参数化(从0N-1):

CPU(i):
if i==0 and A[0] > x {
    RESULT = "NO SOLUTION"
} else if A[i] == x and (i + 1 == N or A[i+1] > x) {
    RESULT = i
} else if A[i] < x and (i + 1 == N or A[i+1] > x) {
    RESULT = "NO SOLUTION"
}

RESULT更新时,程序已终止。

请注意,只有一个CPU写入RESULT(因为输入已排序),因此永远不会进行并发写入,但除了第一个之外的每个阵列位置都由两个CPU读取。每个CPU都执行固定的工作量,因此程序会在固定的时间内终止。