在包含Doubles
的集合(为简单起见,称为列表)的数据结构上考虑此顺序过程。只要我愿意,请执行:
目标是最终实现收敛,因此“解决方案”在迭代次数上是线性的。可以在SO问题here中看到此过程的实现,这是一个直观的可视化:
似乎可以更好地执行此过程 - 也就是说,通过使用多个工作程序在不同的OS线程上并发执行,可以更快地实现收敛,例如:
我想一个完美实现的应该能够在 O(n / P)时间内实现解决方案,对于 P 可用的计算资源数量
阅读Haskell并发性让我的头脑旋转了MVar
,TVar
,TChan
,acid-state
等术语。似乎很清楚的是并发实现这个程序看起来与the one I linked above非常不同。但是,程序本身似乎基本上是一个非常温和的算法,基本上是一个内存数据库,这是一个我以前确定有人遇到过的问题。
我猜我将不得不使用某种支持相当随机访问的可变并发数据结构(即随机空闲元素)&修改。当我试图将所有可能需要的东西拼凑在一起以提高性能时(例如,STM看起来很可疑),我有点迷失。
如果目标是对顺序实现的性能提升,那么哪种数据结构,并发性概念等适用于此类任务?