2008/5/13 火曜日

PHPで二分探索

Filed under: アルゴリズム — ne-zu @ 23:17:27 このエントリをはてなブックマークに追加

PHPで二分探索(Binary Search)バイナリサーチのアルゴリズムのメモ | Web&MUSICブログ QUALL
二分探索をやられています。基本的なアルゴリズムを再現するのは良い勉強ですよね。

2008/4/24 木曜日

phpで ・重複しない ・ランダムな16桁の数字 を作りたいです。 5万個ぐらい作りたいです。 md5だと英字も入ってしまうし・・・ 良い方法を教えてください。

Filed under: アルゴリズム — ne-zu @ 23:27:46 このエントリをはてなブックマークに追加

phpで ・重複しない ・ランダムな16桁の数字 を作りたいです。 5万個ぐらい作りたいです。 md5だと英字も入ってしまうし・・・ 良い方法を教えてください。 .. - 人力検索はてな

ランダムでユニークな16桁の数字を五万個を出すアルゴリズムが色々とあげられています。どうやるのがベターなんでしょうね。

2007/8/9 木曜日

PHPでハノイの塔

Filed under: アルゴリズム — ne-zu @ 0:36:23 このエントリをはてなブックマークに追加

ITproで丁度ハノイの塔を使った再起の話題が出ていたので、あまりよく理解していなかった私がPHPで例文のハノイの塔を移植&ちょっと理解しやすい形でプログラミングしてみました。

サンプル

PHP:
  1. <html>
  2. <head>
  3. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  4. </head>
  5. <body>
  6. <form action="" method="get">
  7. <input type="text" name="x" />
  8. <input type="submit" />
  9. </form>
  10. <?php
  11. $x = isset($_GET['x']) ? $_GET['x'] : 5;
  12. if (!preg_match('/^[1-9]$/', $x)) $x = 5;
  13.  
  14. $hanoi = new hanoi($x);
  15. $hanoi->view();
  16. $hanoi->exec($x, 'a', 'b', 'c');
  17.  
  18. class hanoi
  19. {
  20.     public $a = array();
  21.     public $b = array();
  22.     public $c = array();
  23.    
  24.     public function __construct($a)
  25.     {
  26.         for ($i = 1; $i <= $a; $i++) {
  27.             $this->a[] = $i;
  28.         }
  29.     }
  30.    
  31.     public function exec($maisu, $a, $b, $c)
  32.     {
  33.         if ($maisu> 0) {
  34.             $this->exec($maisu - 1, $a, $c, $b);
  35.    
  36.             $this->move($a, $c); // $a から $c へ。
  37.             $this->view();
  38.            
  39.             $this->exec($maisu -1, $b, $a, $c);
  40.         }
  41.     }
  42.    
  43.     public function move($from, $to)
  44.     {
  45.         $move = array_shift($this->{$from});
  46.         array_unshift($this->{$to},$move);
  47.         echo ("$from から $to に。<br>");
  48.     }
  49.    
  50.     public function view()
  51.     {
  52.         echo ('+------------------------+<br>');
  53.         echo ('A:');$this->_viewWhole($this->a);
  54.         echo ('B:');$this->_viewWhole($this->b);
  55.         echo ('C:');$this->_viewWhole($this->c);
  56.         echo ('+------------------------+<br>');
  57.     }
  58.    
  59.     private function _viewWhole(array $data)
  60.     {
  61.         for ($i = count($data) - 1; $i>= 0; $i--) {
  62.             echo($data[$i]);
  63.         }
  64.         echo("<br>");
  65.     }
  66. }
  67.  
  68. ?>
  69. </body>
  70. </html>

1~9までの数を入力すれば、それを板の枚数として実行します。

プログラムがどういう動きをするのかよくわからない!という方は、数字を1から2,3,4と段々大きくしながら結果を見ていくと理解しやすいのではないでしょうか。

Powered by PHP-SeeD and WordPress ME