この記事を書く前に、プログラマーの基本的な知識についてお話ししたいと思います。多くの人が自分の仕事の経験について話したり、卒業生にアドバイスをしたりしています。学生は学校でしっかりとしたコンピューターの基礎を築くべきだという彼らの提案に、著者は同意します。しっかりした基礎がなければ、どうやって建物を建てることができるでしょうか?ある程度の基礎知識があれば、深い理論を学ぶのは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)
防疫期間中の電子温度測定ドアから、宅配業界で使用されているドローンやロボットによる仕分け、私たちがよ...
ロボットは科学者の主な研究分野となっており、この分野の技術が進歩し続けると、ロボットがこの社会の主な...
GPT-5 はいつ登場し、どのような機能を持つのでしょうか?アレンAI研究所の新しいモデルがその答え...
対話型音声応答 (IVR) システムにおける人工知能 (AI) の変革的役割と、それが IVR テス...
多くの企業が GPU コンピューティング能力の開発を組み合わせて、自社の機械学習の問題に対するソリュ...
今日の物語の主人公は、サンジーヴ・アローラとアニルド・ゴヤルという二人の科学者です。アローラ氏はプリ...
ここ数カ月、国内外のテクノロジー大手は大規模モデルをめぐって動きを見せているが、OpenAIを所有す...
この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...
1958 年、FHC クリックは、生物学における重要なセントラルドグマである DNA -> R...
AI革命が到来し、それは最良の時代になるかもしれないし、最悪の時代になるかもしれない。それが良いこと...
ロボット工学は、SF の世界の概念から、あらゆる分野を変え、人間の生活を向上させる現実のものへと進化...
CISO、CSO、およびそのチームは毎日、侵害を検出し、リスクを評価し、適切に対応するという課題に直...
[[223595]]はじめに: この記事では、著者の Emmanuel Ameisen が、機械学習...