![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-09-17 22:42 |
共 47,812 主题排行 / 349,917 发帖 / 今日 0 篇 / 48,270 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 出题目,全是我从C语言的题目中挑出来的 |
| 可打印版本 3,184 / 38 |
| 第31楼 plp626 | 发表于 2008-04-12 23:20 |
| 银牌会员 发帖 1,020 积分 2,278 | |
|
其实我就没测试,从算法上分析我就知道不测试时间都一样,只是用的变量不一样,三重循环在理论上可能还稍费时间。
|
|
| 第32楼 slore | 发表于 2008-04-13 02:12 |
| 铂金会员 发帖 2,478 积分 5,212 | |
Originally posted by plp626 at 2008-4-12 23:20: 你真的从算法上分析了?时间复杂度都不一样! 还叫不测试时间都一样…… 我敢保证测试时间绝对不一样! 只是用的变量不一样……?真的是这样麽? 3重循环,传统编程是1个x1(不变),1个x10,一个x100(那个例子好像是直接abc合并就可以了,这个是P里面set的支持。)加起来得到那个3位数。(算术运算比字符运算快。) 然后和每个的立方和比较。。。 这个是核心运算,看循环的次数确定时间复杂度一个是O(10^(n+1)-10^(n+1)/9)=O(10^n*8/9),一个是O(9^n) 数字越大第2中算法效率越高! 若判断3位数: 第一种:O(999-111+1)=O(889) 第二种:O(9*9*9)=O(729) 若判断10位数: 第一种:O(8888888889) 第二种:O(3486784401) 若判断20位: 第一种:O(88888888888888888889) 第二种:O(12157665459056928801) 20位的时候循环次数已经近8倍! 3位数看来没有必要争什么。。。 如果你的自己够快的话,自己可以玩玩更多位数。。。 |
|
| 第33楼 26933062 | 发表于 2008-04-13 03:01 |
| 银牌会员 发帖 879 积分 2,268 | |
|
set 到底哪个算法快,我确实不知道。
请问以下两个代码的效率有区别么?我以为代码一,应该快点吧? : |
|
| 第34楼 plp626 | 发表于 2008-04-13 03:39 |
| 银牌会员 发帖 1,020 积分 2,278 | |
|
大家很无聊,现在我觉得比大家更无聊:
把原来的再贴过来,认真看了,两个代码的循环次数分别为: 15楼的:999-100+1=900次 19楼的:9*9*10= 900次 再分析循环体所用语句: 15楼的:一次set 直接赋值+3次set/a赋值+3次变量截取 +1次set/a算术运算(立方和)+一个判断输出 19楼的:一次set 直接赋值+3次set/a赋值+1次set直接赋值(合并)+1次set/a算术运算(立方和)+一个判断输 |
|
| 第35楼 plp626 | 发表于 2008-04-13 04:05 |
| 银牌会员 发帖 1,020 积分 2,278 | |
|
大家可真无聊,简直透顶了,
嗯 ,现在 我做出了一个决定, 准备比大家更无聊: 把原来的再贴过来,认真看,两个代码的循环次数分别为: 15楼的:999-100+1=900次(1重循环) 19楼的:9*10*10= 900次(3重循环) 再分析循环体所用语句: 15楼的:一次set 直接赋值(set str=%%i)+3次set/a赋值+3次变量截取+1次set/a算术运算(立方和)+一个判断输出(if !var! equ !str! echo !str!) 19楼的:一次set 直接赋值(set num1=!a!!b!!c!)+3次set/a赋值+(合并)+1次set/a算术运算(立方和)+一个判断输出(if !num1! equ !num2! echo !num1!) 15楼的: @echo off 19楼的: @echo off 以下是我的分析,(我不是计算机出身的,批处理只是业余爱好,说错话内行勿笑) 同样的循环次数,不同循环重数,花费的时间不同的,重数多了,指令就多了,花的时间就长了,这么看来就是15楼的循环花的时间短些。 问题在变量的截取上,截取是花时间的 而那句!a!!b!!c!所谓的”合并“只是3个变量放到一起了,而 a=!str:~,1!, b=!str:~1,1!, c=!str:~2,1! 这句对应地有某些指令告诉解释器,到底是str的那些部分被截取赋给变量a,b,c这是花些时间的. 这么看来,15楼的循环体内语句又稍费点时间, 一短一长,能抵消吗? 我没试过, |
|
| 第36楼 plp626 | 发表于 2008-04-13 04:37 |
| 银牌会员 发帖 1,020 积分 2,278 | |
|
34楼第一次点错了,也不知怎的,现在想删除都不行,影响浏览,真不爽
|
|
| 第37楼 bat-zw | 发表于 2008-04-13 09:57 |
| 金牌会员 发帖 1,276 积分 3,105 | |
|
不管怎么说,大家研究问题的态度的确让我钦佩!同时我认为如果批处理的本身时间运行值在0.01秒内的时候(系统根本察觉不到误差值)真的没有什么必要去争论什么效率问题吧,还应该是从处理问题的方法上去多加研究和讨论,如研究代码构造和运算逻辑以及思路和出发点,我个人认为这才是我们最需要去深究的地方,不知大家以为所以然。
|
|
| 第38楼 slore | 发表于 2008-04-13 10:55 |
| 铂金会员 发帖 2,478 积分 5,212 | |
|
哎~老了。我错了。。。和写的另一个程序搞晕了。
那个程序没有0。。。所以每层循环是1-9 算成9次了…… 水仙花这个第1位是9其他是10... 但是对字符的处理是肯定比数字慢,合并是快点。 还确定了下: 水仙花数只是说3位数。。。所以不会存在太大的数字。。。所以速度差可以忽略。 所以不好意思说了哪么多,误导了。 PS:当你用C的时候你就知道了,取每位按字符操作麻烦,按数字操作也麻烦要取余……但是*10或*100很容易…… |
|
| 第39楼 slore | 发表于 2008-04-13 10:57 |
| 铂金会员 发帖 2,478 积分 5,212 | |
Originally posted by 26933062 at 2008-4-13 03:01: |
|
| 上一页 1 2 3 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |