2011-07-18 17 views
1

私は次のことを行うための最善の方法を把握しようとしている:私は、値のリスト持って
:L
私はこのリストのサブセットを選択したいのですが、サイズNのを、そしてX分ごとに異なるサブセット(リストに十分なメンバーがある場合)を取得します。
すべての値が使用される限り、値を順番に、またはランダムに選択したいと思います。時間ベースの回転

例えば、私はリストがあります:[google.com, yahoo.com, gmail.com]
を私は値(この例では2)Xを選択したい、すべてのY(今の60)分、それらの値を回転させたい:

分0-59 :[google.com, yahoo.com]
分60から119:[gmail.com, google.com
分120から179:[google.com, yahoo.com]
など

ランダムピッキングでも結構です、すなわち:
分0-59:[google.com, gmail.com]
分60から119:[yahoo.com, google.com]

注:ユーザーが回転まで、すなわち、0点は、任意の時点であってもよいが設定した場合の時間エポックは0でなければなりません。 最後に、可能であれば、「使用済み」の値などを保存しないことをお勧めします。つまり、私はこれをできるだけシンプルにしたいと思っています。

ランダムピッキングは、実際にはシーケンシャルよりも優先されますが、どちらでも問題ありません。 これについてはどのような方法が最適ですか? Python /擬似コードまたはC/C++は問題ありません。

ありがとうございました!

答えて

1

あなたは助けるためにitertools標準モジュールを使用することができます。

import itertools 
import random 
import time 

a = ["google.com", "yahoo.com", "gmail.com"] 
combs = list(itertools.combinations(a, 2)) 
random.shuffle(combs) 
for c in combs: 
    print(c) 
    time.sleep(3600) 

EDIT:コメントで、あなたの明確化に基づいて、以下の提案が役立つかもしれません。

あなたが探しているのは、[0、N]の範囲内の整数の最大長シーケンスです。整数nと(n保証これよりpが大きい作り、nの要因ではない)素数pを考えると、あなたがのシーケンスを取得します

def modseq(n, p): 
    r = 0 
    for i in range(n): 
     r = (r + p) % n 
     yield r 

:あなたはのようなものを使ってPythonでこれを生成することができます0 -1 nまでのすべての整数は:

>>> list(modseq(10, 13)) 
[3, 6, 9, 2, 5, 8, 1, 4, 7, 0] 

そこから、設定1ビット(提案のためBest algorithm to count the number of set bits in a 32-bit integer?を参照)、所望の数が含まれている整数のみを含めるには、このリストをフィルタリングすることができます。あなたのケースでは、あなたのケースでは、あなたのセットの要素の数がNならば、nを2 Nとして使用するでしょう。

このシーケンスは、時間T(シーケンス内の位置を見つけることができる)、N個の要素、および素数Pを仮定すると決定論的です。

+0

値は複数の言語からアクセスされるので、組み合わせの結果を保存してX秒ごとに回転させない限り、これはうまくいきません。 –

+1

申し訳ありませんが、わかりませんあなたは "複数の異なる言語からアクセス"を意味します。 *プログラミング*言語や*話された*言語を意味しますか? 「アクセスした」とはどういう意味ですか? –

+0

私はプログラミング言語を意味します。 LはDBで利用可能であり、C++のプログラムとPythonのプログラムで読み込まれます。同じ回転時間、エポック、サブセットサイズを指定すると、同じサブセットを返すことができます。私は現在モジュロ演算を使用することを計画していますが、SOがもっと良いものを持つことを望んでいました。 –

関連する問題