我试图解决这个问题一个小时,但是找不到任何办法。 问题如下:
已排序列表,长度 N 。列表中可能存在重复项。
给定元素x
,您需要在列表中找到x
的最新索引。
如果x
不存在,请返回相关消息。
注意:模型是CREW(并发读取独占写入) - 意味着允许并发读取,但写入是独占意味着并发写入不允许。
1)描述使用 N CPU的并行算法,并在固定的时间内解决问题(我猜他们的意思是O(1))。
2)解释为什么所描述的算法是正确的。
答案 0 :(得分:2)
我假设输入是长度为A[]
的0索引,排序(增加)数组N
。
使用值UNSET
初始化共享结果变量:
RESULT := "UNSET"
启动N
具有以下程序的CPU,由i
参数化(从0
到N-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都执行固定的工作量,因此程序会在固定的时间内终止。