找回密码
 加入
搜索
楼主: pusofalse

[效率算法] 枚举字符串中的所有字符组合

 火.. [复制链接]
发表于 2010-8-22 23:41:05 | 显示全部楼层
回复 15# 水木子


    实力本菜鸟自有有自知之明…… 也不会在P版的技术贴中此“实力”问题…
说到此题,我也只想到以前曾用过 _ArrayCombinations() ,不必费脑细胞… 无奈于那时测试此函数在大于20位的组合会出错,一直耿耿于怀,也就一直对其无爱。 也不知道现在修正没有~
    现在看到有如此高效的代码出现,更不会鸟它了~
发表于 2010-8-23 09:53:59 | 显示全部楼层
回复  水木子


    实力本菜鸟自有有自知之明…… 也不会在P版的技术贴中此“实力”问题… {:face (30 ...
afan 发表于 2010-8-22 23:41


20个...好bt
发表于 2010-8-27 18:50:30 | 显示全部楼层
本帖最后由 foboy 于 2010-8-27 23:55 编辑

爷们也来段代码,是截止到此楼为止运行效率最高的。
在一般性能的笔记本上运行,10个字符的平均处理时间为50毫秒内,15个字符的处理时间为1秒左右。
试了一下20个字符,27秒。
在台式机上,10个字符的处理时间为21毫秒左右,15个字符的时间是660毫秒,20个符没测试。
$aaa = "1234567890"
$string = StringRegExp($aaa, '\V', 3)
$string_num = UBound($string)
$result = ""
$pretime = TimerInit()
test($string, $string_num, 0, 0, "")
ConsoleWrite($result)
ConsoleWrite(TimerDiff($pretime))
Func test($_string, $_lenth, $_i, $_begin, $_sub_str)
        For $i = $_i + StringLen($_sub_str) To $_lenth - 1
                $_the_string = $_sub_str & $_string[$i]
                $result &= $_the_string & @CRLF
                test($_string, $_lenth, $_i, $i, $_the_string)
                $_i += 1
        Next
EndFunc   ;==>test

评分

参与人数 2金钱 +180 收起 理由
rolaka + 80 啊 虽然原理和array.au3里的很相似 但速度好 ...
pusofalse + 100 学习了。

查看全部评分

发表于 2010-8-28 11:48:33 | 显示全部楼层
呵呵差距啊应该好好学习一下。。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-16 02:36 , Processed in 0.067953 second(s), 14 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表