この記事では、アルゴリズムの文脈における「二次」や「n log(n)」などの用語の意味について説明します。
次の例では、5 つの要素を含む配列と 50 の要素を含む配列の 2 つを参照します。また、JavaScript の便利なパフォーマンス API を使用して、実行時間の違いを測定します。
Big O 表記法とは何ですか? Big O 表記法は、データ セットのサイズが大きくなるにつれて計算タスクの難易度が全体的に増加することを表現する方法です。他にも表記法はありますが、最悪のシナリオに焦点を当てているため、定量化や検討が容易なビッグ O 表記法が一般的に最もよく使用されます。最悪のシナリオとは、タスクを完了するために最も多くの操作を必要とするシナリオを意味します。1 秒以内にキューブを解くことができたとしても、一度だけひねっただけでは最善の成果とは言えません。 これは、アルゴリズムをさらに深く理解するにつれて非常に役立ちます。コードを書くときにこの関係を理解し、どこに費やされているかがわかるからです。 Big O 表記法について詳しく学ぶと、次の図のさまざまなバリエーションがわかるようになります。複雑さはできるだけ低く抑え、できれば O(n) を超えないようにします。 オー(1) これは理想的な状況であり、プロジェクトの数が 1 つであろうと 100 万であろうと、完了するまでの時間は同じままです。単一の操作を実行するほとんどの操作は O(1) です。配列へのデータの書き込み、特定のインデックスでの項目の取得、子要素の追加などは、配列の長さに関係なく、すべて同じ時間がかかります。
の上) デフォルトでは、データのサイズと完了までの時間の間には 1 対 1 の関係があるため、すべてのループは線形に増加します。したがって、配列項目が 1,000 個ある場合は、1,000 倍の時間がかかります。
(n^2) 指数関数的成長は私たち全員が陥る罠です。配列内のすべての項目に一致するペアを見つける必要がありますか? ループ内にループを配置すると、1,000 項目の配列を 100 万回の操作検索に変換して、ブラウザーが応答しなくなる可能性があります。二重にネストされたループを使用して 100 万回の操作を実行するよりも、2 つの別々のループで 2,000 回の操作を実行する方が適切です。
O(logn) です 対数的増加の良い比喩としては、「記法」のような単語を辞書で調べることを想像することだと思います。用語ごとに検索するのではなく、最初に「N」セクションを見つけ、次に「OPQ」ページを見つけて、一致するものが見つかるまでアルファベット順にリストを検索します。 この「分割統治」アプローチでは、何かを見つけるのにかかる時間は辞書のサイズによって異なりますが、O(n) にはほど遠いです。データの大部分を参照せずに段階的に具体的な部分を検索するため、1,000 個のアイテムを検索する場合は 10 回未満の操作で済み、100 万個のアイテムを検索する場合は 20 回未満の操作で済み、効率が最大限に高まります。 この例では、簡単なクイックソートを実行できます。
の上!) 最悪の可能性は階乗成長です。典型的な例は巡回セールスマン問題です。距離がそれぞれ異なる都市がたくさんある場合、すべての都市から出発点に戻る最短ルートをどのように見つけるのでしょうか。力ずくのアプローチは、各都市間のすべての可能なルート距離をチェックすることですが、これは階乗であり、すぐに手に負えなくなります。 この問題はすぐに非常に複雑になる可能性があるため、短い再帰関数を使用してこの複雑さを示します。この関数は、ある数値をその数値自身で乗算し、その数値から 1 を引きます。階乗の各数値は 0 に達するまでこのように計算され、各再帰層ではその積が元の数値に加算されます。 階乗は、単に 1 から始まってその数まで増加する積です。すると、6! は 1x2x3x4x5x6 = 720 になります。
当初は階乗(15)を表示するつもりでしたが、12を超える値は多すぎてページがクラッシュするため、これを避ける必要があることがわかります。 結論 パフォーマンスの高いコードを書く必要があるというのは議論の余地のない事実のように思えますが、ほぼすべての開発者が「とにかく機能するから」という理由で、少なくとも二重、あるいは三重にネストされたループを作成したことがあると思います。 Big O 表記法は、これまでにない方法で複雑さを表現し、考えるために不可欠です。 |
<<: 2020年に注目を集めるグラフ機械学習の研究動向とは?
>>: 5G消毒ロボットが武漢を支援し、人間の感染を効果的に防ぐことができる
Sitechi は、通信業界に特化したソフトウェア開発およびサービス プロバイダーです。業界で最も早...
多くの友人から、PyTorch の学習方法を尋ねられました。長期間の練習を経て、初心者が知っておく必...
ガートナーの新しい調査*によると、人工知能 (AI) 技術計画を持つテクノロジーおよびサービス プロ...
人間の動作生成タスクは、エンターテインメント、仮想現実、ロボット工学などの分野のニーズを満たす、リア...
さて、一年で最も暑い時期、真夏が正式に到来しました。今年の猛暑は7月11日から8月19日までの40日...
過去 2 年間で、人工知能とディープラーニングは起業の分野で人気が高まってきました。シリコンバレーの...
新年を迎え、皆様にお楽しみいただいている「まとめ記事」が今年も登場です! 2020年に人工知能が大き...
Data & Society の新しいレポートでは、機械学習を使用して改変されるディープフェ...
教室に人工知能機器を導入することは、「スマート教育」の重要な形態の一つです。江蘇省宿遷市泗洪県第一実...
フィナンシャル・タイムズによると、シティグループは5年以内に投資銀行部門の技術・ビジネススタッフの5...
「今後10年から15年の間に、従来の製造業が直面する苦痛は、今日私たちが想像するよりもはるかに大きく...
自動運転は、さまざまな交通問題を解決し、スマートシティの発展を実現するための共通の選択肢として、近年...
この記事は JavaEye ブログからの引用であり、元のタイトルは「JVM チューニングの概要 (パ...