Visual_Basic 板


LINE

※ [本文转录自 Programming 看板] 作者: mycircle (Careless whisper) 站内: Programming 标题: Re: [问题] 随变数增加而增加条件式 时间: Sat Oct 13 04:30:09 2007 ※ 引述《TonyQ (骨头)》之铭言: : ※ 引述《琏琏 <[email protected]>, 看板: Programming》之铭言: : : 这种一般都是用递回在做... : : 比如说所有阶层子目录的列举。 : 它只举了一个情境,递回也只是其中一个逻辑解, : 而且以这个情境来讲,递回不见得比较好用。XD : 递回适合用来解 divide and conquer的问题, : 如果他的子问题具有相依性(需要用到a...n的值), : iterator配上 dynamic programming 会是比较好的解。 : 递回 跟 Iterator 之间的转换是演算法里面的其中一个部分, : 基本上一般会建议能不用递回就不用递回,除非他有其必要性(够简单)。 : 递回流程难以掌握,也容易造成stack空间的溢出。 感谢回文和推文的网友 我把我的问题再说清楚一点好了 这个问题其实是一个老问题了 我拿来做练习而已 题目如下 如何列出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上 第一种 : Dim y(5) y(1) = 1 y(2) = 2 y(3) = 3 y(4) = 4 y(5) = 5 '================================================== k = 1 For a = 1 To 5 For b = 1 To 5 For c = 1 To 5 For d = 1 To 5 For e = 1 To 5 If e <> d And e <> c And e <> b And e <> a Then If d <> c And d <> b And d <> a Then If c <> b And c <> a Then If b <> a Then Cells(k, 1) = y(a) & y(b) & y(c) & y(d) & y(e) k = k + 1 End If End If End If End If Next Next Next Next Next 第二种 '================================================= '==使用者输入 '================================================= n = 5 s = 120 Dim y(5) Dim U(120) '================================================= '==使用者输入 '================================================= y(1) = 1 y(2) = 2 y(3) = 3 y(4) = 4 y(5) = 5 '================================================== k = 1 For a = 1 To n '==使用者输入 For b = 1 To n For c = 1 To n For d = 1 To n For e = 1 To n Cells(k, 1) = y(a) & y(b) & y(c) & y(d) & y(e) '==使用者输入 k = k + 1 Next Next Next Next Next '================================================== For a = 1 To n ^ n For i = 1 To n For j = 1 To n ten = Mid(Cells(a, 1), i, 1) ten2 = Mid(Cells(a, 1), i + j, 1) If Mid(Cells(a, 1), i, 1) = Mid(Cells(a, 1), i + j, 1) Then Cells(a, 1) = "" End If Next Next Next k = 1 For x = 1 To n ^ n If Cells(x, 1) <> "" Then U(k) = Cells(x, 1) k = k + 1 End If Next For x = 1 To s Cells(x, 2) = U(x) Next ======== 问题来了 ====== 在写的过程中 在第一种穷举法时 我本来是想写成动态的 也就是我希望当使用者只要改变N的大小 就可以了 但是我发现 以这个问题为例 像for next 以及 if then 的这些条件式 都会随着N的增加而增加 我就突然想到 如果以後碰到这类问题时该如何解决 如果我以後只要碰到 变数增加时 我的条件式也会增加时 我该如何处理 程式写得很糟 只是在写的过程中 想到这个问题 所以想问看看高手是如何处理这类问题的 感谢您抽空看完我的文章 谢谢 -- \(^▽^)/ 人客来坐 http://tomycircle.spaces.live.com/default.aspx --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.104.167.3 -- \(^▽^)/ 人客来坐 http://tomycircle.spaces.live.com/default.aspx --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.104.167.3







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Tech_Job站内搜寻

TOP