【问题标题】:What kind of algorithms are used to break down data? [closed]使用什么样的算法来分解数据? [关闭]
【发布时间】:2011-11-24 21:10:46
【问题描述】:

我有一个包含大量数据的表,需要对每个表进行查找并分解每个数据。这是一个简化的数字示例。我有这张桌子:

1 [1]
2 [1, 1]
4 [2, 2]

现在我想分解 4。我抬头看到 2+2=4。所以然后我查找 2,看看是否分解为 1+1,所以我知道 2+1+1=4 和 1+1+1+1=4。对于这个问题,我应该把它(使用计算表)分解成 4 个结果(提到的 3 和 4 *1 =4)。

我不确定,但这是图形问题吗?或其他类型?我想我可以通过使用分解它的递归来解决这个问题,但我想了解是否有一种普遍接受的方式,并且这个过程将处理大量数据,所以我需要以一种方式设计它故障可以分布在多个 CPU 上。

知道这是什么类型的问题或解决它的逻辑吗?

【问题讨论】:

  • 我只会称之为递归......
  • Randy..我正在考虑这个问题,但想知道是否有更好的方法。 @EricJ。我希望.. 10 年前放弃在学校学习计算机的机会(主修商科)。我现在正在自学一些个人问题。现在我正在阅读编程,因为我遇到了它们,但最终我可能会回到学校学习。
  • “崩溃”一般是什么意思?您的示例不代表“大量数据”。
  • @duffymo 感谢您的提问。我使用了一个数字很小的小例子来理解这个想法。我不确定正确的术语是,但我有一个值并查找引用它的值..等等,直到我得到所有可能的值组合。另外,我猜大数据是相对的,但我是说因为随着数据集变大,我想要最有效的方法来解决这个问题。

标签: algorithm math graph-algorithm


【解决方案1】:

你的例子真的太模糊了——你不是把它作为一个真实的场景或要解决的问题,而是作为一个算法——

我抬头看到 2+2=4。所以然后我查找 2,看看是否分解为 1+1,所以我知道 2+1+1=4 和 1+1+1+1=4。对于这个问题,我应该把它(使用计算表)分解成 4 个结果(提到的 3 和 4 *1 =4)。

您不是在询问如何做某事 - 您是在告诉我们您想做什么并询问该活动的名称。

从您的问题中可以清楚地看出您知道自己需要做什么。你的流程应该是

  • 编写程序来做任何需要做的事情
  • 如果您卡在某个特定点,请研究或提出具体问题
  • 如果它不起作用或需要改进,请询问与问题领域相关的具体问题

【讨论】:

  • 我明白了,柯克。我认为我可以解决大多数问题,但我的解决方案通常无效。我试图弄清楚是否存在现有解决方案并且我可以实施它。我想,为什么要重新发明轮子。
  • 这很公平。然而,很多时候,切割一个简单的轮子比尝试将一个拖拉机轮子安装到您的马车上更容易。
  • 我确实听从了您的建议,并创建了自己的版本来解决问题。我敢肯定它不是最有效的,但随着我犯更多错误,我会变得更好。我想这个月我会花更多的时间阅读更多的算法书籍,以获得更广泛的理解,这样我就可以提出更智能的算法相关问题。感谢您的回答和建议,柯克。
【解决方案2】:

尽我所能理解您的具体示例,它可能是递归,可能是图形问题,也可能是其他几件事或组合。并非每个编程问题都可以归类为一个整洁的类别,对于任何问题,通常至少有六种不同的有效方法。

在处理大量数据方面,可以采用许多不同的策略,具体取决于需要如何访问(顺序?按偏移量随机?按键随机或某种搜索? )、更新频率、与存储层次结构的各个级别的大小相关的数据量等。

然后是多个 CPU——并行处理——除了其他问题之外,数据同步成为一个重要问题。

【讨论】:

  • 感谢您的回答。我有点希望有人会说“这是一个 xyz 类型的问题”,然后我就可以开始学习如何实现那个特定的算法了。就像我提到的,app 获取一个数字,然后在一个大的值表中查找结果并将它们分解。有一个排序,但它是我工作的另一个过程,所以这些类型的过程是从这个应用程序中抽象出来的。也因为多 cpu 的原因,我试图弄清楚如何尽可能地分解这个过程,以便它可以在机器之间拆分,然后在最后重新加入。
  • 感谢超级诚实的回答。当您想解决问题并怀疑那里有解决方案但从未学习过所有类型的算法时,这有点令人沮丧。我想我会按照你的逻辑阅读几本关于不同算法的书,然后尝试将我的问题转移到我知道的算法上。再次感谢丹尼尔。
  • 我的建议是制作一些玩具示例,尝试不同的技术,对问题有一个“感觉”。有些只是在纸上,有些是代码。特别注意你倾向于循环、扫描、重复等的地方。考虑一下您在“真实”问题中进行的此类迭代的数量,并且至少要避免倾向于进行 N 平方迭代等的方法。想想数据将如何传播——想象它写在很多页纸上,并试图保持纸叠整齐,等等。
  • 谢谢丹尼尔。我将尝试遵循您的方法。现在我只是习惯于直接编码而没有真正的计划(只是测试东西),但自从我想出了如何测量(big o)我的算法......我已经意识到我的算法有多糟糕。你的建议肯定会帮助我变得更好。感谢您的精彩回答!
  • 除了查看算法顺序外,还要考虑页面触摸。假设一个页面的大小大约为 4K,并且任何时候您在数组中引用的某些内容与最后一次引用数组的距离超过了该距离,这就是不同的页面触摸。 Ideal 是一种算法,它一次“遍历”一个页面,在转到下一个之前对一个页面进行多次引用。最糟糕的是一种算法,它随机访问数千个页面,没有特定的顺序以获得单个结果。缓存接触不太重要,但仅在相同的基础上工作,例如 32 字节块。
猜你喜欢
  • 2018-04-02
  • 2019-04-09
  • 2011-09-03
  • 1970-01-01
  • 1970-01-01
  • 2012-07-29
  • 2012-06-21
  • 2011-03-24
  • 2011-10-10
相关资源
最近更新 更多