イベントアドレス: CSDN 21 日間学習チャレンジ
学問の最大の理由は凡庸さを取り除くことであり、一日も早く、人生がより華やかになります。
記事ディレクトリ
1 はじめに
最近、編集者は大神@一头小山猪に従ってアルゴリズムを学びます. 学習の目的は主に自分自身に学習を促すことです. アルゴリズムは基礎であり、頻繁に見直す必要があるため、編集者は学習内容を編集して使用しています.また、私のブログが困っている人の助けになれば幸いです。
学習する前に、アルゴリズムとは何か、アルゴリズムの品質を評価する方法など、いくつかの基本を理解する必要があります。次に、非常に簡潔な言語で復習します。
2. アルゴリズムの基本概念
算法
要するに、それは問題に対する段階的な解決策です。
アルゴリズムの効率は、时间复杂度
およびによって空间复杂度
評価されます。
- 時間の複雑さ:
コードの各部分の実行時間の合計です. 一般的な時間の複雑さは (低いものから高いものへ):
- スペースの複雑さ:
追加の一時変数の数、またはアルゴリズムの実行時に必要なストレージ構造の数。
4. 順次検索
今日は主に友達と共有しています顺序查找
が、シーケンシャル検索とは何ですか?
逐次探索は線形探索とも呼ばれます. 基本的な考え方は: 線形テーブルの一方の端から始めて, 線形テーブルに記録された要素を与えられた値と順番に比較します. 線形テーブルの要素が与えられた値と等しい場合値の場合、検索が成功したことを意味し、要素の添え字を返します。それ以外の場合、検索は失敗し、-1 が返されます。
4.1 疑似コード
擬似コードは次のとおりです
//while循环
i = 1
while i <= A.length
if A[i] == key
return i
i++
return -1
//或者for循环
i = 1
for (i = 1; i <= A.length; i++)
if A[i] = key
return i
return -1
逐次検索の場合、エディターは 2 つの言語を提供します
4.2 Java 版
public class SequentialSearch {
public static void main(String[] args) {
int[] a = {
11, 34, 20, 10, 12, 35, 41, 32, 43, 14 };
int key = 10;
int result = search(a, key);
// System.out.println(result);
if (result != -1) {
System.out.println("10的下标为:" + result);
} else {
System.out.println("找不到该元素");
}
}
private static int search(int[] a, int key) {
for (int i = 0; i < a.length; i++) {
if (a[i] == key) {
return i;
}
}
return -1;
}
}
4.3 Python バージョン
def sequent(alist,key):
for i in range(len(alist)):
if alist[i]==key:
return i
return None
if __name__ == '__main__':
alist = [11, 34, 20, 10, 12, 35, 41, 32, 43, 14]
key = 41
result = sequent(alist,key)
print(result)
4. アルゴリズム効率分析
4.1 時間の複雑さ
- 最悪のケース
最悪のケースは、線形リスト全体がトラバースされ、ターゲット要素が見つからないことです。ループの数は N に関連するため、時間計算量は O(n) です。 - 最良の場合、
ターゲット要素は最初の要素をトラバースすることによって見つかります。したがって、時間計算量は O(1) です。 - 平均的なケース
上記の 2 つのケースに基づいて、逐次検索の時間計算量は O(n) であると結論付けることができ、これは遅い検索アルゴリズムに属します。
4.2 空間の複雑さ
アルゴリズムの実行時に元のコレクションは変更されません。インデックスの変更を制御するために追加の変数のみが必要なため、スペースの複雑さは O(1) です。
結論: 自分の価値を愛するなら、世界のために価値を創造しなければなりません。
な