質問

いテーブルマDBのリスト。いリストを作成するランダムに仲間が毎日です。

という考え方ですが毎日全ての人がペアになり、チームティーチングの異なるランダムの人た。

以降、テーブルが非常に大きいのかと思って池尾:そういうふうに考えていないというようなこんなことをしたのだろう。

のあり方を考える2自分のアイディアを思いついている。

1)を使用していた乱数ジェネレータをランダムに持つidを持っています。の問題があるのは、常に確認しないという、というリストの最後にこれを実現。

2)一つ一つにんし、さらにその下のリストは、単なる移動とのことで毎日までの下での湿ポイントができます。

その他の考えになりますか。

感謝

役に立ちましたか?

解決

おそらくあなたは、ランダムにテーブルをソートするクエリを作ることができ、その後、ちょうど上から下に人をペアリング。最初のエントリがそのように第四とを有する第二、第三と対にされます。

SQL Serverの例:

SELECT * FROM Table ORDER BY NEWID()

他のヒント

それは本当にありません、ハード、ランダム・ジェネレータを使用することは本当に遅いではありませんが、あなたは非常に不運であれば、時間複雑性はOになる(N ^ 2)になると最良のケースでは、あなたがそのように行う方法O(1)、 ?

しかし、ちょうど二人を結ぶテーブルを持って、そのIDが速いれoccureかどうかを確認し、それは、ちょうど彼らのIDを追加していない場合は、追加の接続を失いT-SQLを使用します。

私はこの問題は既に解決しました。

  1. したいリストのペアになっています。
  2. いすべてのリペア(毎日)

だけを利用する必要がランダムに機能します。あなただけを生成しなければならないすべてのリストのペアになっています。

ページのWikipedia少ないアルゴリズムの実装する必要があります。

#!/usr/bin/perl -w
use strict;
use warnings;
use Data::Dumper;

sub permutation {
    my ($k, $s) = @_;

    for my $j (1..(@$s-1)) {
        my $n = ($k % $j) + 1;
        ($s->[$n], $s->[$j]) = ($s->[$j], $s->[$n]);
        $k = int($k / $j);
    }
    return $s;
}

for (1..3) {
    my $s = permutation($_, [1,2,3,4]);
    my ($a, $b, $c, $d) = @$s;
    print "$a\t$b\n";
    print "$c\t$d\n";
    print "------\n";
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top