免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1710 | 回复: 3
打印 上一主题 下一主题

程序效率较低,如何提高呀! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-10-08 15:40 |只看该作者 |倒序浏览
程序效率低的可怕,如何提高一下呢,是不是这样随机是有问题的。大家提点意见!

#!/bin/perl

use strict;

my @x;
my $count = 0;
open OF, ">;hapresult.csv" or die("cannot write file!\n";
print OF ("x1,x2,x3,x4,x5,x6,x7,x8,r1,r2,r3,a1,a2,a3,a4,a5,a6,a\n";
while($count < 10){ #产生8个小于1的随机数;
  my $sum = 0;
  for my $i(0 .. 7) {
    $x[$i] = rand();
    $sum += $x[$i];
  }
  $x[$_] /= $sum  foreach (0 .. 7);
  my $r1=(($x[0]+$x[1])*($x[6]+$x[7])-($x[2]+$x[3])*($x[4]+$x[5]))*(($x[0]+$x[1])*($x[6]+$x[7])-($x[2]+$x[3])*($x[4]+$x[5]))/(($x[0]+$x[1]+$x[2]+$x[3])*($x[4]+$x[5]+$x[6]+$x[7])*($x[0]+$x[1]+$x[4]+$x[5])*($x[2]+$x[3]+$x[6]+$x[7]));
  my $r2=(($x[0]+$x[4])*($x[3]+$x[7])-($x[2]+$x[6])*($x[1]+$x[5]))*(($x[0]+$x[4])*($x[3]+$x[7])-($x[2]+$x[6])*($x[1]+$x[5]))/(($x[0]+$x[4]+$x[2]+$x[6])*($x[1]+$x[5]+$x[3]+$x[7])*($x[0]+$x[4]+$x[1]+$x[5])*($x[2]+$x[6]+$x[3]+$x[7]));
  my $r3=(($x[0]+$x[2])*($x[5]+$x[7])-($x[1]+$x[3])*($x[4]+$x[6]))*(($x[0]+$x[2])*($x[5]+$x[7])-($x[1]+$x[3])*($x[4]+$x[6]))/(($x[0]+$x[2]+$x[1]+$x[3])*($x[4]+$x[6]+$x[5]+$x[7])*($x[0]+$x[2]+$x[4]+$x[6])*($x[1]+$x[3]+$x[5]+$x[7]));
  
  
   if ($r1 >; 0.7 and $r1 <0.8 and $r2 >; 0.7 and $r2 <0.8 and $r3 <$r1 and $r3 <$r2){
    $count++;
        my $A1=$x[0]/($x[0]+$x[2])-$x[1]/($x[1]+$x[3]);
    my $A2=$x[0]/($x[0]+$x[2])-$x[4]/($x[4]+$x[6]);
    my $A3=$x[1]/($x[1]+$x[3])-$x[4]/($x[4]+$x[6]);
    my $A4=$x[0]/($x[0]+$x[2])-$x[5]/($x[5]+$x[7]);
    my $A5=$x[1]/($x[1]+$x[3])-$x[5]/($x[5]+$x[7]);
    my $A6=$x[4]/($x[4]+$x[6])-$x[5]/($x[5]+$x[7]);
        my $a1=abs($A1);
    my $a2=abs($A2);
    my $a3=abs($A3);
    my $a4=abs($A4);
    my $a5=abs($A5);
    my $a6=abs($A6);
        ($a1,$a2,$a3,$a4,$a5,$a6)=sort($a1,$a2,$a3,$a4,$a5,$a6);
    my $a=$a6;
   print OF $x[$_], ($_ == 7 ? ",$r1,$r2,$r3,$a1,$a2,$a3,$a4,$a5,$a6,$a,\n" : ","  foreach (0 .. 7);
  }
}
close(OF);

论坛徽章:
0
2 [报告]
发表于 2005-10-08 15:56 |只看该作者

程序效率较低,如何提高呀!

主要是logic上问题多点吧,这里:
  1. if ($r1 >; 0.7 and $r1 <0.8 and $r2 >; 0.7 and $r2 <0.8 and $r3 <$r1 and $r3 <$r2){
  2.    $count++;
复制代码


如果满足不了条件的话,$count就不会自增,那循环就很久都退不出呀。
你看看是否这个问题,

论坛徽章:
0
3 [报告]
发表于 2005-10-08 16:33 |只看该作者

程序效率较低,如何提高呀!

谢谢,兰花仙子,是这的问题,这正是我要计算的部分。我说的是,可能在随机数产生上面,算法可能效率较低。这一部分是不能改变的。不过形式可以改变,看看有什么方法可以解决吗,另外还请你关注一下,我另一个帖子。在后面呢,看看能帮忙吗。

论坛徽章:
0
4 [报告]
发表于 2005-10-08 16:49 |只看该作者

程序效率较低,如何提高呀!

[quote]原帖由 "joson12345"]谢谢,兰花仙子,是这的问题,这正是我要计算的部分。我说的是,可能在随机数产生上面,算法可能效率较低。这一部分是不能改变的。不过形式可以改变,看看有什么方法可以解决吗,另外还请你关注一下,我另一个帖子。..........[/quote 发表:


你的算法固定了,形式有什么好改变的?
rand()是最简单的随机数产生方法呀,也没问题的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP