2012-03-14 7 views
0

楽しいので、私は暗号文が約75文字で与えられた古い大学の課題と、メッセージが3文字で署名されたベビーベッドを頭に入れました。私がやった私の先生)どちらが速いですか? Pythonのキャストとサブトラクション、またはディクテーションルックアップ

  1. は、それらのパーツを持っているものやベビーベッドの全ての結果を下縁縫い。
  2. 次に、私は(1)の結果のより小さいサブセットについて手紙頻度分析を始めました。

ここでは、いくつかの言語認識ソフトウェアの作成が始まりますが、最初に対処するいくつかの問題があります。私はすべてのローター設定(タイプ、初期ポジション) を強制的に強制的に選択しました。結果として、ベビーベッドの一部または全部がまだプラグボードから交換された文字を持っていました。

私は次の動きが2つの行列を作成してコーパスを消化する必要があることを知っています。最初の行列では、最初の文字がAの場合、最初の行列では行0、そして私が増加する列は、Aの直後の文字になります。それはBでした。そして、私はBに移動し、次の文字がUであることを確認して、行Bに行き、列Uの項目。コーパス全体を消化した後、確率を2番目の行列に入れます。

2番目の行列を使用して、文全体にスコア値を割り当て、出力をスコアリングし、さらに結果を控除する手段を持っているので、メッセージを見つけることは、小さな小さな乾草のピンを見つけるのが簡単なはずです。

私はこれをPythonでやっていますが、charsをintにキャストして、最小のchar 'A'を減算し、それをインデックスとして使用するか、 dictとすべての文字はint値に対応するので、私の行列内の位置のインデックスを見つけることはLetterTally[dict['A']][dict['B']]のようになります。

キャストサブトラクション法は、次のようになります。より高速であることを行っているこれら二つの異なる方法の

firstChar = 'A' 
secondChar = 'B' 

LetterTalley[(ord(firstChar)-ord('A'))][(ord(secondChar)-ord('A'))] 

+3

自分で作成してください。 – Marcin

+5

自分で測定してみませんか? Pythonは便利なモジュール[timeit](http://docs.python.org/library/timeit.html)を提供しています。 –

答えて

1

マトリックスを構築する代わりに、参照(LetterTally['A']['B'])を直接行うことができるように、dictsのdictを持つことを検討しましたか?

+0

それは私の心を越えていない。私はこれをさらに詳しく見ていきます。それでもなお、質問は残っています。キャストしたり引いたり、または辞書検索を行う方がよいでしょうか? – user1268899

+0

後で考えてみましょう。配列検索は、辞書検索より高速ではありませんか? – user1268899

関連する問題