skillup

技術ブログ

プログラミング全般

データ構造の基礎知識 中編 ハッシュ

投稿日:2016年3月24日 更新日:

前回の続きです。

前回は配列、連結リストについて学習したので今回はハッシュについて学習します。

ハッシュとは?

key-value型のデータ構造であり、以下のような特徴を持ちます。

  • 引数を1つ与えると数値の戻り値を1つ返す
  • 同じ引数を与えた場合は必ず同じ値を返す
  • 別の引数を与えた場合はなるべく違う値を返す(理論上、同じ値をとる可能性がある)

どのようにkeyと値を管理するのか?

  1. あらかじめ配列を用意する
  2. keyを入れるとある数字を返す関数を内部で用意する
  3. keyによって変換された数字(例えば8)と対応する配列の場所(8番目)に値を入れる

ここの説明がわかりやすい
わわわIT用語辞典 ハッシュテーブル (hash table)

メリット

ある値への計算量がO(1)になる※厳密には違うが大体O(1)

デメリット

順番が保持されない

対策としてはkey自体が格納される連結リストを作っておき、順番を保持する。

衝突があり、再計算の必要がある。(リンク参照)

-プログラミング全般

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

テストのダミーデータ作成

データベースに大量のデータを作りたいときにいつもあああやhoge,aaaですとデータという感じがしないですし、抽出や集計ができません。 なるべく自然に近いデータが欲しいのですが、簡単に作れる方法があり …

no image

Excelでのテストデータ作り

ExcelVBAでテストデータを作るときに役に立った関数などを紹介させていただきます。 user_id time 2143 2017/1/16 3:35 6724 2017/1/2 6:05 4528 …

no image

小〜中規模程度のWEBアプリ作成で気をつけるべきこと

初見の処理系(ライブラリ操作)などは休日などで最小パターンを確認しておくこと。実務で何時間も悩むと非常にストレスがたまる テーブル設計命。あとで終えるようにトレースができるような値を入れておくこと。 …

no image

ユーザーに見せるエラーメッセージに関する考察

プログラムで難しいことの3つは テスト ログ エラーハンドリング とかいてきましたが、ユーザー側に見せるエラーメッセージについて考察して見ました。 Contents1 ログとエラーメッセージの違い2 …

no image

コレクションの頻出処理に関して

PHPでコレクションを使っていますが、慣れると本当に便利ですね・・・まあforeachとかでグリグリやってもいいのですが、無駄にコードが長くなります。 自分がコレクションでよく使う再頻出のメソッドなど …

アーカイブ