忍者ブログ
不定期に気が向いたら更新します
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。


 さぁ、調子に乗って2連投。
なんでか?やらなければいけない時に限って、こんなことがしたくなるんですorzなんにもやることがないときはボーっとしてるんですけどね。


・・・


これ投稿したら、ネタがなくなるなぁ・・・。


※WINAPIの状況はこの次になりますかね・・・。

 初めはよくわかりませんでした。っといっても、厳密には現在も理解はできていないと思います。
 ハッシュ関数はデータ構造の一種です。構造を簡単にいえば、

あるデータから得られるキーを元に、データを格納していく

ってな感じです。キーを得るためにはハッシュ関数という関数にデータを渡し、返ってくる値がいわゆる「キー」となります。このキーをハッシュ値と言います。キーを得たら、データを格納します。格納する入れ物をハッシュテーブルまたはハッシュ表といい、挿入先をスロットといいます。プログラミングでいう配列と考えれば早いですね。
ここでいきなり疑問が出ますね。

キーが重なったらどうすればいいの?


これを回避するにはいろいろありますが、以下の二つが代表的です。(らしいです。)
  • 内部ハッシュ
ハッシュ値が衝突したら、もう一度ハッシュをかけ、次の要素を見に行く方法です。それを要素が空になるまで繰り返します。初回以降のハッシュ値の導出はユーザーが決めます。
  • 外部ハッシュ
ハッシュ値が衝突したら、そのスロット内のリスト構造に挿入します。正直、これはかなりデータに左右されそうな気がします。もしかしたら、すべてのデータが同じリストにつながってしまうかもしれないですしね^^;


かなり詳細をハショリましたが^^;(あまり詳しく言うとぼろが出そうなので・・・。ってもう出てますね・・・。きっとorz)さて、これを踏まえたうえで、データをハッシュで管理してみようと思います。自分が考えたのは、

内部ハッシュと外部ハッシュのいいとこを掻い摘んだらいいのでは?

と思いました。外部ハッシュでは、スロットにいきなりリストがあり、リスト化しますが、そうではなく、またハッシュテーブルを持ったらどうでしょう?ハッシュテーブルに深さを持たせるのです。最後のハッシュテーブル(二分木でいう葉)にはリストを持たせるんです。一つハッシュ関数を通して、深さが1つ深くなる・・・これはどうだろうかと考えました。もちろん、ハッシュテーブル、深さ、ハッシュ関数はユーザーが決めることができるようにします。また、メモリを無駄に消費しないため、ハッシュテーブルは動的確保します。(挿入したいハッシュテーブルが存在しなければ確保)
以上の考え方を以下の図に示します。(わかりづらい・・・)
4558fb23.png


今回は、このデータ構造を用いて、テキスト内にでる英単語をカウントするプログラムを作ることを目的とします。大文字、小文字比較はしません。条件として、「'」、「-」でつながれた単語は一単語とみなします。それ以外の、数字、記号文字等は入力の段階ではじかれます。

こんな条件のもと、C言語を用いて、ハッシュをプログラム化しました。わかりづらいですかね^^;

さて、結果はどうなるのでしょうか。それは次に回します。
ここまで読んでいただきありがとうございました。
・・・でも大した結果は得られず終了しt・・・(ry
PR

Comment
Name
Title
Mail
URL
Comment
Pass   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
この記事へのトラックバック
この記事にトラックバックする:
[27] [26] [25] [24] [23] [22] [21] [20] [19] [18] [17
«  Back :   HOME   : Next  »
カレンダー
03 2024/04 05
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
フリーエリア
最新コメント
[11/16 kazuoni(管理人)]
[11/16 Justy]
[11/15 kazuoni(管理人)]
[11/15 Justy]
[11/15 Justy]
最新記事
最新トラックバック
プロフィール
HN:
kazuoni
年齢:
35
性別:
男性
誕生日:
1988/05/06
職業:
大学生
趣味:
プログラミング
自己紹介:
全体的に無気力な人です。
物事に対して取っ付きはいいです。
でも飽きやすいです。
そんな人です。
バーコード
ブログ内検索
最古記事
(12/03)
(12/10)
(12/13)
(01/07)
(02/02)
忍者ブログ [PR]