生徒の中には、コンピューターの実行速度の概念がわからない人もいるかもしれませんが、コンピューターは非常に高速に動作するはずだと感じています。では、LeetCode でアルゴリズムの問題を解くときにタイムアウトするのはなぜでしょうか? コンピューターは 1 秒間にいくつの操作を実行できるでしょうか? この質問について議論しましょう。 タイムアウトとは何ですか?LeetCode でアルゴリズムを練習しているときに、「タイムアウト」と呼ばれるエラーに遭遇したことがあるはずです。 つまり、プログラムの実行時間が指定時間を超えています。一般的に、OJ(オンラインジャッジ)のタイムアウト時間は1秒です。これは、ユースケースデータを入力してから最大1秒以内に結果が得られなければならないことを意味します。LeetCodeの判定ルールはまだ明確ではありません。以下の説明の便宜上、タイムアウト時間は一時的に1秒に設定されています。 O(n) アルゴリズムを記述する場合、アルゴリズムの実行時間が 1 秒を超えるときの n の大きさを実際に見積もることができます。 n のサイズが十分に大きく、O(n) アルゴリズムを 1 秒以上実行する必要がある場合は、log(n) ソリューションを検討する必要があります。 ハードウェア構成から見たコンピュータのパフォーマンスコンピュータの計算速度は主に CPU の構成によって決まります。2015 MacPro を例にとると、CPU 構成は 2.7 GHz デュアルコア Intel Core i5 です。 つまり、2.7GHz Pentium Dual Core、i5 プロセッサ、GHz は何を意味し、1Hz = 1/s、1Hz は CPU のパルス (状態の変化として理解でき、クロック サイクルとも呼ばれます) であり、ヘルツと呼ばれますが、1GHz は何ヘルツに相当しますか?
つまり、1GHz = 10億Hzなので、CPUは1秒間に10億回(10億クロックサイクル)パルスを発することができることになります。1クロックサイクルが1回のCPU操作であると単純に理解しないでください。 たとえば、1 + 2 = 3 の場合、CPU はこの操作を完了するために 4 回実行する必要があります。ステップ 1: レジスタに 1 を入れ、ステップ 2: レジスタに 2 を入れ、ステップ 3: 加算を実行し、ステップ 4: 3 を保存します。 さらに、コンピュータの CPU は、私たちが自分で書いたプログラムを実行するだけでなく、コンピュータのさまざまなプロセス タスクなどを実行します。私たちのプログラムは、プロセスのうちの 1 つにすぎません。 では、プログラムは実際に 1 秒間にコンピューター上でいくつの操作を実行できるのでしょうか? テスト実験を行う1 秒間にどれだけのデータを処理できるかを測定するテスト プログラムを作成する場合、注意すべき点が 3 つあります。
影響を与える要因は多数ありますが、プログラムの実行時間について大まかな評価を行うことは可能です。 アルゴリズム 4 からの一節を引用します。
したがって、コンピュータ プログラマーを開発するソフトウェア エンジニアであれば、プログラムの実行に 1 秒かかるか 1 年かかるかを見積もることができなければなりません。 これは最も基本的なことなので、上記のエラーは大きな問題ではありません。 以下は C++ コードの例です。 テストハードウェア: 2015 MacPro、CPU 構成: 2.7 GHz デュアルコア Intel Core i5 時間計算量が O(n)、O(n^2)、O(nlogn) の 3 つの関数を実装し、加算演算を使用してテストを統合します。
n のスケールが変わると、これら 3 つの関数の時間消費がどのように変化するかを見てみましょう。まず function1 をテストし、次に function2 と function3 をコメント アウトします。
実行中の効果を以下で確認してみましょう。 O(n) アルゴリズムの場合、コンピュータは 1 秒間に約 5 * (10^8) 回の計算を実行できます。O(n^2) アルゴリズムは 1 秒間に 5 * (10^8) 回の平方根を処理できるはずです。実験データは次のとおりです。 O(n^2)アルゴリズムは、コンピュータが1秒間に約22,500回の計算を実行できることを意味し、これは以前の推測を検証します。 O(nlogn)と仮定すると、1秒で処理できるデータのサイズはどれくらいでしょうか? 理論的には、logn の計算量は実際には非常に高速であるため、O(n) よりも 1 桁小さくなるはずです。実験データを見てみましょう。 O(nlogn) アルゴリズムの場合、コンピューターは 1 秒間に約 2 * (10^7) 回の計算を実行できます。これは予想どおりです。 これは私の個人用PCで計測したデータです。あまり正確とは言えませんが、桁は似ています。自分のパソコンでも計測できます。 全体的なテスト データは次のように構成されます。O(logn) や O(n^3) などの時間計算量で 1 秒以内にどれだけのデータが処理できるかについては、自分でコードを書いてテストすることができます。 完全なテストコード
要約するこの記事では、LeetCode で問題を解くときにプログラムがタイムアウトする理由を詳細に分析し、ハードウェア構成から CPU 実行速度を大まかに把握します。次に、O(n) アルゴリズムを 1 秒間実行する場合、n がどの程度大きくなるかを調べる実験を行います。最後に、さまざまな時間計算量を与え、1 秒間に計算できる n のサイズを示します。 他のレコーダーの皆さんも、自分で実験やテストを行って、結果が私と似ているかどうかを確認することをお勧めします。 こうすることで、プログラムがタイムアウトしたときのデータの規模を全員が全体的に把握できるようになります。 |
<<: 2026年までにIoT分野のAIサービス収益は36億ドルに達する
>>: UiPath: 自動化とは、退化を拒否し、価値の高い仕事の創出に専念することです
この記事は公開アカウント「Reading Core Technique」(ID: AI_Discov...
著者 | 崔昊レビュー | Chonglouまとめこの記事では、パーソナライズされた仮想キャラクター...
もし20年前の自分に会って会話ができたら、何を話しますか?想像する必要はありません。まるでSF映画の...
ゲスト | 周明執筆者 | Yun Zhaoある夜、湘源の湧き水が、広大で無限に湧き出しました。 C...
[[400942]]研究者にとって最も嬉しいことは、論文が「受理」されることです。論文が出版された後...
ケータリング業界における人件費は、事業者を悩ませる大きな問題です。レストランなどのケータリングのシナ...
[[258657]]近年、人工知能(AI)は急速に発展しています。今後、AIはどうなるのでしょうか...
この記事では、GCN と呼ばれるよく知られたグラフ ニューラル ネットワークについて詳しく説明します...
2022年も、疫病やサプライチェーン危機などの悪影響は続くとみられ、AIに対する消費者の信頼獲得や気...
[[338796]] 2017年に研究者たちは「2040年までにAIがほとんどのコードを書くように...
大規模な多国籍産業企業は、進行中のデジタル産業革命で効果的に競争できるように、機械をよりスマートにす...
過去 1 年間、私は仕事時間のほとんどをディープラーニングの研究とインターンシップに費やしてきました...
アメリカ心理学会は6月14日、「AIと頻繁に接触する従業員は孤独になりやすく、病気のリスクも高まる」...