こんにちは!今日の講義は他の講義とは少し異なります。Java に間接的にのみ関連するという点で異なります。 ただし、このトピックはすべてのプログラマーにとって非常に重要です。アルゴリズムについて話します。アルゴリズムとは何ですか? 簡単に言うと、これは、望ましい結果を達成するために実行する必要がある一連のアクションです。私たちは日常生活でアルゴリズムをよく使用します。たとえば、あなたは毎朝、学校や職場に来て、同時に次のことを行うという課題に直面しています。
- 服を着た
- クリーン
- ちゃんと育てられている
- 目覚まし時計で起きます。
- シャワーを浴びて、顔を洗います。
- 朝食の準備をし、コーヒー/紅茶を作ります。
- 食べる。
- 夕方以降アイロンをかけていなかった場合は、アイロンをかけましょう。
- 服を着てください。
- 家を出ます。
- インターネットで「ロシア人名辞典」1966 年版を購入またはダウンロードします。
- この辞書のリストにあるすべての名前を見つけてください。
- その名前が辞書の何ページに載っているかを紙に書きます。
- メモを使って名前を紙に並べます。
for
このタスクを実行する 通常のループを作成します。
int[] numbers = new int[100];
// ..заполняем массив числами
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 の仕組みを突然忘れてしまった場合は、古い講義を見てください)。リストの最初の数値が数値である場合х
、リストの先頭に数値 y を挿入すると、必要なのは次のとおりです。
x.previous = y;
y.previous = null;
y.next = x;
この参照の再定義では、現在存在する数値の数は問題ではありませんLinkedList
。少なくとも 1 つ、少なくとも 10 億です。アルゴリズムの複雑さは一定 - O(1) になります。
GO TO FULL VERSION