この記事を書く前に、プログラマーの基本的な知識についてお話ししたいと思います。多くの人が自分の仕事の経験について話したり、卒業生にアドバイスをしたりしています。学生は学校でしっかりとしたコンピューターの基礎を築くべきだという彼らの提案に、著者は同意します。しっかりした基礎がなければ、どうやって建物を建てることができるでしょうか?ある程度の基礎知識があれば、深い理論を学ぶのは2倍簡単になります。最初に深い理論に触れてから関連する基礎を学べば、労力は半分で結果は2倍になります。おそらく多くの学生は、今はすぐにでも仕事を始められる人材を採用する企業が多いと言うでしょう。著者がまず言いたいのは、そのような企業は近視眼的な小さな企業に違いないということです。採用しても、非常に優秀な人材を見つけることはできません。たとえそこに行ったとしても、そのような人材は長く留まらないでしょう。なぜなら、そのような企業には発展のビジョンがなく、技術系の人材は発展の見込みがないため転職してしまう可能性があるからです。次に、コンピュータの基礎知識がしっかりしていれば、3 か月以内に会社の技術要件を満たすように学習し、適応できると信じています。 実際、著者が言いたいのは、基本を決して無視してはいけないということです。これ以上長々とせずに、基本的なソートアルゴリズムに直接進みましょう。 基本的なプログラミングアルゴリズム(I) 基本的なプログラミングアルゴリズム(II) 基本的なプログラミングアルゴリズム(III) バブルソート 使用条件: コレクションの要素はサイズを比較できます アルゴリズムのアイデア: ソートするレコードを継続的にスキャンします。スキャンするたびに、最小のレコードが見つかり、それが一番上に近づきます。各スキャンではレコードが最終的な最も正しい位置に配置されるため、次のスキャンではレコードを再確認する必要がありません。 プログラミング例: int b[10]={77,1,65,13,81,93,10,5,23,17} はバブルソートされます (ここで概念を混同していました。指摘してくれた zdd に感謝します)
パフォーマンス分析: 時間計算量 O(n^2) シェルソート 使用条件: コレクションの要素はサイズを比較できます アルゴリズムのアイデア: まず、ソートするレコードのシーケンス全体をいくつかのサブシーケンスに分割し、それぞれに対して直接挿入ソートを実行します。シーケンス全体のレコードが「基本的に順序付けられている」場合は、すべてのレコードに対して直接挿入ソートを実行します。 サブシーケンスは単に「セグメントに分割」されるのではなく、特定の「増分」で区切られたレコードによってサブシーケンスが形成されます。そのため、比較して並べ替えるときに、キーワードが小さいレコードは段階的に前に進むのではなく、一定の増分で移動します。「増分」は減少傾向を示し、最終的にこの「増分」は常に 1 になります。このとき、シーケンスは基本的に順序付けられており、並べ替えを完了するために必要な比較と移動はわずかです。シェルソートの増分設定がわかりにくい。一般的に、8 つの数字の「増分」を 4、2、1 に設定することを検討します。 (これはシェルソートの一般的な設定です)。次に、「増分」h(n+1)=3*h(n)+1 を計算する式を作成します (h>N/9 で停止)。この式は増分には最適ではないかもしれませんが、一般的な「増分」設定には適用できます。数字が 8 個ある場合、ここでの増分は 1 です。 プログラミング例: int b[10]={77,1,65,13,81,93,10,5,23,17}はシェルをソートする
パフォーマンス分析: ヒルソートの時間計算量は少々複雑です。特定の「増分」に応じて変化します。ここでは、著者は Yan Weimin の「データ構造」から O(n^3/2) を使用しています。 クイックソート 使用条件: 同等のサイズのコレクション。 アルゴリズムのアイデア: ソート パスを通じて、ソートするレコードは 2 つの独立した部分に分割されます。レコードの一方の部分のキーワードがもう一方の部分のキーワードよりも小さい場合、レコードの 2 つの部分を別々にソートして、最終的に順序付けられたシーケンスに到達できます。ここで重要なポイントは、セグメンテーションの「ベンチマーク」を選択することです。この「ベンチマーク」より大きい場合は 1 つの部分に分割し、この「ベンチマーク」より小さい場合は 1 つの部分に分割する必要があります。ここで、著者はデフォルトでこの部分の最初のレコードを「ベンチマーク」として使用します。 プログラミング例: int b[10]={77,1,65,13,81,93,10,5,23,17}
パフォーマンス分析: 時間計算量 O(nlogn) 原文: http://www.cnblogs.com/couhujia/archive/2011/03/24/1993373.html |
<<: 基本的なプログラミングアルゴリズムを簡単にマスターする(パート3)
>>: 基本的なプログラミングアルゴリズムを簡単に習得する(I)
2012年以来、人工知能の復活は9年目に入りました。「人工知能とは何か」に対する人々の認識は、当初...
ビッグデータダイジェスト制作ChatGPTが人気を博した後、AIコミュニティは「百式戦争」を開始しま...
著者: ミシェル・ゾウ翻訳:李睿企画丨孫淑娊[51CTO.com クイック翻訳]事前に構築された A...
人工知能(AI)は生活のあらゆる分野に浸透しています。人工知能は医療にどのようなメリットをもたらすの...
この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...
SQL 結合を最適化する方法は、データベース コミュニティが何十年にもわたって研究してきた大きな問題...
これはすごいですね。Claude 3 はベンチマーク テストで GPT-4 をはるかに上回るだけでな...
[[219623]] [51CTO.com クイック翻訳] 最近では、人工知能 (AI) や機械学...
[[231414]]会計、税務、監査などの業務でロボットが人間に取って代わったらどうなるか想像してみ...
[[182792]]協調フィルタリング推奨アルゴリズムにおける行列分解の応用では、推奨アルゴリズムに...
デジタルパフォーマンス管理の変革デジタル目標設定パフォーマンス計画は、企業の繁栄戦略と業務を結び付け...