Java最下位実装チェーンテーブルと二分探索ツリーに基づくSet集合
10946 ワード
セット
チェーンテーブルと二分探索ツリーに基づく
文書ディレクトリ1、集合とは何か 2、集合クラスの実現——チェーンテーブル に基づく 2.1、インタフェース関数実現 2.2、基本操作関数 2.3、増加元素 2.4、削除要素 2.5、クエリー要素 3、集合クラスの実装-二分探索ツリー に基づく 3.1、基本操作関数 3.2、増加元素 3.3、削除要素 3.4、クエリー要素 4、時間複雑度分析 最後の 1、集合とは何か
数学的には、1つ以上の決定された要素からなる全体として定義される.しかし、コンピュータの分野では、集合は1つ以上の異なる要素からなる全体として定義される.すなわち,1つの集合の中の要素はすべて異なる.
これはこのような特性のためであり,比較的古典的なのは言語統計に用いられる.1つの文章にどれだけの語彙が使われているかを調べ,ユーザの読解難易度係数を判断する.
2、集合クラスの実現——チェーンテーブルに基づく
スタックやキューと同様に、他のデータ構造に基づいてクラスをカプセル化します.集合に関するインタフェースが必要ですチェーンテーブルの下部をカプセル化したため,具体的な関数法はLinkedListチェーンテーブルという文章を見ることができる.
2.1、インタフェース関数の実現
具体的な関数法は依然として4つの操作を追加削除して調べる.ここでは、インデックスの概念に関連していないため、操作を変更することはできません.インタフェース関数の実装:
2.2、基本操作関数
以前にチェーンテーブルの下部をカプセル化したため、具体的な関数方法はLinkedListチェーンテーブルという文章を見ることができます.
プログラム実装:
2.3、元素を増加する
プログラム実装:
2.4、要素の削除
プログラム実装:
2.5、クエリー要素
プログラム実装:
3、集合クラスの実現——二分探索ツリーに基づく
我々は以前にチェーンテーブルの下部をカプセル化したので,具体的な関数法はBST二分探索ツリーという文章を見ることができる.
3.1、基本操作関数
3.2、元素を増やす
プログラム実装:
3.3、要素の削除
プログラム実装:
3.4、クエリー要素
プログラム実装:
4、時間複雑度分析
私たちは上から見ることができて、私たちのこれらの方法はすべてとても紹介して、これも私たちの底のパッケージが良いためです.
要素を追加
要素の削除
クエリー要素
チェーンテーブル
O(N)
O(N)
O(N)
にぶんたんさくじゅ
O(log(N))
O(log(N))
O(log(N))
ここでは、チェーンテーブルに要素を追加するのはO(1)の複雑さではないかと聞くことができますが、実はそうではありません.それは、集合というデータ構造の中で、要素が重複しないことを保証する必要があります.まずチェーンテーブルを遍歴する必要があるので、複雑度はO(N)レベルです.
したがって,下位層の二分探索ツリーの性能はチェーンテーブルの実現よりはるかに高いことが表で分かる.
最後に
総じてこのようなデータ構造の集合は比較的簡単である.
もっとすばらしい内容、みんなは私のホームページに回ることができます:曲怪曲怪のホームページ
あるいは私の微信の公衆番号に注目します:TeaUrn
ソースアドレス:公衆番号内でデータ構造とアルゴリズムのソースコードを返信することができます.
チェーンテーブルと二分探索ツリーに基づく
文書ディレクトリ
数学的には、1つ以上の決定された要素からなる全体として定義される.しかし、コンピュータの分野では、集合は1つ以上の異なる要素からなる全体として定義される.すなわち,1つの集合の中の要素はすべて異なる.
これはこのような特性のためであり,比較的古典的なのは言語統計に用いられる.1つの文章にどれだけの語彙が使われているかを調べ,ユーザの読解難易度係数を判断する.
2、集合クラスの実現——チェーンテーブルに基づく
スタックやキューと同様に、他のデータ構造に基づいてクラスをカプセル化します.集合に関するインタフェースが必要ですチェーンテーブルの下部をカプセル化したため,具体的な関数法はLinkedListチェーンテーブルという文章を見ることができる.
2.1、インタフェース関数の実現
具体的な関数法は依然として4つの操作を追加削除して調べる.ここでは、インデックスの概念に関連していないため、操作を変更することはできません.インタフェース関数の実装:
public interface Set<E> {
void add(E e);
void remove(E e);
boolean contains(E e);
int getSize();
boolean isEmpty();
}
2.2、基本操作関数
以前にチェーンテーブルの下部をカプセル化したため、具体的な関数方法はLinkedListチェーンテーブルという文章を見ることができます.
プログラム実装:
@Override
public int getSize() {
return linkedList.getSize();
}
@Override
public boolean isEmpty() {
return linkedList.isEmpty();
}
2.3、元素を増加する
プログラム実装:
@Override
public void add(E e) {
if (!linkedList.contains(e)) //
linkedList.addFirst(e); //
}
2.4、要素の削除
プログラム実装:
@Override
public void remove(E e) {
linkedList.removeElement(e);
}
2.5、クエリー要素
プログラム実装:
@Override
public boolean contains(E e) {
return linkedList.contains(e);
}
@Override
public int getSize() {
return linkedList.getSize();
}
@Override
public boolean isEmpty() {
return linkedList.isEmpty();
}
3、集合クラスの実現——二分探索ツリーに基づく
我々は以前にチェーンテーブルの下部をカプセル化したので,具体的な関数法はBST二分探索ツリーという文章を見ることができる.
3.1、基本操作関数
@Override
public int getSize() {
return bst.getSize();
}
@Override
public boolean isEmpty() {
return bst.isEmpty();
}
3.2、元素を増やす
プログラム実装:
@Override
public void add(E e) {
bst.add(e);
}
3.3、要素の削除
プログラム実装:
@Override
public void remove(E e) {
bst.remove(e);
}
3.4、クエリー要素
プログラム実装:
@Override
public boolean contains(E e) {
return bst.contains(e);
}
4、時間複雑度分析
私たちは上から見ることができて、私たちのこれらの方法はすべてとても紹介して、これも私たちの底のパッケージが良いためです.
要素を追加
要素の削除
クエリー要素
チェーンテーブル
O(N)
O(N)
O(N)
にぶんたんさくじゅ
O(log(N))
O(log(N))
O(log(N))
ここでは、チェーンテーブルに要素を追加するのはO(1)の複雑さではないかと聞くことができますが、実はそうではありません.それは、集合というデータ構造の中で、要素が重複しないことを保証する必要があります.まずチェーンテーブルを遍歴する必要があるので、複雑度はO(N)レベルです.
したがって,下位層の二分探索ツリーの性能はチェーンテーブルの実現よりはるかに高いことが表で分かる.
最後に
総じてこのようなデータ構造の集合は比較的簡単である.
もっとすばらしい内容、みんなは私のホームページに回ることができます:曲怪曲怪のホームページ
あるいは私の微信の公衆番号に注目します:TeaUrn
ソースアドレス:公衆番号内でデータ構造とアルゴリズムのソースコードを返信することができます.