だから、私の友人の一人が言ったように、彼の車のハンドルをつかんで、行こう。
まず、練習するテキストが必要です。 私たちの古典の3つの文学作品を選びました。レオ・トルストイの「戦争と平和」、ミハイル・ショロホフの「静かなドン」、ミハイル・ブルガコフの「マスターとマルガリータ」。 これらの作品はなぜですか? 学校で読んだのは最初の2つだけで、「マスターとマルガリータ」と妻と私はテレビで見たので、このトピックに少し精通しています。
ここで、アルファベットの各文字の量と文字の総数を何らかの方法で計算する必要があります。 これを行う方法? たとえば、私の上司のように、最も簡単な方法で進むことができます。 これを行うには、図書館に行き、「戦争と平和」を4巻取り、家に帰って手紙の変換を行い、残りの本で同じことを行う必要があります。 もちろん、これには長い時間がかかりますが、私の上司は非常に勤勉な人であり、彼には部下もいます。 あなたは彼らにそれを与えることができます、彼らが数えないならば、または間違いを犯します-私は彼らに賞を奪います。
私はすぐにこの方法が気に入らなかったので、私たちのためにすべての仕事をするプログラムを書くことにしました。 以下は、perlで書かれたプログラムのコードです。 テキスト内の文字の総数と、アルファベットの各文字の数とその割合を計算します。
use strict;
use locale;
use POSIX qw (locale_h);
setlocale(LC_CTYPE, 'ru_RU.CP1251');
setlocale(LC_ALL, 'ru_RU.CP1251');
my @letters = qw( );
my @out = qw(0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0);
open (TEXT, "<text.txt");
my $sum = 0;
while (defined(my $char = getc(TEXT))) {
if (uc($char) eq "") {$char = ""}
for(my $i=0; $i<@letters; $i++) {
if(uc($char) eq $letters[$i]) {$out[$i]++; $sum++;}
}
}
open(OUT, ">out.txt");
print OUT " - $sum\n\n";
for(my $i=0; $i<@out; $i++) {
print OUT "$letters[$i] - $out[$i] (".($out[$i]/$sum*100)."%)\n";
}
明確にするために、Excelで受信データをわずかに変更しました。
![画像](http://s48.radikal.ru/i121/1004/2d/aea4da20e29d.gif)
ことわざにあるように、結果は明らかです。 ロシア語のアルファベットの最も人気のある文字は「O」であり、5つは「O」、「A」、「E」、「I」、「H」のように見えます。
今、最も重要な質問に答えることが残っています。 なぜこれがすべて必要なのですか?
たとえば、この情報は、Leonid Yakubovichが任意の5文字を開くことができる場合に使用できます。 あなたは今、どの文字が呼ばれるべきか知っていると思いますか?
しかし、真剣に言えば、文字の出現頻度を見つけることは、想像するよりもはるかに頻繁に使用されます。 このタスクは、多くの最新のデータ圧縮プログラムで使用されるハフマンアルゴリズムの一部です。