【发布时间】:2016-07-08 20:31:10
【问题描述】:
我想实现一个函数,它将返回集合的笛卡尔积,重复给定的数字。例如
input: {a, b}, 2
output:
aa
ab
bb
ba
input: {a, b}, 3
aaa
aab
aba
baa
bab
bba
bbb
但是我可以实现它的唯一方法是首先对 2 个集合(“ab”,“ab”)进行笛卡尔乘积,然后从集合的输出中添加相同的集合。这是伪代码:
function product(A, B):
result = []
for i in A:
for j in B:
result.append([i,j])
return result
function product1(chars, count):
result = product(chars, chars)
for i in range(2, count):
result = product(result, chars)
return result
我想要的是直接开始计算最后一个集合,而不是计算它之前的所有集合。这是否可能,也是一个会给我类似结果的解决方案,但它不是笛卡尔积是可以接受的。 我阅读大多数通用编程语言都没有问题,所以如果你需要发布代码,你可以用任何你喜欢的语言来完成。
【问题讨论】:
-
你已有的有什么问题?
-
我想跳过迭代,因为上面的算法正在使用前一组,所以如果我想生成 {a,b} 8,首先 pc 必须计算 {a,b} x { a,b} 然后 ({a,b} x {a,b})x{a,b} ... 直到 8
-
您实际上是在尝试解决问题(真正的瓶颈?)还是只是“为乐趣而优化”?
-
解决问题是为了好玩吗?它将对我的其他项目有很大帮助,但这不是必需的。另外我不确定这个问题是否已经解决,我的意思是我不可能解决它
-
(有时)可以“为了好玩”寻找优化,但我总是想提醒人们read this first
标签: algorithm language-agnostic