Matlab:从“缓慢变化”索引集中随机选择

时间:2016-12-04 17:17:10

标签: matlab data-structures

我想找到或实现一个Matlab数据结构,它允许我有效地完成以下三件事:

  • 随机均匀检索元素。
  • 添加新元素。
  • 删除元素。 (如果有帮助,这个元素只是从结构中“检索出来”,所以我可以使用它的位置和它的值来删除它。)

由于我不需要重复,这个结构在数学上等同于一个集合。此外,我的元素总是在1到2500范围内的整数;该集合在整个范围内并不罕见。

这样的数据结构是什么?我曾想过使用像containers.Map或java.util.HashSet这样的东西,但我不知道如何在这种情况下满足第一个要求,因为我不知道如何有效地检索这样的第n个密钥结构体。普通阵列当然可以达到第一个要求,但由于调整效率低下,它对于第二和第三个要求是一个不好的选择。

对于我为什么要这样做的一些上下文,在一些当前的代码中,我花了大约1/4的运行时间:

find(x>0,Inf)

然后从该向量中随机检索一个元素。然而,这个向量在我的程序的每次迭代中都以非常可预测的方式变化很小。所以我更喜欢随身携带一个数据结构并在我去的时候更新它,而不是每次都重新计算它。

如果您熟悉Haskell,实现我希望支持的操作的一种方法是

randomSelect set = fmap (\n -> elemAt n set) $ randomRIO (0,size set-1)

以及来自Data.Setinsertdelete。但是我有其他理由不在这个项目中使用Haskell,我不知道如何实现Data.Set的后端。

0 个答案:

没有答案