Advertisement
Guest User

Untitled

a guest
Jan 14th, 2012
322
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #euklideszi algoritmus
  2. function gcd([int32]$a,[int32]$b)
  3. {
  4.     $max=if($a -ge $b){$a}else{$b}
  5.     $min=if($a -le $b){$a}else{$b}
  6.    
  7.     while($min -gt 0)
  8.     {
  9.         $mod=$max%$min
  10.         $max=$min
  11.         $min=$mod
  12.     }
  13.    
  14.     return $max
  15. }
  16.  
  17. #ciklikus csoporton alapuló, nem elég jó megoldás
  18. function FirstRandomSequence([int32]$num,[int32]$mod)
  19. {
  20.     [int32[]]$rs=@()
  21.     $step=get-random -maximum $mod
  22.  
  23.     while((gcd $step $mod) -ne 1)
  24.     {
  25.         $step=($step+1)%$mod
  26.     }
  27.  
  28.     $y=get-random -maximum $mod
  29.    
  30.     for($i=0;$i -lt $num;$i++)
  31.     {
  32.         $y+=$step
  33.         $y%=$mod
  34.         $rs+=$y
  35.     }
  36.    
  37.     return $rs|sort
  38. }
  39.  
  40. #intervallum felosztáson alapuló, nem elég jó megoldás
  41. function SecondRandomSequence([int32]$num,[int32]$mod)
  42. {
  43.     [int32[]]$rs=@()
  44.     $left=$mod
  45.     $current=0
  46.  
  47.     for($i=0;$i -lt $num;$i++)
  48.     {
  49.         #$fmax=$left/$num
  50.         #$fmax=$left/2
  51.         #$fmax=$left/($num-$i)
  52.         $fmax=$left*(1-((1/($num-$i))%1))
  53.         #$fmax=$left-$num+$i
  54.        
  55.         $max=[int32]([math]::floor($fmax))
  56.         $random=1
  57.        
  58.         if($max -gt 1)
  59.         {
  60.             $random=get-random -minimum 1 -maximum $max
  61.         }
  62.        
  63.         $left-=$random
  64.         $current+=$random
  65.         $rs+=$current
  66.     }
  67.    
  68.     return $rs|sort
  69. }
  70.  
  71. #ciklikus csoporton és intervallum felosztáson alapuló algoritmus, közelítően jó megoldás
  72. function MyRandomSequence([int32]$num,[int32]$mod)
  73. {
  74.     [int32[]]$rs=@()
  75.     $step=get-random -maximum $mod
  76.  
  77.     while((gcd $step $mod) -ne 1)
  78.     {
  79.         $step=($step+1)%$mod
  80.     }
  81.  
  82.     $left=$mod
  83.     $current=get-random -maximum $mod
  84.  
  85.     for($i=0;$i -lt $num;$i++)
  86.     {
  87.         $fmax=$left*(1-((1/($num-$i))%1))
  88.        
  89.         $max=[int32]([math]::floor($fmax))
  90.         $random=1
  91.        
  92.         if($max -gt 1)
  93.         {
  94.             $random=get-random -minimum 1 -maximum $max
  95.         }
  96.        
  97.         $left-=$random
  98.         $current+=$random*$step
  99.         $current%=$mod
  100.         $rs+=$current
  101.     }
  102.    
  103.     return $rs|sort
  104. }
  105.  
  106. #szokásos, elég jó megoldás (de nem teljes)
  107. function UsualRandomSequence([int32]$num,[int32]$mod)
  108. {
  109.     [int32[]]$rs=@()
  110.    
  111.     for($i=0;$i -lt $num;$i++)
  112.     {
  113.         do
  114.         {
  115.             $random=get-random -maximum $mod
  116.         } while($rs -contains $random)
  117.        
  118.         $rs+=$random
  119.     }
  120.    
  121.     return $rs|sort
  122. }
  123.  
  124. #algoritmusok tesztelésére szolgáló kód
  125. $ertek=@()
  126. $kulonbseg=@()
  127.  
  128. for($i=0;$i -lt 90;$i++)
  129. {
  130.     $ertek+=0
  131.     $kulonbseg+=0
  132. }
  133.  
  134. for($i=0;$i -le 9999;$i++)
  135. {
  136.     $prev=0
  137.     foreach($j in MyRandomSequence 5 90)
  138.     {
  139.         $ertek[$j]++
  140.        
  141.         $kulonbseg[$j-$prev]++
  142.         $prev=$j
  143.     }
  144. }
  145.  
  146. "érték`tkülönbség"
  147. for($i=0;$i -lt 90;$i++)
  148. {
  149.     "{0}`t{1}" -f $ertek[$i],$kulonbseg[$i]
  150. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement