この記事を書く前に、プログラマーの基本的な知識についてお話ししたいと思います。多くの人が自分の仕事の経験について話したり、卒業生にアドバイスをしたりしています。学生は学校でしっかりとしたコンピューターの基礎を築くべきだという彼らの提案に、著者は同意します。しっかりした基礎がなければ、どうやって建物を建てることができるでしょうか?ある程度の基礎知識があれば、深い理論を学ぶのは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)
モバイルインターネットやビッグデータなどの新技術の推進により、人工知能は新たな発展ブームを迎え、実際...
昨年のNVIDIAのGTCで「Virtual Huang」はどのようにして作られたのでしょうか? ブ...
この記事では主に、フレームワークの概要、システム アーキテクチャ、プログラミング モデル、分散アーキ...
[51CTO.com からのオリジナル記事] AI の発展は数々の浮き沈みを経験しており、AI ア...
序文ネットワークをトレーニングするときに、batch_size を設定することがよくあります。この ...
ビッグデータダイジェスト制作出典: lambdalabs編纂者:張秋月ディープラーニング モデルが強...
この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...
教育革命が起こっており、人工知能は2032年までに882億ドルに達すると予想されています。人工知能(...
人工知能の基礎教育を強化することは、将来の社会の発展に備えるための避けられない選択であり、要件です。...
「国内の自主自動車運行システムを全面的に開放する。」 Leiphone.com(公式アカウント:Le...