最近我一直在尝试用不同语言的单词组合成“短语”,但我发现有些地方需要更专业的意见。
先定义一些常量:
深度(n
)平均为6-7
输入集长度约为160个唯一单词。
- 内存 - 生成160个单词的n排列会浪费很多空间。我可以通过将其写入磁盘来滥用数据库,但这会影响性能,因为我需要不断等待IO。另一个技巧是像生成器对象一样实时生成组合。
- 时间 - 如果我没错,
n choose k
很快就会变得非常大,类似于这个公式factorial(n) / (factorial(depth) * (factorial(n-depth)))
这意味着输入集很快就会变得非常庞大。
我的问题是:
考虑到我有一个函数 f(x)
,它接收一个组合并应用一个具有代价的计算,例如
func f(x) {
if query_mysql("text search query").value > 15 {
return true
}
return false
}
如何高效处理和执行大量组合的函数?
附加问题,能否并发生成组合?
更新:我已经知道如何常规生成组合,更多的是让它变得高效。
n=3, n=4 ... n=n
中的每个运行在并行上,因为它们彼此之间没有依赖关系。 - Matti Lyra