インタビューでデータ構造が非常に重要なのはなぜですか?[閉まっている]


106

大学を卒業したとき、データ構造がそれほど強くなかったことを告白しなければなりません。卒業中のキャンパス内の配置を通して、Amazon、Microsoftなどの大企業のほとんどがデータ構造に主に焦点を当てていることを目撃しました。データ構造が卒業生に期待される唯一のものであるかのように見えます。

正直に言うと、私はそれについて悪いと感じました。良いコードを書きます。私はコーディングの標準設計パターンに従います。データ構造を使用しますが、ArrayList、LinkedListなどのJava公開APIのように表面的なレベルで使用します。

おそらくJavaのバックグラウンドのために、当時、オブジェクトやインスタンスなどのオブジェクト指向プログラミングの観点から話をしたときのみ、コードの効率とロジックを理解していましたが、ビットとバイトのレベルにドリルダウンすることはありませんでした。私は、このデータ構造の知識不足のために、人々に私を見下して欲しくありませんでした。

では、なぜデータ構造にこれらすべての重点が置かれているのでしょうか?


36
本当に質問はありません。あなたは「私は良いコードを書いている」と言います-データ構造はどのようにして良いコードの一部ではないのでしょうか。そして、私は誠実なインタビュアーが彼らに過度に取りつかれていることを疑います。
ツリーコーダー

6
@greengit:ハッシュマップの実装とそのAPIの使用には違いがあります。インタビューで私が大切にしているのは、彼らが私のためにアプリケーションを説明し、中央データ構造を構築し、私の選択を説明するように頼んだ場合です。
ジェルジAndrasek

7
何を尋ねられますか?
-temptar

13
@Jurily-コンテナライブラリを使用するタイミングを理解するには、基礎となるデータ構造がどのように機能するかをある程度知っておくと役立ちます。使用しているライブラリの時間と空間の複雑さがわからない場合、コードの効率について知っていることを受け入れるのは困難です-小さなテストデータセットでうまく機能するからといって、より大きなデータセットにうまく拡張できるわけではありません現実世界では。IMO、時間と空間の複雑さを理解することは、クラスとメソッドの名前を知ることと同じくらい、APIを理解することの一部です-おそらく、インテリセンスは複雑さを教えないので。
Steve314

2
優れたデータ構造は、クリーンでシンプルなコードを提供します。悪いデータ構造は複雑なコードを与えます。正しくすることが重要です。

回答:


121

Microsoftのような大企業のほとんどは、主にデータ構造に焦点を当てています。データ構造が卒業生に期待される唯一のものであるかのように見えます。

いいえ、まだあります。たとえば、短期間で新しいフレームワーク、API、またはプログラミング言語を学ぶことができる素早い学習者になること期待しています。それは最低限のバーです。新しいフレームワーク、API、または言語を習得するのに時間がかかる人は、Microsoftのほとんどのチームで成功する開発者にはなりません。

そしてもちろん、インタビューでは、データ構造の生の知識だけでなく、もっと多くの側面に焦点を当てています。たとえば、あいまいな仕様に対処する機能、または安全でないコードを生成するコーディングパターンなどを認識する機能。しかし、データ構造を理解する能力は確かに非常に大きなものです。

それは特にインタビューは最近CSの卒業生のためのデータ構造のテストの知識に偏っている場合。最近の卒業生は、そのほとんどが実際の経験をあまり持っていないため、15年の業界経験を持つ人が得意とするのと同じ種類のことを上手には期待されていません。

私はデータ構造がそれほど強くなかったことを告白しなければなりません

自分自身について知っているのは良いことです。自分についてそれを変更できない、または変更したくない場合は、データ構造を持つ機能を必要とするジョブには応募しないことをお勧めします。

優れたプログラマーは必然的にデータ構造についての十分な知識を持つプログラマーであるという一般的な見方があります。

優れたプログラマーとは、構築する必要のある種類のプログラムを構築するのが得意なプログラマーであるということです。多くのプログラマーは、データ構造の深い知識を必要としないタスクに取り組んでいます。それらのいくつかは、たとえば、ユーザーインターフェイス設計の深い知識を必要とするタスクで動作します。またはデータベースの正規化。または何でも。それらの人々は、まだ彼らの領域で「良いプログラマー」でありえます。

なぜこれがすべてデータ構造に重点を置いているのですか?

私のチームでは開発者が毎日複雑なデータ構造を設計、実装、操作しているためデータ構造に関するインタビューの質問をしています昨日、4時間の会議があり、6人の開発者が特定のツリーノードに単一のブールフィールドを追加することの長所と短所について議論しました。私のチームには、データ構造を深いレベルで理解する能力よりも重要なスキルはおそらくないでしょう。それについて面接で質問しないのは愚かなことです。

データ構造の知識がないと、プログラミングのキャリアに本当に影響しませんか?

まあそれは確かにあなたが私のチームに就職することを妨げるでしょう。しかし、前に言ったように、プログラミングは大きな分野です。データ構造の知識を必要としない多くの種類のコンピュータープログラミングがあります。

このテーマの知識は本当に良いプログラマと悪いプログラマを区別するのに十分な基礎ですか?

いいえ。ただし、ほとんどの場合、Microsoftで成功する可能性が低い開発者を検出するだけで十分です。それが私が検出することに主に興味を持っているので、データ構造の知識はインタビューで私がテストする要因の1つです。


10
トン・エリックに感謝します!これは私の質問に対して私が得た最もやる気を起こさせない答えです。:-)
Vamsi Emani

2
@EricLippert、この素晴らしい答えをありがとう。データ構造に関する正式な知識の不足にまだ噛まれていない独学の開発者として、私が見逃していたことを示す本をお勧めしますか?
クロージャーカウボーイ

5
@Closure Cowboy:データ構造とアルゴリズムの基本については、Cormen、Leieserson、およびRivestによる「Introduction to Algorithms」が標準の教科書です。関数型のデータ構造に興味がある場合、Chris Okasakiの本は非常に優れていますが、かなり高度です。
エリックリッパー

2
@ClosureCowboyプリンストンが提供するCourseraの「Algorithms I」コースをご覧ください。私も独学のプログラマーであり、CS理論の知識のギャップを埋めるために多くのことをしています。
エヴァンプライス14

133

データ構造に関する重要な点の1つは、少なくとも実用的な目的のために、それらが普遍的で時代を超越していることです。過去30年間に開発者であった人は、シングル/ダブルリンクリスト、バイナリツリー、グラフなどの基本的なデータ構造を知っている必要があります。2人の開発者に質問する場合、開発者の知識と回答を比較できます。これは、フレームワークや言語についてもほとんど言えません。2人の開発者にRailsについて質問し、1人が他の開発者よりも多くのことを知っている場合、それは本当に何を教えてくれますか?あなたが質問で言うように、賢い開発者は新しいフレームワークを十分に素早く学ぶことができるので、彼らの現在の知識をテストすることはあまり意味がありません。

データ構造の知識がないことは、実際にプログラミングのキャリアに影響しますか?

はい。絶対に。CRUDアプリケーションの作成に一生費やしたい場合を除きます。

それとも、この主題の知識は本当に良いプログラマと悪いプログラマを区別するのに十分な基礎ですか?

いいえ、十分ではありません。しかし、就職の面接で尋ねることができることはほとんどありません。そして、少なくともアルゴリズムの知識は、少なくとも学校を卒業したばかりの人々にとっては、より良い指標の1つだと思います。仕事の経験について尋ねることはできません。


ちょっとした工夫ですが、データ構造自体が時代を超越するとは言いません。今日のハードウェアの問題を解決するために、多くの構造がモデル化されています。たとえば、B +ツリーを使用してファイルページの検索を最適化しますが、基盤となるハードウェアは変更されています。おそらく、SSDには異なるアルゴリズムが必要かもしれませんし、ディスクioよりもRAMアクセスに向かっている場合もあります。そのため、アルゴリズム自体は「時代を超越した」ものかもしれませんが、その場所と目的はそうではありません
-Homde

3
@konrad:それが「実用的な目的で」という意味です。「時代遅れ」になったデータ構造やアルゴリズムを考えることはできません。また、就職の面接でそれらに出くわすとは思いません。そして、ほとんどのアルゴリズム/データ構造は現在のハードウェアよりもずっと前に開発され、まだ有用であるため、新しいハードウェアの開発が私たちが知っているデータ構造によって導かれる、ある種の共進化が起こっていると思います。
ニキエ

同時実行が事実上必須になった場合/私は時代遅れになる非常に多くのデータ構造を考えることができます:)
Homde

9
@konrad:量子コンピューターが標準になった場合、いつになるか、もう少し考えることができます。しかし、私はOPがそれまで彼の就職の面接で待つことを望んでいないと仮定します
;

3
...または私たちの新しいAIの大君主が人間のプログラマをちっぽけなものにするとき
Homde

45

私はすぐに習得でき、新しいフレームワーク、API、さらにはプログラミング言語をかなり短時間で学習できます。

耳障りではありませんが、中途半端な開発者であれば、比較的短期間で新しい言語やフレームワークを習得できます。

データ構造は普遍的であり、コンピューターサイエンスの基本的な構成要素です。赤黒木は、Java、Python、PHPなど、どのように実装されていても基本的に同じです。したがって、特定の言語や特定のフレームワークをテストするのではなく、雇用主(少なくとも、卓越した開発者を探している雇用主)は、その月の味ではなく、コンピューターサイエンスの基礎を知っているかどうかをテストします現在使用中。

(少なくとも、彼らは現在使用しているものに加えて基礎テストする必要があります...彼が人生でコード行を書いたことがないなら、コンピューターサイエンスのウィザードを雇うことは意味がありません)


1
ここでは、コンピューターサイエンスがキーワードの1つです。データ構造は通常、マスターで詳細に表示され、明らかに重要な主題です。
ジェームズP.

1
データ構造は、純粋に関数型のプログラミングに夢中になるまで普遍的です:P。
ティコンジェルビス

30

F1レーサーはただ速い車を運転すると信じていますか?いいえ、彼らは運転する車を理解しており、メカニック/エンジニアと協力して調整します。もちろん、通常のドライバーはただ運転するだけです。

コードを書くだけの普通の/平均的なプログラマーになれます。何が背後にあるのか理解できません。あなたは物事を成し遂げます。それがすべて、またお会いしましょう。

しかし、多くの企業がF1開発者を探しています。コードの背後にあるものを知って開発する人々。また、会社がより良い何かを構築するのを助ける人々。

データ構造をよく知っているのは、「事前に調理された」形式でデータ構造を頻繁に使用するためだけではありません。また、彼らのアイデアから派生したものを作成するので良いことです。



待って、プログラマーであることと、車を運転する前に親密に知り合うという奇妙な習慣との間に相関関係があると言っていますか?
ロビー

@Robbie:+1 LOL分解するのが好きですか?
落書き

2
うん。お父さんは、何かを分解する方法を教えてくれました。彼は、物事を元に戻す方法を教えてくれなかったので、それを私の人生のすべてを理解していた。
ロビー

17

データ構造に関する私のクラスで、教授が最初に言ったのは、このクラスは本当に高速に検索できるということではありませんでした。その後、半年を費やして、可能な限り最高のデータ構造とアルゴリズムを見つけ、本当に高速に検索しました。

それでも、彼は正しいままでした。データ構造を分析したり、特定の問題に適切なデータ構造を適用したり、新しいデータ構造を思い付くには、エンジニアの多くの資質が必要です。

  • 具体的な問題をモデル化する抽象化を見つける
  • 問題を分解できること
  • 論理的/形式的に推論できること
  • 創造性

AmazonとMicrosoftが人を雇うとき、彼らは次のクイックソートを発明することを望んでいるので、データ構造に関する質問をしません。彼らは、上記の資質を持つ人を確実に雇いたいと考えています。

もちろん、これらの品質の大きなセットを持っている可能性がありますが、それでもデータ構造を吸い込んでしまいます。しかし、そうであれば、データ構造の専門家になるのに時間がかかりません。


そうは言っても、まだArrayList規模が大きくないという問題があります。システムが大きくなった場合、ジョブを実行するには、より適切なソリューションが必要です。また、データ構造を十分に把握していないと、具体的なシナリオで大きく拡大する構造とアルゴリズムを見つけて構成することはできません。


3
また、についてはArrayList、データ構造を十分に把握していないと、スケールが大きくないことに気付かArrayListない場合があり、スケールする構造とアルゴリズムを見つけて構成する必要があります。
phoog

12

一般に、アルゴリズムとデータ構造は、プログラミングにおける最も「ハードコア」なトピックの2つと見なされています。これは、コンピューターサイエンスには膨大な量の研究とそれらに関する研究があるためです。彼らはまた、数学や科学のようなものを好む典型的な「左葉」プログラマーを魅了します(これは多くのプログラマーです)

そうは言っても、これらの知識はインタビューの面であなたのキャリアに影響を与える可能性があります。特にGoogleのようなエンジニアリング指向の職場でインタビューする場合はそうです。しかし、今では他の企業がその側面をまったく気にかけているかもしれません。

私の経験では、アルゴリズム/データ構造の要求は、アルファオタクが誰が最も賢いのかを示すために競い合っている「プログラマーエリート主義」として時々出くわすことがあります。そこに何があるかを知ることは常に良いことですが、赤/黒ツリーの使用方法やボイヤー・ムーア検索のコーディング方法を知る必要のない非常に多くの異なるプログラミングの仕事があります。

興味深いトピックを見つけて、それらをいじくり回すことができる個人的なプロジェクトがある場合は、トピックについてさらに学ぶことをお勧めします。

PS。初歩的なデータ構造(リンクリスト、辞書、ハッシュテーブルなど)に習熟していることは、プログラマーDSにとって必須の知識です。


7

では、なぜデータ構造にこれらすべての重点が置かれているのでしょうか?

2つの理由。

一つには、特定のプログラミング言語という観点ではなく、抽象的な用語で問題について考えることができることを示しています。基盤となる実装に関係なく、特定の状況において、赤黒木よりもハッシュテーブルの方が良いまたは悪い選択になる理由を知っていますか?

もう1つは、自分の経験についてうそをついており、プログラミングの能力があったとしてもほとんどない仕事のために面接をする恐ろしい人がいることです。データ構造の質問は、これらの人々を取り除く簡単な方法です。


私はここで意見を述べるつもりですが、それは議論の余地があると思われます。なぜあるデータ構造または別のデータ構造が効率とパフォーマンスに依存する傾向があるのという問題。開発者に何をしないように伝えますか?時期尚早に最適化しない!データ構造の選択がパフォーマンスの問題を引き起こしていることをプロファイリングで知っていない限り、「正しい」ものを選ぶのが最もよく知っているものです。その他の決定は時期尚早な最適化であり、したがって悪です!
トムW

2
基礎となる実装に関係なく、適用可能性と予想されるパフォーマンス特性に基づいて適切なデータ構造を事前に選択することは、時期尚早な最適化の例ではありません
ジョンボード

バイナリヒープよりもフィボナッチヒープを選択することも可能です。ヒープとリストの使用(ヒープが適切な場合)は適切ではありません。
user470365

5

これらは基本的なものですが、卒業生に何をクイズしますか?彼らは、コースワーク以外の経験を持っているかもしれません。彼らのコースは、Javaと言うよりもマイクロソフトのテクノロジーをカバーしていたかもしれません。データ構造は共通点です。


すべての修士課程の卒業生があなたも知っていることを知っておくべきことは他にないので、卒業生をクイズする他のことに対して+1 。
イアン

4

多くの場合、最適なコードは低レベルのデータ構造の再発明を避けます。これは、特に高水準言語で当てはまります。CRUDジョブでも、低レベルのデータ構造の質問に向かう傾向に気付きました。YMMVですが、ハッカーの科学者の専門知識に重点が置かれているため、優れた開発者を作る他のスキルが隠れています。

  • プロジェクト/時間管理:1%速く動作する新しいリンクリストではなく、ビジネスが推進する現実の世界に遅れずについていくことができます。
  • 最低限の社会的スキル:rog慢で仲良くできない開発者は、アンカーにすぎません。
  • 新しいことを迅速かつ継続的に学習する機能:データ構造は長年にわたってほとんど変わりませんが、他のすべては変わります。データ構造は非常に基本的なものであり、すべての開発者はそれらを十分に理解する必要がありますが、会計士はインタビューに参加する際に長い部門スキルをテストされません。優れた開発者とは、新しいものを見つけて好きになることができるタイプの人です。

データ構造は素晴らしいです。データ構造は重要です。すべてのプログラマーはそれらを理解する必要があります。しかし、私たちはこれらの基礎を彼らの場所の外に押し出すことに夢中になりました。データ構造に関するすべてではなく、99%のケースでは、データ構造の基本を超えて質問する必要はありません。会計士にインタビューする場合は、81を9で割ったものが何であるかを尋ねてください。しかし、「98425454242412 * 4512324のキューブルートは何ですか?... 合理的で、賢く、才能があり、賛成できる人のかなりの割合を怖がらせるでしょう。基本的なリレーショナルデータモデルを構築できるかどうか、関連するフレームワークが提供する拡張配列構造を使用できるかどうか、バイナリ検索の方がフラット検索よりも高速であるが、それ以上のことはあまり意味がないと説明できるかどうかを尋ねます。彼らがそれらのことをすることができるならば、それから束の最も素晴らしい、最も専門的で、最も創造的なものを探し始めてください。

私はジョエルの執筆が大好きですが、彼の「Java Schools」のことはまったく間違っていると思います。誰かがC ++をマスターする以上に賢いことを証明できるものはたくさんあります。考えてみてください。10分間、算術ポインターについて質問することなく誰かと話をすることができ、物事を成し遂げることができるタイプであるかどうかについてかなり良いアイデアを得ることができます。次のようにする必要はありません。

インタビュアー:「あなたの業績について教えてください。」

コーダー:「私の最後のポジションで、私は10億ドルの金融会社向けのカスタムERPシステムの唯一の開発者でした。予定より数か月早く納品し、システムは過去3年間稼働しています。」

インタビュアー:「明確にさせてください。あなたのプログラミングの成果について教えてください」

コーダー:「うーん...」

インタビュアー:「たとえば、独自のリンクリストを作成したことがありますか?」

コーダー: "... [walking out]"


興味深い-良いリスト。少し違った見方はどうですか?1. プロジェクト/時間管理:面接時間のごく一部しかデータ構造が無駄にならないように物事準備できる。2. 最低限のソーシャルスキル:インタビュアーは通常、より興味深い分野に進む前に基本的なデータ構造をすばやく確認したいことを理解できる開発者。3. データ構造の基本に関する知識の不足が原因である可能性があるため、気を散らすことなく、新しいものを迅速かつ継続的に学習する能力
-gnat

@gnat-それもいいです。私が得ていることは、ファンダメンタルズの最も深い理解は、特定のポイントを超えて全体的な能力を語ることではないが、正反対を仮定する傾向があるということだと思います。データ構造は、ほとんどの人が他の誰か(通常は教師)に教えられるものです。私は彼らが自分で学べることを知りたいのです。なぜならそれが現実の世界の仕組みだからです。優れたプログラマーは、ベストプラクティスに基づいて合理的なシステムを設計できます。優秀なプログラマーは、最悪のプラクティスを使用して恐ろしいプログラマーによって書かれた非常識なシステムを学び、それらを機能させることができます。
モーガンハーロッカー

1
私は、ERPシステムに携わった人がチームに適していないと想像できます。
クリストファー

4

優れたプログラマーになることは、言語やフレームワークを学ぶことができるということではありません。複雑な問題の解決策を構築できることです。これらのソリューションを効率的かつ信頼できるものにするためには、ほとんどの場合、優れたアルゴリズムとデータ構造の適切な使用に依存します。データ構造が存在することを知るだけでは十分ではありません。問題に適切なデータ構造を使用するのに十分なデータ構造を理解する必要があります。リストとマップにはいくつかの貴重な機能がありますが、それらにはコストがかかり、間違ったものを使用するとソフトウェアのパフォーマンスが著しく損なわれる可能性があります。

優れたインタビュアーはこれを知っており、あなたが彼のチームや会社にとって価値があるかどうかを判断しようとしています。2年後に使用する言語は大きく異なる場合がありますが、効果的なアルゴリズムとデータ構造の必要性は変わりません。


2

データ構造、時間の複雑さ、メモリ操作、およびポインターはすべて、コンピューターサイエンティストと呼ばれる人が本質的に知っておくべき基本事項です。コードモンキーは言語とその使用方法を学ぶことができますが、CSの専門家と学生は、リンクリストやハッシュマップの使用方法だけでなく、その理由を知る必要があります。

WHYは、基本的なスクリプトキディ、コードモンキー、およびコンピューティングの世界のうなり声から私たちすべてを本当に区別するものです。リンクリストの代わりにハッシュテーブルを使用する理由、ハッシュテーブルのクラスター密度がおよそ.6-.8である理由、二重リンクリストの代わりにここで循環リンクリストを使用する理由 最悪の場合はコードを効率「x」で実行し、平均的な場合は「y」で実行する必要があるのはなぜですか。

これらの基本的なデータ構造と、それらがどのように使用されるか(とにかくすべてのプログラマーがどのようにすべきか)だけでなく、それらが使用される言語にとらわれない理由についての知識。

多くの場所で、慣れ親しんだ言語でコードを記述できますが、Cはもはやプログラミングの世界の言語ではないので、それはより一般的です。その場で、ほとんどの場合、擬似コード/ p&pコードが実際に教えられていないため、対処するのは不可能です。


0

データ構造は、すべてのプログラムの基本的な基盤です。必ずしもそれらを深く理解する必要はありませんが、それらがどのように機能するかを絶対に知る必要があります。

どうして?すべてのコードがデータとやり取りして操作するためです。データセットを構造に保存できない場合、使用できません。データは家の建材のようなものです。組み立てて構造にするまで、無駄なボードの山が残っているだけです。

データセットをどのように考え、定義するかを決定したら、それを使用して、デュオの古典的なアルゴリズム部分である物事を行うことができます。作成するすべてのプログラムはデータ構造を使用しますが、多くの場合、この構造は非常に単純なのでほとんど存在しません。状態データの変数がいくつかあり、完了です!

簡単なプログラムを超えて移動すると、ほとんどすべてがデータ構造を必要とします。あなたが好むのは、ベストプラクティスと数学で超高層ビルを設計するプロの建築家ですか、それともすぐに建築を始める叔父のジョー・ボブですか?


-2

@Pelshoffが述べたことに基づいて、自分が何をしているかを知っていることを示すことです。LinkedListをすべてに使用すると、何をしているのかわからない、または問題を止めて考える気にならないことがわかります。それに加えて、少なくとも私が受講したデータ構造コースでは、大規模なデータセットを扱う際に非常に重要なデータ構造の基本的な複雑さの理論について説明しました。それが、AmazonやMicrosoftのような企業がそのようなことをする理由です。

データ構造クラスを取得する前に、それらは重要ではないと考えましたが、少なくとも、リンクリスト(またはArrayList)が実用的でない場合、またはそれらの欠点が重要である場合を認識できると考えなければなりません。


「すべてにLinkedListを使用すると、何をしているのかわからない」またはLispプログラマであることを示している可能性があります:-)
Peter Alexander

@Peter-これは、あなたが何をしているのかわからないという私のポイントを証明します!;)
ジェッティ

これは、削除された回答へのデッドリンクに基づいているように思われます。あなたは気になり編集このの世話をするためにINGの?
ブヨ

-2

良いコードを書くかどうかは主観的な声明です。機能的なコードが常に良いコードを作るとは限らないことを知っておくことが重要です。

そうは言っても、データ構造は、プログラマとしてあなたが指示している舞台裏の労働者のようなものなので、重要です。構造の実行方法を実際に理解することなく構造のメソッドを呼び出すことができ、データの保存方法を実際に取得することなく構造を利用できますが、これらの詳細を知ることで、1つの構造を使用するのが適切な場合を理解する準備が整います別の。

たとえば、二重リンクリストでは両方向に移動でき、単一リンクリストでは前方にのみ移動できることを知っておくと、データを保存するときに重要な構造を判断するのに役立ちます。単一リンクリストは、メモリ消費の観点からオーバーヘッドが低くなる可能性があることを知って(さらに前の要素へのポインターが含まれていないため)、より多くの教育上の決定を下すことができます。適切な構造を使用してメモリを節約できます。

これらはほんの一例に過ぎず、最終的に、データ構造の詳細な知識がなくても自分のキャリアでうまくやっていると感じているなら、もっと学ぶ必要はないでしょう。ただし、内部で何が起こっているのかを理解することは、機能的なコードを優れたコードに変えるのに本当に役立ちます。


-3

データ構造は、やりたいことの多くの構成要素です。各データ構造の用途、その弱点、長所を知っていれば、問題を簡単に解決できます。

たとえば、数千のオブジェクトを管理する必要がありました。時々、IDに従ってオブジェクトのタイムスタンプを更新する必要があります。時々、X分以上更新されなかったオブジェクトを削除する必要がありました。

データ構造がわかっていれば、問題を簡単に定義できます。また、解決策を見つけるのも非常に簡単です。十分なデータ構造を知らないプログラマーが解決策を考え出そうとしたとき、彼の解決策は厄介でした。彼はあなたのようでした-スマートなコードプログラマーであり、フレームワークを素早く学ぶことができました。しかし、データ構造の知識がなければ、彼は自分で車輪を発明しなければなりませんでした。それ以上-単純なソリューションは、赤黒木(Javaの古いTreeMap)のような理解できないデータ構造に基づいていたため、彼は苦労しました。

ですから、重要なことは、各データ構造をいつ、どのように使用するかを考えることなく知ることです。しかし、実際にそれらがどのように機能するかを理解することなく、それを達成する方法はないと思います。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.