求一算法(组合算法):

applekiller 2004-07-12 04:21:06
我假设有5个字符A,B,C,D,E 他们组合成字符串Str,Str可能是1位 2 3 4 5位,
如何能得到Str的所有组合:
如2位字符串是有AA AB AC AD AE ......
请写出简要算法:
...全文
312 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiang8360 2004-07-19
  • 打赏
  • 举报
回复
严重关注!
rickone 2004-07-18
  • 打赏
  • 举报
回复
上面‘ victorycyz(中海)’的代码怎么不像是VB,又怎么可以在VB里调用?是什么东西,教教我怎么样?谢谢!
captainivy 2004-07-18
  • 打赏
  • 举报
回复
做黑客字典太慢咯
jiang8360 2004-07-18
  • 打赏
  • 举报
回复
up
victorycyz 2004-07-13
  • 打赏
  • 举报
回复

是组合,不是排列,那我也得改一下:

create procedure proA
as
begin

declare table #t (s varchar)

insert #t select 'A'
union select 'B'
union select 'C'
union select 'D'
union select 'E'

select a.s+b.s from #t a,#t b where a.s<b.s
union all
select a.s+b.s+c.s from #t a,#t b,#t c where a.s<b.s and b.s<c.s
union all
select a.s+b.s+c.s+d.s from #t a,#t b,#t c,#t d
where a.s<b.s and b.s<c.s and c.s<d.s
union all
select a.s+b.s+c.s+d.s+e.s from #t a,#t b,#t c,#t d,#t e
where a.s<b.s and b.s<c.s and c.s<d.s and d.s<e.s

drop table #t

end
go

VB中调用:
set rs=conn.execute "proA"
northwolves 2004-07-12
  • 打赏
  • 举报
回复
我的算法:
Sub getall(ParamArray x())
Dim n As Integer, i As Long, num As Integer, j As Integer
Dim temp1 As String, temp2 As Long
n = UBound(x) + 1
For num = 1 To n
For i = 0 To n ^ num - 1
temp1 = ""
temp2 = i
For j = 1 To num
temp1 = x(temp2 Mod n) & temp1
temp2 = temp2 \ n
Next
Debug.Print temp1 & vbCrLf
Next
Next
Debug.Print "共 " & (n ^ (n + 1) - 1) / (n - 1) & " 种组合!"
End Sub

Private Sub Command1_Click()
getall "A", "B", "C", "D", "E"
End Sub
RUKYO 2004-07-12
  • 打赏
  • 举报
回复
用途??
lsftest 2004-07-12
  • 打赏
  • 举报
回复
楼主要做黑客字典?????
ryuginka 2004-07-12
  • 打赏
  • 举报
回复
up
wxf0204 2004-07-12
  • 打赏
  • 举报
回复
^_^,算法太多了,这种简单的算法问题,我建议楼主先好好研究一下相关书籍!对以后很有帮助的!
thirdapple 2004-07-12
  • 打赏
  • 举报
回复
递归
TechnoFantasy 2004-07-12
  • 打赏
  • 举报
回复
丢,排列组合搞错了。
脆皮大雪糕 2004-07-12
  • 打赏
  • 举报
回复
哦,没仔细看,楼主的要求还允许重复的,那么是TechnoFantasy老大正解了!
羞愧难当!
脆皮大雪糕 2004-07-12
  • 打赏
  • 举报
回复

TechnoFantasy老大,你求的是排列,楼主要的是组合啊

我上面的程序在Test(3)得出结果:
ABC ABD ABE ACD ACE ADE BCD BCE BDE CDE
3
C =10 呵呵
5
脆皮大雪糕 2004-07-12
  • 打赏
  • 举报
回复
'再次优化一下test过程:增加参数 intLenth 用于设定输出长度。如果intLenth=0则输出所有组合
Option Explicit

Private Sub Test(intLenth As Integer)
Dim i As Integer
Dim strOut As String

For i = 31 To 0 Step -1 '二进制 00000~11111
strOut = ""
If (i And 16) > 0 Then strOut = strOut + "A"
If (i And 8) > 0 Then strOut = strOut + "B"
If (i And 4) > 0 Then strOut = strOut + "C"
If (i And 2) > 0 Then strOut = strOut + "D"
If (i And 1) > 0 Then strOut = strOut + "E"
If Len(strOut) = intLenth Or intLenth = 0 Then Debug.Print strOut
Next
End Sub

Private Sub Command1_Click()
Call Test(0) '输出所有组合
Call Test(3) '输出长度为3的组合
End Sub
TechnoFantasy 2004-07-12
  • 打赏
  • 举报
回复
上面的范例运行的结果:

aaa
baa
caa
daa
eaa
aab
bab
cab
dab
eab
aac
bac
cac
dac
eac
aad
bad
cad
dad
ead
aae
bae
cae
dae
eae
aba
bba
cba
dba
eba
abb
bbb
cbb
dbb
ebb
abc
bbc
cbc
dbc
ebc
abd
bbd
cbd
dbd
ebd
abe
bbe
cbe
dbe
ebe
aca
bca
cca
dca
eca
acb
bcb
ccb
dcb
ecb
acc
bcc
ccc
dcc
ecc
acd
bcd
ccd
dcd
ecd
ace
bce
cce
dce
ece
ada
bda
cda
dda
eda
adb
bdb
cdb
ddb
edb
adc
bdc
cdc
ddc
edc
add
bdd
cdd
ddd
edd
ade
bde
cde
dde
ede
aea
bea
cea
dea
eea
aeb
beb
ceb
deb
eeb
aec
bec
cec
dec
eec
aed
bed
ced
ded
eed
aee
bee
cee
dee
eee

5^3共125个
脆皮大雪糕 2004-07-12
  • 打赏
  • 举报
回复
上面的代码把test函数改一下,产生的结果看得更明白一点:

Private Sub Test()
Dim i As Integer
Dim strOut As String

For i = 31 To 0 Step -1 '二进制 00000~11111
strOut = ""
If (i And 16) > 0 Then strOut = strOut + "A"
If (i And 8) > 0 Then strOut = strOut + "B"
If (i And 4) > 0 Then strOut = strOut + "C"
If (i And 2) > 0 Then strOut = strOut + "D"
If (i And 1) > 0 Then strOut = strOut + "E"
Debug.Print strOut
Next
End Sub
TechnoFantasy 2004-07-12
  • 打赏
  • 举报
回复
调用:

Option Base 1
Private Sub Command1_Click()
Dim a()

ReDim a(5)
a(1) = "a"
a(2) = "b"
a(3) = "c"
a(4) = "d"
a(5) = "e"

Datas a, 3, ""
End Sub

打印出长度为3的组合
脆皮大雪糕 2004-07-12
  • 打赏
  • 举报
回复
Option Explicit

Private Sub Test()
Dim i As Integer
Dim strOut As String

For i = 0 To 31 '二进制 00000~11111
strOut = ""
If (i And 16) > 0 Then strOut = strOut + "A"
If (i And 8) > 0 Then strOut = strOut + "B"
If (i And 4) > 0 Then strOut = strOut + "C"
If (i And 2) > 0 Then strOut = strOut + "D"
If (i And 1) > 0 Then strOut = strOut + "E"
Debug.Print strOut
Next
End Sub

Private Sub Command1_Click()
Call Test
End Sub
TechnoFantasy 2004-07-12
  • 打赏
  • 举报
回复
Sub Datas(c(), lens As Integer, inputchar)
Dim i, j

If lens = 1 Then
For i = LBound(c) To UBound(c)
Debug.Print c(i) + inputchar
Next i

End If
'
If lens > 1 Then
For i = LBound(c) To UBound(c)
Datas c, lens - 1, inputchar + c(i)
Next i
End If
'
End Sub
加载更多回复(2)
推荐算法系统实战全系列精品课 :一、课程优势本课程有陈敬雷老师的清华大学出版社配套新书教材《分布式机器学习实战》人工智能科学与技术丛书,新书配合此实战课程结合学习,一静一动,互补高效学习!本课程由互联网一线知名大牛陈敬雷老师全程亲自授课,技术前沿热门,这个《推荐算法系统实战全系列精品课》来自陈敬雷在一线大型互联网公司的多年实战经验总结,比较完备的包含了各个算法系统模块,实实在在的重量级干货分享!听完此系列课,可以实现一个完整的推荐系统!二、课程简介       首先推荐系统不等于推荐算法,更不等于协同过滤。推荐系统是一个完整的系统工程,从工程上来讲是由多个子系统有机的组合,比如基于Hadoop数据仓库的推荐集市、ETL数据处理子系统、离线算法、准实时算法、多策略融合算法、缓存处理、搜索引擎部分、二次重排序算法、在线web引擎服务、AB测试效果评估、推荐位管理平台等,每个子系统都扮演着非常重要的角色,当然大家肯定会说算法部分是核心,这个说的没错,的确。推荐系统是偏算法的策略系统,但要达到一个非常好的推荐效果,只有算法是不够的。比如做算法依赖于训练数据,数据质量不好,或者数据处理没做好,再好的算法也发挥不出价值。算法上线了,如果不知道效果怎么样,后面的优化工作就无法进行。所以AB测试是评价推荐效果的关键,它指导着系统该何去何从。为了能够快速切换和优化策略,推荐位管理平台起着举足轻重的作用。推荐效果最终要应用到线上平台去,在App或网站上毫秒级别的快速展示推荐结果,这就需要推荐的在线Web引擎服务来保证高性能的并发访问。这么来说,虽然算法是核心,但离不开每个子系统的配合,另外就是不同算法可以嵌入到各个子系统中,算法可以贯穿到每个子系统。       从开发人员角色上来讲,推荐系统不仅仅只有算法工程师角色的人就能完成整个系统,需要各个角色的工程师相配合才行。比如大数据平台工程师负责Hadoop集群和数据仓库,ETL工程师负责对数据仓库的数据进行处理和清洗,算法工程师负责核心算法,Web开发工程师负责推荐Web接口对接各个部门,比如网站前端、APP客户端的接口调用等,后台开发工程师负责推荐位管理、报表开发、推荐效果分析等,架构师负责整体系统的架构设计等。所以推荐系统是一个多角色协同配合才能完成的系统。       下面我们就从推荐系统的整体架构以及各个子系统的实现给大家深度解密来自一线大型互联网公司重量级的实战产品项目!!!推荐算法系统实战课程大纲如下:1、推荐系统架构设计2、推荐数据仓库集市3、推荐系统ETL数据处理4、CF协同过滤用户行为挖掘5、推荐算法ALS交替最小二乘法6、推荐系统ContentBase文本挖掘算法7、用户画像兴趣标签提取算法8、基于用户心理学模型推荐9、推荐系统多策略融合算法10、准实时在线学习推荐引擎11、Redis分布式缓存处理12、分布式搜索引擎13、推荐Rerank二次重排序算法(基于逻辑回归、GBDT、随机森林、神经网络的算法思想做二次排序)【可试听】14、推荐Rerank二次重排序算法(基于Learning TO rank排序学习思想做二次排序)15、推荐Rerank二次重排序算法(基于加权公式思想做二次排序)16、在线Web实时推荐引擎服务原理及核心处理算法17、在线Web实时推荐引擎服务核心源代码解析18、在线AB测试推荐效果评估19、离线AB测试推荐效果评估20、推荐位管理平台 21、大数据用户画像系统架构图深度解密与详细介绍22、大数据用户画像系统中各个子系统详细讲解三、老师介绍陈敬雷  充电了么创始人,CEO兼CTO陈敬雷,北京充电了么科技有限公司创始人,CEO兼CTO,十几年互联网从业经验,曾就职于用友、中软、凡客、乐蜂网(唯品会)、猎聘网、人民日报(灵思云途)、北京万朝科技,曾任架构师、首席技术官、首席科学家等职务,对业务领域B端、C端、电商、职场社交招聘、内容文娱、营销行业都有着丰富的经验,在技术领域,尤其在大数据和人工智能方向有丰富的算法工程落地实战经验,其中在猎聘网任职期间主导的推荐算法系统项目获得公司优秀项目奖,推荐效果得到5倍的提升。陈敬雷著有清华大学出版社两本人工智能书籍,分别是《分布式机器学习实战(人工智能科学与技术丛书)》已出版、《自然语言处理原理与实战(人工智能科学与技术丛书)》。目前专注于大数据和人工智能驱动的上班族在线教育行业,研发了充电了么app和网站,用深度学习算法、nlp、推荐引擎等技术来高效提升在线学习效率。

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧