algorithm - 有哪些算法/优化用于计算数组中元素的条件子集?

标签 algorithm optimization data-structures c++builder

我的程序经常处理大量数据,它的一个特定组件会根据条件创建该数据的一个子集。您可以将其视为具有字符串,

10457038005502

问题是返回前五个(比方说)非0元素,即返回:

14573

实际上,这个字符串的每个元素都是一个包含大量数据的大型数据结构,整个数据集通常有几千兆字节大小,包含数万个元素,到弄清楚是否应该包含该元素(不是“0”)每个元素都需要处理。我用上面的措辞来试图清楚地解释它,并试图将重点放在算法或技术上,而不是我们的具体实现和数据。

  • 编辑:感谢到目前为止回复的人。所有建议 围绕多线程,其中 我同意这是一个好方法(我们确实 有一个线程任务框架 会适合。)我希望 问题本身可以被视为 一个算法问题 - 我怀疑, 虽然我不知道,这是一个 适用于的一般问题 搜索各种数据。 有鉴于此,一个很棒的回复会 是“施瓦辛格等人提出的 1995 年的算法 X,谷歌 这个学期。”

我们目前的方法是从输入数据集中已知的第一个点开始,沿着数组进行单线程线性搜索,计算是否需要保留某个元素,并在进行过程中构建结果。通常请求的数据子集不在开头 - 使用字符串示例,您可能需要知道元素 8-15(如果存在 15,您可能直到到达输入数据末尾才知道。 ) 当然,我们不知道输入数据集中输出数据集的第 8 个元素是什么,直到我们从一开始就处理了那么远。

我们还应该如何解决这个问题?

我正在寻求有关解决此类问题的任何完全不同的方法或算法的意见。

  • 还有什么其他方法可以解决这个问题,即快速获取任意子集?

  • 知道当前的解决方案受计算限制,因为每个元素的处理量很大,或者更确切地说,因为它需要生成每个元素才能检查它是否为“0”,什么算法或者您可能会建议解决问题的方法?有什么办法可以最大限度地减少程序所做的工作?

如果它影响特定的库或工具,我们正在使用 C++(非托管;我们使用 Embarcadero C++ Builder 2010 。)例如,我们不能使用 LINQ,如果没有使用它,我认为它可能是一个有用的工具/此类问题的语言功能。但是,我们当然可以实现您通常可以在其他环境中以较少工作量实现的任何算法解决方案。

最佳答案

假设每个计算都可以独立于其他计算(即,一个项目的结果不依赖于前一个项目的结果)显然第一步是使用多线程并行执行计算。

关于algorithm - 有哪些算法/优化用于计算数组中元素的条件子集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3748188/

相关文章:

c++ - 存储各种尺寸也各不相同的结构的好方法?

algorithm - 如何在不使用对偶概念的情况下,在 O(log n) 时间内从一组点中找到距给定查询线最近的点?

vb.net - 生成大于固定长度的字符串

php - MySQL 选择行值作为键=>值

python - 如何在元组中复制元素 n 次

具有可变默认值的 Scala Map 始终指向同一个对象

algorithm - 概率散列——有这样的东西吗?

algorithm - 找到一个最佳的 n 正方形大小(每个都相同)以适合矩形容器的大部分

ruby-on-rails - 在 Rails/PostGreSQL 中对大表进行分析

python - Scipy.optimize 最小化花费的时间太长