2
3

More than 5 years have passed since last update.

ハッシュテーブルと二分木について調べたこと

Last updated at Posted at 2018-03-10

はじめに

ハッシュテーブルと二分木について、色々と調べたのでまとめた。

アルゴリズム関連では、以下の記事も参考にしてください。
①計算量とソートの基本
②実用的なソート
③探索
④再帰関数

ハッシュテーブルと二分木ってなに?

ハッシュテーブル(hash table)

ハッシュテーブルはm個の要素を格納できる配列T(画像でいうと、hashes)と、データのキーを決定するハッシュ関数(hash functions)から構成されます。

ハッシュ関数へ入力するキーは整数である必要があるため、キーが文字列である場合は対応する整数へ変換する必要があります。

例えば、ハッシュ関数として$h(k)=k~mod~m$などを用いることができます。
ただ異なるキーが同じハッシュ値となる衝突が起きる可能性があるので、それを解決する方法が二つあります。

  1. オープンアドレス法
  2. チェイン法

英語のwikipediaにわかりやすい説明が載っていたので、そちらを参考にしてください。

1のチェイン法は、衝突を起こしたキー同士を連結リストで繋いで格納する方法です。

2のオープンアドレス法は衝突が起きると、テーブルの中で空いている別の位置を探す方法で、ハッシュ関数とは別のハッシュ関数を用いて、次の位置を探していきます。

ハッシュテーブルにおいては、衝突が起きなければ$O(1)$で挿入や探索を行うことができます。

参考

What is a HashTable Data Structure - Introduction to Hash Tables , Part 0 - YouTube
ハッシュ法

二分木(binary tree)

二分木とは根付きの木構造で、ノードの持つこの数が高々2であるものを指します。
計算量が常に$logn$になるというのが特徴です。

  • ハッシュテーブほどメモリの確保が要らない。
  • ハッシュ関数を考えずに、済む。

などのメリットがあります。
ただ木のバランスが取れておらず、片方が長くなると、計算量は$O(n)$に近づくため、左右のバランスをとる平衡木などが考案されています。回転、などの手法によって実現されます。

参考

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3