フロントエンドではアルゴリズムを理解する必要はないと思いますか?実際の例を見てみましょう。

フロントエンドではアルゴリズムを理解する必要はないと思いますか?実際の例を見てみましょう。

[[431020]]

アルゴリズムは、問題を解決するための手順です。同じ問題でも複数の解決策が存在する場合があり、したがってアルゴリズムも複数存在します。ただし、良いアルゴリズムと悪いアルゴリズムがあり、その違いは複雑さにあります。

複雑さは、時間消費/メモリ使用量のパフォーマンスを推定するために使用できるため、複雑さを使用してアルゴリズムを評価します。

(複雑性がわからない場合は、この記事をお読みください: パフォーマンス分析には必ずしもプロファイラーは必要なく、複雑性分析でも問題ありません)

開発の際には、ほとんどのシナリオで最も単純なアイデアを使用します。つまり、比較的複雑度の高いアルゴリズムで問題はなく、さまざまな高度なアルゴリズムは必要ないようです。アルゴリズムは、学習できるものでも、そうでないものでもかまわないようです。

実際にはそうではありません。それは、大量のデータを扱うシナリオに遭遇したことがないからです。

以前の会社での具体的なシナリオの例を挙げてみましょう。

アルゴリズムの力の例

これは私の以前の会社である AutoNavi での実際の例です。

ソースコード全体に対して依存関係の解析を行うと、モジュールは数万個になります。あるモジュールが別のモジュールに依存することを前方依存関係、あるモジュールが別のモジュールに依存することを逆依存関係と呼びます。まず前方依存関係を分析し、次に後方依存関係を分析します。

逆依存関係を分析する場合、従来の考え方では、依存関係ごとに、一方側のすべてのモジュールを走査して、それに依存するモジュール、つまり逆依存関係を見つけます。

このアイデアは非常にシンプルで考えやすいですが、このアイデアに何か問題はありますか?

このアルゴリズムの複雑さは O(n^2) です。n が数十万に達すると、複雑さから推測できるようにパフォーマンスは非常に低下します。

実際、これは事実です。後になって、すべてのソースコードの依存関係を実行するのに 10 時間以上かかり、一晩中実行することさえできませんでした。

最適化するように求められた場合、どのようにパフォーマンスを最適化しますか?

システムを複数のプロセス/複数の作業スレッドに分割し、依存関係分析タスクをいくつかの部分に分割することで、パフォーマンスを数倍向上できるかどうかを尋ねる学生もいるかもしれません。

はい、数倍の改善は大きいです。

しかし、後から変更を加えてパフォーマンスが何万倍も向上したとしたら、信じますか?

変更内容は次のとおりです。

以前は、逆依存関係を分析する場合、各依存関係はすべての順依存関係を走査する必要がありました。しかし、正の依存関係は実際には逆の依存関係ではないでしょうか?

そこで、前方依存関係を分析する際に後方依存関係を記録するように直接変更しました。

この方法では、逆依存関係を個別に分析する必要がなくなり、アルゴリズムの複雑さは O(n^2) から O(n) に削減されます。

O(n^2) から O(n) への変更は、モジュールが数万個ある場合、数万倍のパフォーマンス向上に相当します。

これは、以前は実行に一晩中かかっていたコードが、今ではわずか 10 分強で完了できるという事実に反映されています。このレベルの最適化は、複数のスレッド/プロセスで実行するだけで達成できると思いますか?

これがアルゴリズムの力です。より複雑性の低いアルゴリズムを考案すると、パフォーマンスが大幅に向上します。

私たちが一日中 diff アルゴリズムについて話しているのと同じように、これは O(n^2) の単純なアルゴリズムの複雑さを O(n) に削減するためです。つまり、DOM ノードが何千もある場合、パフォーマンスが何千倍も向上するということです。

それで、アルゴリズムの力を感じますか?

要約する

マルチスレッド、キャッシュなどの手段では、せいぜい数倍のパフォーマンス向上しかできませんが、アルゴリズムの最適化では、パフォーマンスを桁違いに向上させることができます。データ量が多い場合、パフォーマンスは数千倍、数万倍向上する可能性があります。

では、なぜ私たちはアルゴリズムが役に立たないと考えるのでしょうか。それは、処理するデータの量が少なすぎるからです。数百のデータを処理する場合、O(n^2)、O(n^3)、O(n) アルゴリズムの違いはそれほど大きくありません。

処理するシーン データの量が大きくなるほど、アルゴリズムの重要性が増します。これは、優れたアルゴリズムと劣ったアルゴリズムの違いが、数倍や数十倍ではなく、数万倍になる可能性があるためです。

それで、大手企業はすべてアルゴリズムをテストしていることがわかります。それは役に立たないのでしょうか? いいえ、それは非常に重要なことです。それは書かれたコードのパフォーマンスを決定するとも言えます。

<<:  毎日のアルゴリズム: 上位 K 個の高頻度要素

>>:  速度が2倍に向上、超強力なCPUレベルのバックボーンネットワークPP-LCNetが誕生

ブログ    

推薦する

アメリカは最強のAIを開発するために1億ドルを投資しています。あなたを狙っているわけではありませんが、ここにいる全員が職を失う可能性があります。

米企業が人工知能に1億ドルを投資人工知能といえば、誰もが知っているものでしょう。AppleファンのS...

ReAct: 言語モデルにおける推論とアクションを組み合わせてよりスマートな AI を実現

本日は、Google Research とプリンストン大学の研究者グループが言語モデルにおける推論と...

...

2020年のコロナウイルスがロボット経済をいかに後押ししたか

致命的なコロナウイルスによって引き起こされた経済不況は、さまざまな業界に大きな混乱を引き起こしました...

今後 30 年間、人工知能の時代において、どの職業が消滅し、あるいは存続するのでしょうか?

最近の教育プロセスの中で、何人かの子供たちが私に大学で何を専攻すればいいかと尋ねました。将来的に発展...

まるで平らな地面を歩いているようです!ボストンダイナミクスアトラスはパルクールを学習しますが、舞台裏の映像は長編映画よりもさらにエキサイティングです

ステージ上の1分、ステージ外の10年間の努力。ボストン・ダイナミクスのロボット「アトラス」は新たなス...

生成AIがSaaSのセキュリティ上の懸念を引き起こす

IT リーダーは、サービスとしてのソフトウェア (SaaS) のセキュリティについては引き続き自信を...

人工知能は製造業の未来をどのように変えるのでしょうか?

ある研究機関が最近発表した調査報告によると、2022年までに人工知能が製造業にもたらす価値は23億ド...

マイア:人間を模倣するが、人間を超えることはないチェスAI

[[378769]]海外メディアの報道によると、AIは長年にわたり、あらゆる古典的なボードゲームで...

機械学習アルゴリズムの長所と短所の比較と選択(要約)

この記事の目的は、現在の機械学習アルゴリズムの実用的かつ簡潔な一覧を提供することです。この記事の内容...

...

GoogleがAIトレーニングを高速化する新手法を提案、GPUのアイドル時間を圧縮して3倍以上高速化

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

自己教師あり学習:AI技術の将来の方向性

ディープラーニングは人工知能の分野に多大な貢献をしてきましたが、その技術自体には依然として致命的な欠...

Baidu CTO 王海鋒氏のCNCC2019講演: ディープラーニングプラットフォームが産業インテリジェンスをサポート

10月17日から19日まで、2019年中国コンピュータカンファレンス(CNCC2019)が蘇州で開催...