【发布时间】:2017-04-15 17:51:47
【问题描述】:
我试图解决这个问题一个小时,但找不到任何方法。 问题如下:
排序列表,长度N。列表中可能有重复项。
给定一个元素x,你需要在列表中找到x的最新索引。
如果x 不存在,则返回相关消息。
注意:模型是CREW(Concurrent Read Exclusive Write)——表示允许并发读,但是write is Exclusive表示不允许并发写。
1) 描述一个使用 N 个 CPU 并在固定时间内解决问题的并行算法(我猜它们的意思是 O(1))。
2) 解释为什么描述的算法是正确的。
【问题讨论】:
-
我不认为这是可能的,因为与访问第 i 个元素的数组不同,对于列表来说访问第 i 个元素是 O(1),它是 O(n)。
-
如果你有一个数组,那么每个进程都会从数组中读取其对应的值,如果它是 x,那么如果你的 id 高于当前值(compareAndSet),则更新一个原子变量。您可以将该值初始化为 -1,这样您就可以知道在所有进程完成后是否找到了 x。
-
但我不知道这是否是一个解决方案,因为如果列表中的每个值都是 x 那么你有 n 个进程在等待彼此更新原子变量,所以我仍然会调用它 O(n)。
-
@maraca,忘了提到模型是 CREW(并发读取 - 独占写入),所以我无法更新原子变量。
-
更新原子变量是同步操作,没有并发写入
标签: algorithm parallel-processing