コーディング面接でよく聞かれるアルゴリズム関連の概念トップ 10 を紹介します。簡単な例を使ってこれらの概念を説明します。これらの概念を完全に理解するにはより多くの努力が必要なので、このリストはあくまでも入門として意図されています。この記事では、Java の観点から問題を検討し、次の概念について説明します。 1. 文字列 2. リンクリスト 3. 木 4. グラフ 5. ソート 6. 再帰と反復 7. 動的プログラミング 8. ビット操作 9. 確率の問題 10. 順列と組み合わせ 1. 文字列 IDE にコード自動補完機能がない場合は、次の方法を覚えておいてください。
2. リンクリスト Java では、リンク リストの実装は非常に簡単です。各ノード Node には値 val と、次のノードを指すリンク next があります。
リンク リストの 2 つの有名なアプリケーションは、スタックとキューです。 スタック:
列:
3. 木 ここでのツリーは通常、バイナリ ツリーを指し、各ノードには次のように左の子ノードと右の子ノードが含まれます。
木に関連するいくつかの概念を次に示します。
翻訳者注: 完全二分木は、漠然と完全二分木とも呼ばれます。完全な二分木の例としては、特定の深さにある人の祖先グラフが挙げられます。これは、すべての人が 2 人の生物学的な親を持つ必要があるためです。完全な二分木は、左側にいくつかの追加の葉ノードがある完全な二分木として見ることができます。質問: 完全二分木と完全二分木の違いは何ですか? (参考: http://xlinux.nist.gov/dads/HTML/perfectBinaryTree.html) #p# 4. グラフ グラフ関連の問題は、主に深さ優先探索と呼吸優先探索に焦点を当てています。 以下はグラフ上の幅優先探索の簡単な実装です。 1) GraphNodeを定義する
2) キューを定義する
3) キューを使用して幅優先探索を実装する
出力:
5. ソート 以下は、さまざまなソート アルゴリズムの時間計算量です。これらのアルゴリズムの基本的な考え方については、Wiki を参照してください。
また、いくつかの実装/デモがあります: Counting sort、Mergesort、Quicksort、InsertionSort。
#p# 6. 再帰と反復 プログラマーにとって、再帰は組み込みの考え方であるべきであり、簡単な例で説明できます。 質問: 階段には n 段あり、一度に 1 段または 2 段しか上れません。階段を上る方法は何通りありますか? ステップ 1: 最初の n ステップと最初の n-1 ステップの関係を見つけます。 n 段を歩くには、n-1 段目から 1 段登るか、n-2 段目から 2 段登るかの 2 つの方法しかありません。 f(n) が n 番目のステップに登る方法の数である場合、f(n) = f(n-1) + f(n-2) となります。 ステップ 2: 開始条件が正しいことを確認します。 0 = 0; 1 = 1;
再帰法の時間計算量は、次のように冗長な計算が多いため、n に対して指数関数的に増加します。 5 倍 単純なアイデアは、再帰を反復に変換することです。
この例では、反復処理にかかる時間が短くなります。再帰と反復処理も確認することをお勧めします。 7. 動的プログラミング 動的プログラミングは、次のような性質の問題を解決するための手法です。 問題は、より小さなサブ問題の解決によって解決できます。 いくつかのサブ問題の解は複数回計算する必要がある場合があります (翻訳者注: これはサブ問題の重複性によるものです)。 サブ問題の解はテーブルに保存されるため、各サブ問題は 1 回だけ計算すれば済みます。 時間を節約するには余分なスペースが必要です。 階段登り問題は上記の 4 つの特性を完全に満たしているため、動的計画法で解決できます。
8. ビット操作 ビット演算子:
指定された数値 n の i 番目の桁を取得します (i は 0 から数えられ、右から始まります)
たとえば、数字 10 の 2 番目の数字を取得するには、次のようにします。 i=1, n=10 9. 確率の問題 確率の問題を解くには、通常、問題を適切にフォーマットする必要があります。次に、そのような問題の簡単な例を示します。 部屋には 50 人がいます。そのうち少なくとも 2 人が同じ誕生日である確率はどれくらいでしょうか。 (うるう年を無視すると、1年は365日です) 何かの確率を計算することは、多くの場合、まずその逆を計算することに変換できます。この例では、すべての人が異なる誕生日である確率を計算できます。これは、365/365 + 364/365 + 363/365 + 365-n/365 + 365-49/365 となり、少なくとも 2 人の誕生日が同じである確率は、1 - この値になります。
確率を計算する(50) = 0.97 10. 順列と組み合わせ 組み合わせと順列の違いは、順序が重要かどうかです。 オリジナルリンク: http://www.programcreek.com/2012/11/top-10-algorithms-for-coding-interview/ 翻訳リンク: http://blog.jobbole.com/52144/ |
<<: 通信ネットワークにおけるOSPFプロトコルの適用とアルゴリズムの最適化
>>: IBC識別パスワードSM9アルゴリズムに基づくID認証ソリューション
[[411622]]正確さは集計の設計に直接影響するため、エンティティと値オブジェクトを区別すること...
家族、Tik TokのAI拡大画像に本当に笑い死にしそう——観た後に「意外」で「すごく怒る」というの...
暑い夏には、スーパーマーケットにちょっとしたおやつを買いに行くだけでも大量の汗をかきます。扇風機を使...
導入SOTA 事前トレーニング済みモデルを使用して、転移学習を通じて現実世界のコンピューター ビジョ...
今年初め、ChatGPTはAIアプリケーションの開発を刺激する火花のようなもので、AI業界は開発の急...
Mixtral 8x7B の発売は、オープン AI の分野、特に Mixture-of-Expert...
[[378797]]画像ソース: unsplashマッキンゼー・グローバル・インスティテュートの調...
C# はデジタル変換のための中国語アルゴリズムを記述します最近、プロジェクト上の理由により、C# で...
空でない整数の配列が与えられた場合、最も頻繁に出現する上位 k 個の要素を返します。例1:入力: n...
今日の社会では貧困がまだ存在しています。 [[275832]]国連開発計画(UNDP)のデータによる...
攻撃対象領域が拡大し続け、攻撃手法がより高度化するにつれ、セキュリティ業界は現在、深刻な「セキュリテ...
皆さん、大規模言語モデル(LLM)の長年の課題がついに解決されました!つい最近、香港中文大学とMIT...
2016年、Googleの人工知能プログラムAlphaGoが世界的囲碁プレイヤーのイ・セドルと対戦し...
近年、大手テクノロジー企業は人工知能と機械学習の研究に力を入れています。その中でも、Googleはこ...