Java 用于计时程序的shell脚本在0秒时测量它
我的教授编写了这个shell脚本来计时我的程序,并显示结果。出于某种原因,它只是在我的程序中输出0。他提供了以下文件:Java 用于计时程序的shell脚本在0秒时测量它,java,shell,time,nice,Java,Shell,Time,Nice,我的教授编写了这个shell脚本来计时我的程序,并显示结果。出于某种原因,它只是在我的程序中输出0。他提供了以下文件: timeit.csh sequence ecoli2500.txt ecoli3000.txt ecoli5000.txt ecoli7000.txt ecoli8000.txt ecoli9000.txt ecoli10000.txt 下面是序列的内容 java EditDistance timeit.csh的内容如下 jav
timeit.csh
sequence
ecoli2500.txt
ecoli3000.txt
ecoli5000.txt
ecoli7000.txt
ecoli8000.txt
ecoli9000.txt
ecoli10000.txt
下面是序列的内容
java EditDistance
timeit.csh的内容如下
java EditDistance./timeit.csh sequence
产生全零
时间到了。csh。。。(下面是EditDistance.java):
#/bin/csh
#
#用于计时程序的Unix脚本。
#
#命令行:timeit序列
#命令行中的程序数组
设置程序=$argv[1]
#根据需要进行调整
设置CPULIMIT=120
限制cpu$CPULIMIT秒
限制核心0
#输入文件
设置输入=(stx1230.txt\
ecoli2500.txt\
ecoli3000.txt\
ecoli5000.txt\
ecoli7000.txt\
ecoli8000.txt\
ecoli9000.txt\
ecoli10000.txt)
#根据需要进行调整
设置inputpath=`pwd`
#打印页眉
printf“CPU限制=%d秒\n\n”$CPULIMIT
printf“%-25s”数据文件
foreach程序($argv)
printf“%16s”$程序
结束
printf“\n”
#为表格打印正确的数量=个
@i=25+16*$#argv
而($i>0)
printf“=”
@i=$i-1
结束
printf“\n”
#计时并打印每个数据文件的行和每个程序的列
foreach数据文件($input)
printf“%-25s”$datafile
如果(-f$inputpath/$datafile),则
foreach程序($argv)
#在数据文件上打印程序的运行时间
#-带有时间的p标志,以确保其输出以秒而不是分钟为单位进行测量
nice/usr/bin/time-p$program<\
$inputpath/$datafile |&\
egrep“^user[]*[0-9]”\
awk'{if($2>='$CPULIMIT')printf“CPU限制”;else printf(“%16.2f”,$2)}'
#egrep、awk命令提取与用户时间对应的行的第二列
结束
else printf“无法打开”$datafile
恩迪夫
printf“\n”
结束
这里是editdestance.java
import java.util.*;
class EditDistance {
public static int min(int a, int b, int c) {
return Math.min(a,Math.min(b,c));
}
public static int distance(String one, String two) {
if (one.length()>two.length()) {
String temp1 = one;
String temp2 = two;
one = temp2;
two = temp1;
}
int[][] d = new int[one.length()+1][two.length()+1];
d[0][0] = 0;
int top, left, topleft, cost;
for (int i = 1; i <= one.length(); i++) {
d[0][i] = 2*i;
d[i][0] = 2*i;
}
for (int i = 1; i <= one.length(); i++) {
for (int j = 1; j <= two.length(); j++) {
if (one.charAt(i-1) == two.charAt(j-1))
cost = 0;
else
cost = 1;
top = d[i][j-1];
left = d[i-1][j];
topleft = d[i-1][j-1];
d[i][j] = min(top+2,left+2,topleft+cost);
}
}
return d[one.length()][two.length()];
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String one = scanner.next();
String two = scanner.next();
System.out.println(distance(one,two));
}
}
import java.util.*;
类编辑距离{
公共静态最小整数(整数a、整数b、整数c){
返回Math.min(a,Math.min(b,c));
}
公共静态整数距离(字符串1、字符串2){
如果(一个.length()>两个.length()){
字符串temp1=1;
字符串temp2=2;
1=temp2;
2=temp1;
}
int[][]d=newint[one.length()+1][two.length()+1];
d[0][0]=0;
int top,left,top left,cost;
对于(int i=1;i我不确定环境的状态(例如:PATH)或文件和权限的状态是什么,但这可能很简单,就像sequence shell脚本的权限问题一样(我想您是说它包含“java EditDistance”)。如果您使用“chmod+x sequence”,它是否有效?另一个问题是它可能不在您的路径中,您可以通过键入“./sequence我不确定环境的状态(例如:path)或者文件和权限的状态是,但它可以像sequence shell脚本的权限问题一样简单(我想您是说它包含“java EditDistance”)。如果您使用“chmod+x sequence”,它是否有效?另一个问题是它可能不在您的路径中,您可以通过键入“./sequence已修复。问题出现在这里:
nice /usr/bin/time -p $program <
nice/usr/bin/time-p$program<
在脚本中。如果命令前没有“/”,我的计算机不会执行shell脚本。我的计算机必须不同。将脚本更改为
nice /usr/bin/time -p ./$program <
nice/usr/bin/time-p./$program<
程序运行得很好
我确信我的教授和我都在使用Fedora 8。如果我只需输入程序的名称就可以在终端上运行程序,那会有什么不同呢?已修复。问题在于:
nice /usr/bin/time -p $program <
nice/usr/bin/time-p$program<
在脚本中。如果命令前没有“/”,我的计算机不会执行shell脚本。我的计算机必须不同。将脚本更改为
nice /usr/bin/time -p ./$program <
nice/usr/bin/time-p./$program<
程序运行得很好
我确信我的教授和我都在使用Fedora 8。如果我只需输入程序名,就可以在终端上运行程序,那会有什么不同呢?/sequencenice /usr/bin/time -p ./$program <