共通のデータ構造とアルゴリズム最も基本的なデータ構造とアルゴリズムは次のとおりです。
データ構造やアルゴリズムなしで作業しますか?すべての SQL コマンドと Linux コマンドがアルゴリズムとデータ構造であることをご存知でしたか? 気付いていないかもしれませんが、ソフトウェアはこのように動作します。 データ構造とアルゴリズムは、ソフトウェアの実装や採用プロセスにおいても重要な役割を果たします。多くの学生や専門家が尋ねてきた質問は、「なぜこれらの企業の面接では、言語/フレームワーク/ツール固有の質問ではなく、DSA のみに焦点を当てるのですか?」です。 誰かに決断をするように頼んだとき、優秀な人は「これらの点で A、B よりも優れているので、X を選択しました。C を選択することもできましたが、この理由から、C の方が良い選択だと思います」と言うでしょう。私たちは日常生活で、常に、短時間で効率的に、より少ないリソースを使用してタスクを完了できる人と仕事をしています。同じことがこれらの企業でも起こります。これらの企業が直面している問題はより困難であり、ソフトウェア開発者はこれらの企業の問題を解決する際に適切な決定を下す必要があります。 ハッシュ テーブル、ツリー、チャート、グラフ、さまざまなアルゴリズムなどのデータ構造に関する知識は、これらの問題を効果的に解決するのに大いに役立ちます。面接官は、候補者がこれらのツールをどのように使用して問題を解決するかに興味を持っています。自動車整備士が車を修理して正常に動作させるために適切なツールを必要とするのと同様に、プログラマーがソフトウェアを正しく動作させるためには適切なツール (アルゴリズムとデータ構造) が必要です。したがって、面接官は、与えられた問題を解決するために適切なツールを適用できる候補者を見つけたいと考えています。 Google、Microsoft、Facebook、Amazon などの企業で働くエンジニアは、コーディングが単なる実装であり、プロジェクトに割り当てられた時間の約 20 ~ 30% を占める他の企業とは異なります。ほとんどの時間は、会社のリソース (サーバー、コンピューティング能力など) を節約するために、最適なアルゴリズムを使用して設計することに費やされます。これが、これらの企業の面接でアルゴリズムについて取り上げられる主な理由です。企業は、会社に何千ドルもの節約をもたらすアルゴリズムを設計するために、独創的な発想ができる人材を求めているからです。 例: Facebook で働いているとします。あなたは、時間計算量が O(n^2) ではなく O(nLogn) である問題の最適解を提案し、現実のシナリオにおける企業の問題の n が 1 億であると仮定しました (Facebook には 10 億人以上のユーザーが登録されていることを考慮して)。 nLogn は 8 億ですが、n^2 は 10^7 億です。コスト面では、10^7 倍以上の効率向上が見られ、サーバーのコストと時間の面で大幅な節約につながります。 雇用主の視点から面接は候補者を選考するために使われることは間違いありません。仕事よりも人が多い時代では、選考基準を改善する必要があります。たとえば、最も一般的なのは学歴です。平均的な学歴の人が良くないという意味ではありませんが、一般的に言えば、学歴の良い人の方が適切な人を選ぶ確率が高くなります。これが現実です。面接の質問では、アルゴリズムは他の記憶ベースの質問と比較して、人の論理と思考をよりよく反映できるため、優れた選考基準にもなります。もちろん、オペレーティング システム、ネットワーク、Linux などは、多くの企業が検討したいポイントです。 したがって、面接のためにアルゴリズムを学ぶ準備をする必要があります。 個人的な観点から私が最初に入社した会社では、基本的にアルゴリズムは使用されていませんでした (これは苦労して学んだ教訓です。学校でしっかり準備していたに違いありません)。ネットワーク プログラミングさえ必要ありませんでした。基本的には単純な純粋な C 開発でした。なぜなら、それらはすでにパッケージ化されており (別のグループによって開発および保守されていた)、呼び出すだけで済んだからです。その後、私は主に 2 種類の企業との面接を受けました。1 つは従来の通信技術企業、もう 1 つはインターネット企業です。前者はプロジェクト自体と基本的な技術スキルに重点を置いていましたが、後者は通常、オペレーティング システム、データベース、アルゴリズム、ネットワークなどの知識を含む、より多くの側面を評価しました。 では、面接後は本当に全く役に立たないのでしょうか? 実際、ほとんどの場合、全く役に立たないのです。記述するものは主にビジネス コードとビジネス プロセス設計であり、コード実装はそのほんの一部に過ぎない可能性があります。さらに、検索を実装するための既存のアルゴリズムはたくさんあるので、クイックソート、スキップリスト、クイックソート、赤黒木などのアルゴリズムを自分で実装しなければならないことは基本的にありません。ただし、アルゴリズムを学習することにはメリットがあります。 たとえば、業務上のソート要件に基づいて、安定したソートを使用するか不安定なソートを使用するかを選択する必要があるかもしれません。データの挿入と削除の頻度に基づいて、配列リストを使用するかリンク リストを使用するかを選択するかもしれません。トップ K 問題に対処するためにヒープ関連のアルゴリズムを使用するかもしれません。特定の状況で高速検索のためにハッシュを使用するかもしれません。業務データ構造を設計するときに、基本データ構造の考え方を参照するかもしれません。 アルゴリズムは現実世界の複雑な問題を解決する散らかった部屋で本や服が見つからず、親に叱られたことがありますか? もちろんあります。次に必要なものを簡単に取り出せるように、すべてを正しい場所に置くようにと親がアドバイスしたのは正しいことです。ここでは、すべてのコンテンツ (データ) を構造内に整理して保存し、何かを検索する必要があるときにいつでも簡単にすばやく取得できるようにする必要があります。この例は、現実世界でデータを整理したり構造化したりすることがいかに重要であるかを明確に示しています。 ここで、図書館を例に考えてみましょう。図書館で集合論に関する本を探す必要がある場合は、まず数学のセクションに行き、次に集合論のセクションに行くことになります。本がこのように整理されておらず、ランダムに割り当てられていたら、特定の本を見つけるのは困難でしょう。したがって、データ構造とは、コンピューター上で情報を整理する方法を指します。コンピューター科学者は、提供された入力に基づいてデータをより適切に処理できるように、データを整理する最適な方法を見つけて処理します。 多くの初心者プログラマーは、このデータ構造とアルゴリズムを日常生活のどこで使用し、現実世界の複雑な問題を解決するのにどのように役立つのかという質問をします。トップクラスのテクノロジー企業への入社に興味があるかどうかに関わらず、DSA は日常生活に非常に役立つということを述べておく必要があります。 要約する通常、これらのアルゴリズムを自分で実装する必要はありませんが、以下の点を理解することが重要だと思います。
Java、C++、Python などとは異なり、C ライブラリには上記のデータ構造やアルゴリズムの実装がない場合があるため、C 言語はそれらの理解を深めるのに最適な選択肢でもあります。 すべては実際的な問題をより良く解決するためです。 |
北京時間2月15日、海外メディアの報道によると、大規模な人工ニューラルネットワークに基づく人工知能は...
Adobe が 2020 年 12 月 31 日をもって有名な Flash ソフトウェアのサポートを...
[51CTO.com クイック翻訳] 多くの人工知能コンピュータシステムの中核技術は、人間の脳の生...
[[351301]]資本の冬を経験した後、疫病のブラックスワンが次々と起こり、AI初期に蓄積された非...
ファイザーの最高デジタル・技術責任者リディア・フォンセカ氏は、機械学習技術は医薬品の発見、臨床試験、...
[51CTO.com]地理的制約と教師の制約により、中国では質の高い教育資源が常に極めて不足してい...
10 年前、ほとんどの人は、今日では現金やカードを持ち歩かずに携帯電話だけを持って街を歩き回り、買...
近年、人工知能は急速に発展しており、コンピュータービジョンや自然言語処理の分野で画期的な変化をもたら...
数日前、テンセントの製品に違反があり、合計4回に分けて報告されました。工業情報化部はテンセントに対し...
1. はじめに2016年9月、Googleはニューラルネットワークベースの翻訳システム(GNMT)を...
この記事は公開アカウント「Reading Core Technique」(ID: AI_Discov...
絶えず変化するテクノロジー環境において、ChatGPT とその AI チャットボットは先頭に立って、...
AI 人材とプロジェクト パイプラインを構築するには、教育的価値だけでなく技術的価値も必要です。そ...