【发布时间】:2014-02-10 09:17:39
【问题描述】:
最近我一直在使用单词组合来制作不同语言的“短语”,我注意到一些事情我可以通过更多专家的意见来做。
为此定义一些常量,
深度 (n) 平均为 6-7
输入集的长度约为 160 个唯一词。
- 内存 - 生成 160 个单词的 n 个排列会浪费大量空间。我可以通过将数据库写入磁盘来滥用数据库,但是由于我需要不断地等待 IO,因此我的性能受到了影响。另一个技巧是像生成器对象一样动态生成组合
- 时间 - 如果我没记错
n choose k变大 fast 类似这个公式factorial(n) / (factorial(depth) * (factorial(n-depth)))这意味着输入集很快就会变大。
我的问题是这样的。
考虑到我有一个函数f(x),它采用组合并应用具有成本的计算,例如
func f(x) {
if query_mysql("text search query").value > 15 {
return true
}
return false
}
如何在大量组合上有效地处理和执行此函数?
额外问题,可以同时生成组合吗?
更新:我已经知道如何以常规方式生成它们,更多的是提高效率。
【问题讨论】:
-
在计算过程中“深度”是否保持不变。因此,对于算法的一次运行,您的输出是来自 160 长度输入的所有
depth=6单词组合或[1,6]范围内的所有单词组合? -
@MattiLyra 理想情况下,我希望深度从 [n..2] 开始,但现在让我专注于一个,为了清晰起见删除了行
-
好吧,这将为您提供一种并行化组合的方法,并行运行每个
n=3, n=4 ... n=n,因为它们不相互依赖。 -
@MattiLyra 如果一组组合的结果总是在 enxt 中,可能会浪费计算
-
我不知道是谁投票结束了这个问题。这个问题对 SO 来说非常好。
标签: performance algorithm math combinations