日期:2014-05-18  浏览次数:20607 次

求佛 算法
STR1:(A)ARG20K-F01~F02(B,H)(G1,G2,G3,G4)(-1,N)

STR2:   10-AR50~60-N##(B,G)-(1,N,R)Z

这是两个字符串

现求他们的全组合的算法


救世主




------解决方案--------------------
STR1:(A)ARG20K-F01~F02(B,H)(G1,G2,G3,G4)(-1,N)

STR2: 10-AR50~60-N##(B,G)-(1,N,R)Z

这是两个字符串

现求他们的全组合的算法

咋个组合法,说一下撒?
------解决方案--------------------
拆分成单个字母的任意组合? 如果是的话, 将其拆分出来, 做 cross join 即可
------解决方案--------------------
那还不如用循环一个一个来不就完了. 那样复杂度太高 影响算法效率

------解决方案--------------------
我是菜鸟
能不能这样
把每个要变得地方设成一个字段,
每个变化项分开设一个表,最后 join 下
table_1:
1 2
AARG20K-F01~F02 B
AARG20K-F01~F02 H
table_2:
3
G1
G2
G3
G4
table_3:
4
-1
B
最后
select * from dbo.table_1 a , dbo.table_2 b ,table_3 c
go
结果
AARG20K-F01~F02 B G1 -1
AARG20K-F01~F02 B G2 -1
AARG20K-F01~F02 B G3 -1
AARG20K-F01~F02 B G4 -1
AARG20K-F01~F02 B G1 N
AARG20K-F01~F02 B G2 N
AARG20K-F01~F02 B G3 N
AARG20K-F01~F02 B G4 N
AARG20K-F01~F02 H G1 -1
AARG20K-F01~F02 H G2 -1
AARG20K-F01~F02 H G3 -1
AARG20K-F01~F02 H G4 -1
AARG20K-F01~F02 H G1 N
AARG20K-F01~F02 H G2 N
AARG20K-F01~F02 H G3 N
AARG20K-F01~F02 H G4 N
可以吗?
------解决方案--------------------
广义笛卡儿积
------解决方案--------------------
厄,我上面把 测试和结果都给出来了,楼主没有看明白吗?

只要把每个可变的字符 的地方 写一张表

最后cross join 就可以了

关于笛卡儿积,举个简单例子(1,2,3)和(4,5,6)做笛卡儿积 结果就是:

(1*4,1*5,1*6,2*4,2*5,2*6,3*4,3*5,3*6)

不知道楼主明白没有~
------解决方案--------------------
这只是其中的几个字符串,我的表里还有好多这样的字符串呢
------------------------------------------------------
=。=
每个可变 字符 写一张表
有多少可能就写多少行

酱紫~