【发布时间】:2010-01-05 00:03:36
【问题描述】:
我正在尝试制作一些非常基本的东西,它将循环遍历数组的所有可能排列。
确实这是在汇编中完成的,但我会用 C 来解释。
基本上,假设我们有一个数组uint8_t *data=malloc(10);
我想创建一个算法来打印数组data 中所有可能的字节组合。
是的,我知道它会很慢(并且有很多值),而且我并不是要真正复杂的优化版本。我只是在寻找可以在我的计算机上运行的东西一种蛮力类型的东西来找到符合某些条件的某些值..
(注意,我说排列是因为 [0,1,2] 不应该和 [2,1,0] 一样计算)
编辑: 另外,尽量不要使用太多的 libc 函数,因为我会将其转换为只有 512 字节的独立引导加载程序。
我知道我知道如何做到这一点,但对于我的一生,我就是无法让算法在我的脑海中运行!
【问题讨论】:
-
您的示例有 1208925819614629174706176 (~1e24) 种可能的组合,其中有 10 个
uint8_t值。你真的需要这个吗? -
是吗?我知道如何计算它以及它有多大。也许我的电脑可以在几个月内完成它。
-
没有。即使“你的电脑”被理解为“当今世界上最快的电脑(捷豹)”,你也无法在几个月内完成它。 Jaguar 有四分之一的一百万个内核,每个内核的运行频率为 2.6 Ghz。即使您可以在每个内核上的每个周期都打印一个位模式,这显然是荒谬的,但要花 58 年才能打通整个数据空间。由于您的计算机充其量只有 Jaguar 的处理能力的十分之一,因此您将看到 50 万年。
-
@earlz,正如斯蒂芬所说,计算出许多排列不会很快发生。我们需要现实的限制:-)
-
任何需要 50 万年计算的东西都有相同的答案:42
标签: c algorithm permutation brute-force