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

コードの見た目について

リーダブルコード4章。コードの見た目について。 自分は結構注意されますね。多いパターンとしては空白の位置などがいい加減だったり、今はありませんが、以前はコードの末尾にスペースを空けてセミコロンをうつ変 …

no image

エラーレポーティングサービス Sentryについて

リリースした後、運用段階に入ると定期的にバグ報告が上がってきます。 本来はリリース前に研修テストをすべきなんですが、そんな余裕ないことも多い(汗) で、そんな時に大事なのが エラーを気づけること 対処 …

no image

フォームの処理について

本日はフォームの処理に関して。主に一覧検索画面のフォームについてです。 フレームワークでフォームの処理をする場合、変数の初期値やバリデーションなどをあらかじめ読み込むオブジェクトを設定しておき、変数が …

no image

シェル基礎2

シェルコマンド使い始めて数年たちますが、いまだに知らないことはおおいですし、早く知っとけばよかった的なこともたくさんあります。 そんな小ネタ集を alias よく使うコマンドを別名で登録することができ …

no image

変数の役割について

前回のエントリーの主眼は変数を置くことで、適切な情報量に分割し、コードを読みやすくしよう、ということでした。 今回はそれとは少し逆の観点でして、不要な変数を削除して、コードを読みやすくしよう、というこ …