作者TonyQ (骨头)
看板Programming
标题Re: [问题] 随变数增加而增加条件式
时间Sat Oct 13 16:58:44 2007
※ 引述《mycircle (Careless whisper)》之铭言:
: ※ 引述《TonyQ (骨头)》之铭言:
: 感谢回文和推文的网友 我把我的问题再说清楚一点好了
: 这个问题其实是一个老问题了 我拿来做练习而已
: 题目如下
: 如何列出1..n 的所有排列组合
: 例如 123 的所有排列组合 为 123 132 321 132 213 231 3! = 6种
: 可是如果12345 勒 就将近有120种排列组合 如果扩增到 1...10勒
: 就会有10!=3628800种
: 的排列组合
: 这时人脑便没办法一个一个将他展现出来了
: 而且此类问题可以归类为NP hard 问题 也就是数字规模增大
: 求解时间以及复杂度将会非线性的来增加
: 我一开始的想法是用暴力法 也就是所谓的穷举法一一把他列出
: 但我知道如网路上这位网友所提的概念
: http://new-acos.blogspot.com/2007/07/blog-post_04.html
: 会比较节省演算的效率与记忆体
: 不过还是尝试写看看 因为我还是新手
: 两种穷举法的原始码列举如下(意思是差不多的) 我写在EXCEL 的VBA上
: 第一种 :
: ======== 问题来了 ======
: 在写的过程中 在第一种穷举法时
: 我本来是想写成动态的 也就是我希望当使用者只要改变N的大小 就可以了
: 但是我发现 以这个问题为例
: 像for next 以及 if then 的这些条件式 都会随着N的增加而增加
: 我就突然想到 如果以後碰到这类问题时该如何解决
: 如果我以後只要碰到 变数增加时 我的条件式也会增加时 我该如何处理
: 程式写得很糟 只是在写的过程中 想到这个问题
: 所以想问看看高手是如何处理这类问题的 感谢您抽空看完我的文章 谢谢
基本上正常的问题碰到这种状况都会想办法转换成
不用变数增加判断式就跟着增加的写法 -.-;;
这就是为甚麽会有 NP complete & transfer and conquer的由来 XD
因为要转换问题变成比较好解决的问题。
我刚有写个sample , 不过该死的vb 6竟然不报备关掉了 ,
就算了 , 只留下一个recursive解 .Q_Q
────────────────────────────────
当初在做这题的时候我是取巧用string来做
当然这题也是典型的递回题
记得他没有内建stack类别 , 所以就建议用递回写
当然算排列组合的话 , 这还不是最快的 ,
因为你可以把reverse算一种 , 可以减少一半的cost .
────────────────────────────────
Dim inputStr As String
inputStr = "12345"
Dim n As Integer
n = Len(inputStr)
printStr "", inputStr
Sub printStr(strNow As String, strNext As String)
Dim n
n = Len(strNext)
If n = 0 Then
List1.AddItem (strNow)
'用你想要显示的方法替换掉
Else
For i = 1 To n
printStr strNow & Mid(strNext, i, 1), Mid(strNext, 1, i - 1) & _
Mid(strNext, i + 1, n - i)
Next
End If
End Sub
--
▄▅▆▇███▇▆▅▄▃ ╰┼╯─╮ ╮
◥███████████◣ ╰┼╯=│=│
◥██████───────◣ *. ╯ ╯ ╯ の 物 语 .*
◥███████──────◣ ~ ◢◣ ◢◣
◥██████───────◤ ◥◤* 空白的世界.翼
*◥◤
◥██▁▂▃▄▅▆▇███▆▅▄▃▂▂
~telnet://tony1223.no-ip.info
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.132.59.247
※ 编辑: TonyQ 来自: 220.132.59.247 (10/13 16:59)