やあ!今日のレッスンは他のレッスンとは少し異なります。Java に間接的にのみ関連するという点で異なります。 とはいえ、このトピックはすべてのプログラマーにとって非常に重要です。アルゴリズムについて話します。アルゴリズムとは何ですか? 簡単に言えば、これは、望ましい結果を達成するために完了する必要がある一連のアクションです。私たちは日常生活でアルゴリズムを頻繁に使用します。たとえば、毎朝、学校または職場に行き、同時に次のことを行うという特定のタスクがあります。
- 着衣
- 綺麗
- FRB
- 目覚まし時計を使って起きます。
- シャワーを浴びて体を洗います。
- 朝食とコーヒーか紅茶を作ります。
- 食べる。
- 前の晩にアイロンをかけなかった場合は、アイロンをかけます。
- 服を着てください。
- 家を出ます。
- Webster's Third New International Dictionary の 1961 年版を購入またはダウンロードします。
- この辞書のリストからすべての名前を見つけてください。
- 紙にその名前が載っている辞書のページを書きます。
- 紙を使って名前を並べ替えます。
for
このタスクを実行する 通常のループを作成します。
int[] numbers = new int[100];
// ...fill the array with numbers
for (int i: numbers) {
System.out.println(i);
}
このアルゴリズムの複雑さはどれくらいですか? 線形、つまり O(n)。 プログラムが実行する必要があるアクションの数は、プログラムに渡される数値の数によって異なります。配列に数値が 100 個ある場合、アクション (文字列を画面に表示するステートメント) が 100 個存在します。配列内に 10,000 個の数値がある場合、10,000 回のアクションを実行する必要があります。私たちのアルゴリズムを何らかの方法で改善することはできますか? いいえ。何があっても、コンソールに文字列を表示するには、配列を N 回パスし、N 個のステートメントを実行する必要があります。別の例を考えてみましょう。
public static void main(String[] args) {
LinkedList<Integer> numbers = new LinkedList<>();
numbers.add(0, 20202);
numbers.add(0, 123);
numbers.add(0, 8283);
}
いくつかの数字を挿入する空がありますLinkedList
。LinkedList
この例では、単一の数値を に挿入するアルゴリズムの複雑さと、それがリスト内の要素の数にどのように依存するかを評価する必要があります。答えはO(1)、つまり一定の複雑さです。なぜ?各番号をリストの先頭に挿入していることに注意してください。さらに、 に数値を挿入してもLinkedList
、要素はどこにも移動しないことを思い出してください。リンク (または参照) が更新されます (LinkedList がどのように機能するかを忘れた場合は、古いレッスンを参照してください)。リストの最初の数値が でx
、リストの先頭に数値 y を挿入する場合、必要なのはこれだけです。
x.previous = y;
y.previous = null;
y.next = x;
リンクを更新するときは、すでにに含まれている数値が1 つであろうと 10 億であろうと、気にしません。LinkedList
アルゴリズムの複雑さは一定、つまり O(1) です。
GO TO FULL VERSION