この記事は、Qijian の電子書籍「Change Your Fate Against the Heavens—Programmer's Road to God」、github アドレス: https://github.com/harvic/FightingCoder Welcome to star に含まれています。[原文を読む]をクリックすると直接移動できます。
私も大学時代はバカで、採用試験で5冊以上のアルゴリズムの本とLeetCodeを読み、半年以上勉強しました。
問題数は全部で1000~2000問… 合格を恐れてブラッシングしないで… ブラッシング忘れ、ブラッシング忘れ… 髪の毛が抜けそう…
10年近く働き、大きな工場をいくつも転々とし、受験生から問診係に変わり、そんなに頑張る必要はないことに気づきました。
何事も28の原則に従い、20%を掴めば80点!
すべてがコストパフォーマンスに優れています!
時間を節約して、彼女と話して、美味しくないですか?? ? ! ! !
ここでは、私が何年にもわたって質問を書いてきた経験をお話しします.キーポイントは何か、データ構造とアルゴリズムを学ぶ方法を知っていただければ幸いです.
乾物については、データ構造とアルゴリズムの本で言及される知識ポイントをカバーするために 2 日間かけて絵を描きました。また、一般的に使用されるアルゴリズムの平均時間の複雑さも示し、学習が必要なコンテンツの前に星を付けます
関連するデータ構造は 20 種類近くあります: 配列、リンク リスト、スタック、キュー、ハッシュ テーブル、バイナリ ツリー、ヒープ、ジャンプ リスト、グラフ、トライ ツリー; 40 を超える一般的なアルゴリズムのアイデア: 再帰、並べ替え、バイナリ検索、検索、ハッシュ アルゴリズム、欲張りアルゴリズム、分割統治アルゴリズム、バックトラッキング アルゴリズム、動的計画法、文字列一致アルゴリズム。
これらの基本的なデータ構造とアルゴリズムをマスターした後は、より複雑なデータ構造とアルゴリズムを非常に簡単かつ迅速に学習できます。
長い記事であることに注意してください。次の内容は、10 年以上にわたるアルゴリズムの学習の経験をカバーしており、参考のために要約されています。
この記事は長い間書かれてきたもので、きっとあなたの助けになると信じています。
目次:
-
データ構造とアルゴリズムの違い
-
データ構造の学び方
-
アルゴリズムの学び方
-
アルゴリズムが難しすぎて理解できない?それはあなたがこれらの模擬サイトについて知らないことです
1. データ構造とアルゴリズムの違い
データ構造とアルゴリズムの違いを理解していない学生が多く、データ構造にアルゴリズムが含まれていると考えている学生もいます。
実際には、文字通りの意味から大まかなアイデアを得ることができます.データ構造は主にデータの組織的な形式を説明しています. 言い換えれば, 私はこれらのデータをどのように保存したいかなので、リスト、ヒープ、スタック、ツリーがあります. 、およびグラフ. これはデータです. 構造の焦点.
アルゴリズムは、リスト内の要素を並べ替える方法や、現在のストレージ構造で最大数と最小数を見つける方法などのアイデアに焦点を当てていますか? まっ、ぶっちゃけ、現実の問題を解決しようという発想です。そのため、分割統治思考、貪欲思考、動的計画法などの古典的なアルゴリズムが存在します。
2. データ構造の学び方
データ構造に関して、私が言いたいのは、4 つの中で最も単純で最も基本的なものだということです。データ構造がなければ、ほとんどすべてのプログラムが失敗するため、データ構造について議論するときは、アルゴリズムについて話す必要があることがよくあります。
単純に共通のデータ構造を習得することは、繊細な機器を解体するのと同じくらい興味深く簡単です。プログラム内のデータ構造の機能が機器コンポーネントと非常に似ているからといって、データ構造が異なれば特性も異なるため、データ構造をよく学びたい場合は、図は必須の武器です。
ここでは、中国の大学で浙江大学が提供している「データ構造」コースを強くお勧めします。これは、一般的に使用されるデータ構造とアルゴリズムをカバーしています。
https://www.icourse163.org/course/ZJU-93001
教材や参考書で補う「Big Talk Data Structure」を強力に推進 表紙を見ただけで本書のスタイルがわかる
そうです、これは有名な「Big Talk Design Patterns」の作者であり、絶対にトップです。
3. アルゴリズムの学び方
アルゴリズムのコースはデータ構造のコースと組み合わされることが多く、大学によっては「データ構造とアルゴリズム」と「アルゴリズムの設計と分析」の 2 つのコースがあります。
アルゴリズムを学ぶルーチンは非常に単純で、もっと読んで、もっと書いて、もっとコンピューターを使って、アイデアの集まりなので、たくさん読んだら、先生がいなくても自然と身につくようになります。
ブラッシングの質問に関しては、多くの学生は、LeetCode をブラッシングする必要があることを知っています。
LeetCode 質問バンク: (2123 質問)
https://leetcode-cn.com/problemset/all/
問題数は全部で2,000問以上あり、難しい問題もあり、1日10問でも最低半年は勉強しなければなりません。これは明らかにほとんどの学生には適していません。
したがって、コアで最も重要な一連の質問を見つける必要があります。つまり、
たとえば、時間がない場合は、まず「プログラマーインタビュー集」で合計 109 問の問題をブラッシュアップできます。
https://leetcode-cn.com/problem-list/xb9lfcwi/
ブラッシング終了後、時々「ソードポインターオファー」の全75問をブラッシングできます。
https://leetcode-cn.com/problem-list/xb9nqhhg/
この2冊は面接で出題頻度の高い質問をまとめたものなので、当然ながら多くの話題が重なっています。これも、この 2 冊の重要性を示しています。
インタビューを専門とする場合は、次の 2 つの優れた本をお勧めします。
本「Programming Pearls」の豆板スコアは非常に高く、9 点です。
この本の最大の特徴は、膨大なデータの処理スキルについて多くのことを語っていることです。これは、他のアルゴリズムの本ではめったにカバーされない場合があります。面接中、特に学校の採用面接では、大量のデータ処理に関する質問がよく聞かれます。視野を広げるためでも、インタビューに対応するためでも、この本は読む価値があります。
「The Beauty of Programming」という本には多くの著者がいて、そのほとんどが Microsoft のエンジニアであるため、本の質は保証されています。ただし、ここでのアルゴリズムのトピックは少し難しく、あまり体系的ではないため、インタビューの部分に含めました。一定の基礎があり、アルゴリズムの問題を掘り下げたい場合、または Google や Facebook などの企業にインタビューしたい場合は、この本の質問を受けて、まず自分自身をテストできます。
もちろん、Google 兄弟によって要約された高頻度のインタビュー アルゴリズム演習のコレクションも持っています。これには、レイアウトとコンテンツの両方で共通のデータ構造とアルゴリズムの要約が含まれており、非常に優れています。
これらすべての本とオープニング マインド マップを用意しました。必要な方は予備のアカウントから直接入手できます。
4. アルゴリズムが難しすぎて理解できませんか? だからあなたはこれらの模擬サイトがあることを知りませんでした
このアルゴリズムの難しさは、頭の中でそのステップを抽象化する方法がないことです。
幾何学の問題を解くのに苦労した少年にとって、それはさらに致命的でした.
今日は、アルゴリズムの視覚化に関するいくつかの Web サイトをお勧めします。
そうです、コードを書いた後、彼らがどのように結果を得るかを段階的に見ることができます。
現在、ウェブサイトは中国語、インドネシア語、日本語、その他の多言語バージョンをサポートしています。
最も重要なことは、ほぼすべてのアルゴリズムが含まれていることです! ! ! !
検索オプションでは、キーワードに基づいて必要なアルゴリズムを見つけることができます。
特定のアルゴリズムをクリックすると、電子講義モードとサンプル モードの 2 つの方法で視覚的に表示されます。そのうち、お手本モードはアニメーションの形で提示され、アニメーションの早送りと巻き戻しを制御できます.e-レクチャーモードは、知識ポイントを説明するモードで提示され、進行を手動で制御できます.ページ。どちらの方法も、各ステップの手続き型コードを示すのに役立ちます。
次に、次の図に示すように、バブル ソートの実行プロセスを示します。
または、数値のカスタム セットを作成し、アニメーションで「アルゴリズム」を表示することもできます。
さらに、オンラインテストもサポートされています〜
2、https://algorithm-visualizer.org/アルゴリズム
Algorithm Visualizer では、誰もがアルゴリズム操作の全プロセスを明確に見ることができ、非常に直感的で誰でも簡単に習得できます。
ウェブサイトが 3 つの部分に分かれていることがはっきりとわかります. 一番左がアルゴリズムディレクトリです. 興味のあるアルゴリズムを選択できます. 現在, 二分木, グラフ, ソートアルゴリズム, 動的などの多くのアルゴリズムが含まれています.プログラミングやその他の古典、アルゴリズム。中央の領域は、主にアルゴリズムのデモと実行ログ用です。右側にはコードとアルゴリズムの実行ボタンがあります。
次の図に示すように、これを使用してバブル ソートの実行プロセスを示します。
同時に、それはオープンソースです. 現在、プロジェクトの人気を示すのに十分な 35K の星があります. ここでは、アルゴリズムを学びたいすべての人にお勧めします.
https://github.com/algorithm-visualizer/algorithm-visualizer
3、https://www.cs.usfca.edu/~galles/visualization/Algorithms.html
現在、次の図に示すように、共通の配列、リンクされたリスト、キュー、二分探索木、赤黒木、さまざまな並べ替えなど、一般的に使用されるデータ構造とアルゴリズムの多くの視覚化があります。
たとえば、次の図に示すように、二分探索木をシミュレートするために使用します。
次の図に示すように、これをもう一度使用して、クイック ソート アルゴリズムを示してみましょう。
5. PC スキルを向上させるには、オンライン ジャッジ システムに頼る必要があります。
現在、学校の新入社員はすべてオンライン試験であり、実行可能なコードを直接書く必要があります。
一部の学生は、コンピューターの使用経験がなく、提出方法さえ知りません。設計したプログラムを、事前に設定されたさまざまなテスト ケースに適合させる方法は言うまでもありません。テストケースにどれだけ長く合格できるかが、獲得できるポイントの鍵です。
したがって、試験で使用するコンピュータシステムを使用して、事前に練習し、感覚をつかむことが非常に必要です。
現在、多くのオープンな審査システムがあります.ここには、さまざまな種類の OJ Web サイトが集められています.機会があれば、見てみてください.
1. 私が強くお勧めするいくつか
北京大学 POJ poj.org/
中国で最も人気のある OJ の 1 つで、あらゆる種類の難しい問題があります。
杭州典子大学 HDUOJ http://acm.hdu.edu.cn/
中国で最も人気のある OJ の 1 つで、多数のトピックと幅広い情報源があります。
UVA https://uva.onlinejudge.org/
問題数が最も多い、世界最大かつ最古の OJ の 1 つです。ブラウジングには FQ が必要です。
codeVs http://codevs.com/
今日最大の中国 OJ の 1 つであるそのラダー機能により、プレイヤーは難易度に応じてさまざまなアルゴリズムを練習できます。codevsは私が最初に出会ったOJでもあり、豊富な問題集と適度な難易度で、無条件に現在の間違いに対する答えを確認することができます。ウェブマスター WPH95 は、将来的に CODEVS を AI やその他の側面に拡張したいと考えていると報告されています。詳細は不明ですが、それでもOJの強力なラインとしては申し分ありません。
OJの気鋭の新人は瞬く間にOJ評価の高いシェアを占め、CODEVSのラダー機能と同様の機能を備え、プレイヤーを段階的に成長させることができます。個人的には出題の難易度分類が適切ではないと思うのですが、なぜ「普及+改善-」でもある出題の難易度に大きな差があるのでしょうか?オンライン IDE プログラミングをサポートします。
そのコード公開プランでは、この質問を送信して 60 ポイントに達し、コード公開プランに参加すると、他の人のコードを表示できます。
Big Vision オンライン評価 BZOJ http://www.lydsy.com/JudgeOnline/
出題難易度は県級以上がほとんどですが、アクセスするには購入許可が必要な出題もあります。
UOJ http://uoj.ac/
難易度 NOIP で UER、難易度 Provincial で UR を保持します。競技問題の質は非常に高く、テスターのほとんどは現役のトレーニングチームの選手です。
クリアオレンジ評価ツインセン http://www.tsinsen.com/
トレーニング チームの宿題の Web サイト。近年の内容は公開されていません。
ACドリーム http://acdream.info/
2.カレッジ型OJ
湖南師範大学高等学校 vijos https://vijos.org/
学君中学校 OJ http://www.hzxjhs.com:83/
河南実験中学校 OJ http://cojs.tk/cogs/index.php
南陽理工大学http://acm.nyist.net/JudgeOnline/problemset.php
北京大学オンライン評価http://openjudge.cn/
多くの大学が課題を提出するためのコンテストを開始する場所のようです。2015 年に NOI の Web サイトで NOI 試験の問題集をこの Web サイトで NOI 問題バンク グループから出題することが発表されましたので、詳細については、この Web サイトは OIERS の多くの訪問を歓迎します。
バイイ中学校のマルクールhttp://www.marcool.net/home/index.htm 浙江大学の ZOJ http://acm.zju.edu.cn/onlinejudge/
西南科学技術大学 SWUST OJ http://acm.swust.edu.cn/
(学内学生のみ登録可)
建蘭中学校 OJ https://school.jloj.cn/oj-plus/
天津大学 OJ http://acm.tju.edu.cn/toj/
THIMUS OJ http://acm.timus.ru/
南海大学OJ http://acm.nankai.edu.cn/
華中科技大学 OJ http://acm.hust.edu.cn/
チチハル大学 OJ http://www.smartoj.com/
浙江工科大学 OJ
http://acm.zjut.edu.cn/system/messageInfoAction.do?method=initIndexPage
サラトフ州立大学 OJ http://acm.sgu.ru/
電子科学技術大学http://acm.uestc.edu.cn/#/
上海交通大学 OJ http://acm.sjtu.edu.cn/OnlineJudge/
中国科学技術大学 OJ http://acm.ustc.edu.cn/ustcoj/
寧波工科大学https://ac.2333.moe/
北京師範大学http://acm.bnu.edu.cn/v3/
3.無料OJ
九度OJ http://ac.jobdu.com/problemset.php
RQNOJ http://www.rqnoj.cn/
RQNOJは国内OJ(Informatics Online Assessment)オープンプラットフォームの開発・運営の先駆け
tyvj http://tyvj.cn/
主に情報科学の大会で、2009年に設立され、現在は清北学院の傘下にあるようです。(そういえば、北京の青北に行ったときに大ラッシュを切りましたが、まだ取り下げられていません)
4.競技OJ/コミュニティOJ/その他海外OJ
Codeforces は、コンピューター プログラミング愛好家向けのオンライン評価システムを提供するロシアの Web サイトです。このサイトは、サラトフ州立大学のグループによって作成および運営されています。TC http://www.topcoder.com/tc
トップコーダー コミュニティは何百万人ものコーダーによってサポートされているため、多くの挑戦的なプロジェクトについて学び、それに基づいて追加のお金を稼ぐことができます. 毎日または毎週のコーディング チャレンジに参加できます。このコミュニティが提供するプロジェクトは、初心者にとって非常に挑戦的で難しいものですが、試す価値があります。
CodeChef は、Directi によって作成された開発者コミュニティであり、開発者が練習、競争、進歩するためのプラットフォームを提供します。コミュニティはコーディング コンテストの質問の大規模なコレクションをホストしており、他の人が回答した以前のコーディング チャレンジのソース コードにアクセスできます。コミュニティでは難易度も設定されており、自分の条件に合わせてチャレンジを選ぶことができます。
ベストコーダー
http://bestcoder.acmcoder.com/
クロアチアコシ
ポーランド メイン
ポーランド語 SPOJ
日本JOI
http://www.ioi-jp.org/index.html
LIGHTOJ http://www.lightoj.com/login_main.php?url=index.php
AOJ http://judge.u-aizu.ac.jp/onlinejudge/
5.OJに挑戦
Project Euler PE https://projecteuler.net/ Project Euler は、世界で最も人気のあるプログラミング チャレンジ Web サイトである可能性があり、プロジェクトの初期には数十万人のユーザーがいて、その影響力を十分に示しています。Project Euler は、魅力的な数学の世界に関心のある人々のために、問題解決のスキルと楽しみを奨励し、挑戦し、開発することに専念しています。
Leetcode は、米国のオンライン プログラミング Web サイトで、主に主要な IT 企業から筆記試験と面接の質問を集めており、新卒者が就職するためのまれで優れたヘルパーです。
このWebサイトの利点は、テストデータと、出力と正しい出力が何であるかを教えてくれることです。これは、誰もがデバッグして学ぶのに便利です. 現在、C++ と Java のみがサポートされています。
HackerRank Web サイトは、コーディング パズルと実際に遭遇するコーディングの問題に基づいたコーディング プログラマー向けの新しいソーシャル プラットフォームです。HackerRank は、ベンチャー キャピタル会社 Y Combinator の支援を受けています。
このコミュニティでは、さまざまなコーディング パズル、ゲーム ウイルス、および現実世界のコーディングの問題と課題を提供し、ハッカーがこのコミュニティでコミュニケーションを取り、議論し、課題を受け入れることを可能にします。HackerRank は、その名前が示すように、オンライン リーダーボードやその他の競争要素も提供します。
6.OJを学ぶ
コンテンツは多いように見えますが、実際には数冊の本と一連のビデオを推奨しているだけで、リストされている Web サイトは学習専用です。
これらの内容を学べば、アルゴリズムは非常にしっかりしていると言うべきで、学校の採用であろうと仕事であろうと、すでに非常に十分です。
さて、この記事はここまでです。皆さんが思いのままにアルゴリズムを学んでいただければ幸いです。
私はQi Jianです。未来の自分に今の自分を嫌われないように、一緒に頑張りましょう。
よろしくお願いします。