-9

PHPで2つの数字の組み合わせから一意の数字を生成する方法は? たとえば、これら 2 つの数字の組み合わせ。68 と 73 は X を生成します ( X は固有の番号です)。組み合わせ番号の順序は関係ありませんが、同じ一意の番号を生成する必要があります。例: (68,73)=X または (73,68)=X または (1,2)=Y または (2,1)=Y の組み合わせ、Y は (一意であるため) X とは異なる数値です。

さらに情報が必要な場合はお知らせください。

この問題は私の問題と似ていると思いますが、C# で書かれています。

このコードを PHP に変換しました:

function getUnique($x, $y){
  if($x>$y){
    return $y | $x << 32;
  }  else{
    return $x | $y << 32;
  }
}

$list = array();
for($i=0 ; $i<100 ;$i++){
  $x = rand(1,10); // I just put any random numbers from 1 to 10 so that I can read it easily.
  $y = rand(1,10);
  $unique = getUnique($x, $y);
  $list[$i] = '('.$x.','.$y.')='.$unique;
 }

//Find out the results
foreach($list as $ans){
   echo $ans.'<br>';
}

ただし、一意の番号は生成されません。この結果の例:

(2,9)=11

(10,1)=11

(2,9) は (10,1) とは異なる数値を生成する必要があります。

4

1 に答える 1

2

いいえ、少なくとも一般的にはそうではありません (ただし、いくつかの制限を指定した場合はあるかもしれません)。

nビットの型を仮定すると、2 nの可能な値があります。しかし、可能な値のペアは 2 2nあります。明らかに、ペアから値への一意のマッピングはありません。

もちろん、入力タイプよりも幅の広い出力タイプを使用する準備ができている場合、これは簡単です。

于 2012-05-20T03:03:32.543 に答える