5

この質問は、インタビュー中に私に与えられました。インタビューはとうに終わりましたが、私はまだ問題について考えていて、それが私を悩ませています:

次のツールを含む言語があります:rand()関数、whileループforifステートメント、およびreadline()メソッド (python の に似ていますreadline())。これらのツールを使用して、ランダムな行をファイルに返すアルゴリズムを作成します。ファイルのサイズがわからず、ファイルの内容を 1 回しかループできません。

4

3 に答える 3

7

望ましい答えはわかりませんが、私の解決策は次のとおりです。

chosen_line = ""
lines = 0

while (current_line = readline()):
    if (rand(0, lines) == 0):
        chosen_line = current_line

    lines++

return chosen_line

編集:これが機能する理由の良い説明がこのコメントに投稿されました。

于 2012-08-02T19:19:38.890 に答える
0

一様分布を保証する 1 つの方法:

(1)ファイルを1行ずつ配列に読み込みます(または同様の例、 python list

(2) rand()0 から配列内の最大インデックスまでの数値を選択するために使用します。

もう1つは、均一な分布を保証するものではありません:

各行を読みます。読み取りごとに、rand() も呼び出します。しきい値を超えている場合は、行を返します。

于 2012-08-02T19:19:30.487 に答える
-1

Marcin の 3 番目のオプションと似ていますが、Luc の実装は、ファイル全体を解析している間、常に最初の行を返します。

次のようになります。

chosen_line = ""
treshold = 90 
max = 100

while chosen_line == "":
    current_line = readline()
    if (rand(0, max) > treshold):
        chosen_line = current_line

print chosen_line

行が選択されておらず、ファイル全体を読み取った場合は、 current_line を返すこともできます。

于 2012-08-02T19:34:22.857 に答える