【问题标题】:How do I both shuffle AND split a big list into smaller ones, trying to maximize speed?我如何将一个大列表拆分为较小的列表,以最大限度地提高速度?
【发布时间】:2015-09-30 11:00:02
【问题描述】:

我有一个包含大约 100M+ 个元素(当前已排序)的列表,我想将这些元素随机化(随机播放)和分块/拆分成更小的列表(大约 50K 桶)。就最大化速度而言,最好的方法是什么?

如果它们具有快速的预构建方法,我对任何库或语言(目前在项目中使用 node 和 python)持开放态度。谢谢!

附:这不仅仅是一个理论练习,我正在尝试在我的实习中解决这个问题,因为我们将使用大约 50K 的 Digital Ocean 节点并行运行另一个脚本,该节点将较小的列表作为输入。

【问题讨论】:

  • 您是否自己开发了一种方法并对其进行了测试,但发现它对于您的目的来说太慢了?
  • 只打乱整数元素索引列表比列表本身更快。将它分成更小的列表(即创建索引范围列表)可能也是如此。两者都可以使用内置函数来完成。
  • 我们在这里不建议最好的方法。您发布您的方法,我们会努力使其变得更好。

标签: python node.js split shuffle chunking


【解决方案1】:

在 C 或 C++ 中执行此操作以获得最大速度。

在您的数组 记录中使用“现代”Fisher-Yates shuffle。使用快速随机,也许是在 stack overflow 上找到的。

然后,返回数组中元素在bucksize(=50000)偏移处的地址,例如&array[0], &array[50000], &array[100000]...

【讨论】:

    猜你喜欢
    • 2012-07-12
    • 2018-09-22
    • 2020-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-07
    • 2019-06-08
    • 1970-01-01
    相关资源
    最近更新 更多