标题: [数值计算] 随机乱序并计算运行时间(顺便PK下POWERSHELL脚本) [打印本页]
作者: batman 时间: 2013-7-30 19:42 标题: 随机乱序并计算运行时间(顺便PK下POWERSHELL脚本)
本帖最后由 batman 于 2013-7-30 20:08 编辑
本人不才,想以下面的代码来实现两个目的:
1、对计算批处理运行时间(时长限24小时内)进行示例;
2、PK一下POWERSHELL脚本如何实现,还请不吝赐教。- @echo off&setlocal enabledelayedexpansion
- set "t=%time%"&set /a num=1000
- %-----------------------------------------------------%
- for /l %%a in (1,1,%num%) do set /a _!random!_%%a=%%a
- for /f "tokens=2 delims==" %%a in ('set _') do echo,%%a
- %-----------------------------------------------------%
- for %%a in (h-0-k-24,m-3-h-60,s-6-m-60,ms-9-s-100) do (
- for /f "tokens=1-4 delims=-" %%1 in ("%%a") do (
- set /a %%1=1!time:~%%2,2! %% 100-1!t:~%%2,2! %% 100
- if !%%1! lss 0 set /a %%1+=%%4,%%3-=1
- )
- )
- echo 用时%h%小时%m%分%s%秒%ms%毫秒
- pause>nul
复制代码
注:虚线范围内为随机乱序代码,同时希望能从代码的简洁度以及效率(时间)上进行比较
作者: PowerShell 时间: 2013-7-30 21:24
1 说实在的,我理解能力听差的,[随机乱序并计算运行时间] 我是没看懂,我的bat又差,我又看不太懂你写的东西,所以没法回复.
2 我试着运行了上述代码,发现貌似是每行产生一个随机数,产生多少行没统计,最后有一个时间输出.
powershell 用 Measure-Command { 代码块 } 来统计时间。也可以用时间相减,用Get-Random 来产生随机数。这都是简单的东西。- $开始时间 = Get-Date
- $随机数组 = 1..1000
- for ($i=1001;$i -gt 1;$i--)
- {
- $当前随机数 = Get-Random -InputObject $随机数组
- write-host $当前随机数
- #显示1000次 718毫秒
- }
- $结束时间 = Get-Date
- $计算用时 = $结束时间 - $开始时间
- $计算用时
复制代码
3 (你很恨我这我知道,因为我们有脚本之争,不过,但凡思想学术界的传统,各门各派都有门户,都有争论,我认为这很正常,不算什么。)我一直想问你个事:如果有linux魔教之妖人,用linux邪派武功,组团来pk我,我双拳难敌四手,把我打得惨了,你身怀bat,vbs神功,能救我,你帮我不帮?
当然了,所谓邪派,我只是这么一说。从倚天这部书中,我们可知,魔教总是自称正教,他人才是邪教。
而且,正教中就没有尹志平么?
但是捏,人总是脱离不了门户的,你承认门户么?如果不承认,那你也不会有【总想挺bat,驳powershell】的想法和做法了。
bat太老,功能听差的,vbs面向对象了,强了很多,但对象少。构造对象,再调用,语法麻烦,代码量大,powershell更强了,总之我觉得我microsoft派牛人,不给菜鸟教授先进的脚本,而用蠢笨过时的bat,搞的他们武功太差,进而导致魔教linux的武功大肆在我派落地,生根,蚕食win空间,我派各个长老实在是极大犯罪!!!
外国人,不懂中文,一般不会看我们论坛,所以坑的都是中国脚本爱好者,长此以往,中国脚本人实力世界垫底,你们不会觉得愧对祖师么?
作者: PakTC 时间: 2013-7-30 21:48
本帖最后由 PakTC 于 2013-7-30 22:16 编辑
man,要效率,我对比过,用类似选择排序的方法逐步提取随机数比set _列出快一些。
不过要写起来方便 还是set _
收回上面的话了。
如果数量少,自然是for提取速度快。
如果数量大,set _还是只需要一点点时间,毕竟是内部处理的事情。
作者: PakTC 时间: 2013-7-30 21:59
回复 2# PowerShell
1楼的1000个随机数是1-1000随机输出不重复哦
作者: CrLf 时间: 2013-7-30 22:06
回复 2# PowerShell
看着想笑,没谁恨你什么,好吧,为了和谐不说啥了,先森这边有请:http://bbs.bathome.net/thread-25583-1-1.html
补充一下,楼主的意思其实是对 1~1000 的数字乱序排列
作者: batman 时间: 2013-7-31 11:02
可能POWERSHELTH版主没理解我的意思,当然,这个要怪我,没有讲清楚。。。
首先我的代码实现的是将1-1000这1000个数随机打乱次序并输出,然后计算了整个
乱序输出的时间,其中计算时间的代码并不是重点,只是为了让人更直观地看到程序
的用时。同时,我想如果用POWERSHELL来实现这一随机乱序和输出,代码是否也
能像批这样简洁,同时总共需要的时间又是多少(在同一台机子上比较)?除此以外,
并没有任何别的意思。。。
作者: PowerShell 时间: 2013-7-31 18:25
一个含有1000个元素的集合中,取多少个元素呢?
如果取1000个的话,就是把这1000个数(随机)重新排列呀,重新排列当然【不会有重复出现的元素】啊,是这样么?
只有一条命令,除了滚屏的时间,估计也就1---2毫秒吧,- 1..1000 | Get-Random -Count 1000
复制代码
-Count <int>
确定将返回的对象数。默认值为 1。如果 Count 的值超过集合中的对象数,Get-Random 按随机顺序返回所有对象。
作者: CrLf 时间: 2013-7-31 20:18
本帖最后由 CrLf 于 2013-7-31 20:21 编辑
回复 7# PowerShell
我原来是用 add-member 添加随机属性值来排序,比较复杂,inputobject 这个用法更爽,学习了
作者: terse 时间: 2013-8-2 17:33
数稍大点 这样也可以 直接 ECHO- @echo off&setlocal enabledelayedexpansion
- set "t=%time%"&set /a num=10000
- if "%~1" == "" (
- %-----------------------------------------------------%
- for /f "tokens=2" %%i in ('%~s0 : ^|sort') do echo %%i
- %-----------------------------------------------------%
- for %%a in (h-0-k-24,m-3-h-60,s-6-m-60,ms-9-s-100) do (
- for /f "tokens=1-4 delims=-" %%1 in ("%%a") do (
- set /a %%1=1!time:~%%2,2! %% 100-1!t:~%%2,2! %% 100
- if !%%1! lss 0 set /a %%1+=%%4,%%3-=1
- )
- )
- echo 用时!h!小时!m!分!s!秒!ms!毫秒
- pause&exit
- ) else for /l %%i in (1 1 %num%) do echo !random! %%i
复制代码
作者: 523066680 时间: 2013-8-2 18:32
回复 9# terse
哈哈,我今天挖帖又看了一次你的这个用sort的方法。
作者: CrLf 时间: 2013-8-2 18:45
本帖最后由 CrLf 于 2013-8-2 18:46 编辑
seq+shuf:复制代码
gnu sort 7.6:- @(for /l %%a in (1 1 1000) do @echo %%a)|sort -R
复制代码
作者: terse 时间: 2013-8-2 22:48
回复 10# 523066680
没办法 不习惯于太多的SET 想省点
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |