タグ付けされた質問 「algorithm」

アルゴリズムは、問題に対する抽象的な解決策を定義する明確に定義された一連のステップです。このタグは、問題がアルゴリズム設計に関連している場合に使用します。


13
千の電話番号を保存する最も効率的な方法
これはグーグルのインタビューの質問です: 保存する電話番号は約10桁で、約1000あります。あなたは、それぞれの最初の5桁が数千の数字で同じであると仮定することができます。次の操作を実行する必要があります。指定された番号が存在するかどうかを検索します。b。すべての番号を印刷 これを行う最も効率的なスペース節約方法は何ですか? 私はハッシュテーブルとハフマンコーディングに答えましたが、面接担当者は私が正しい方向に進んでいないと述べました。ここで私を助けてください。 接尾辞トライを使用できますか? 理想的には、1000の数値を格納するには数値あたり4バイトがかかるため、1000の数値を格納するには全体で4000バイトがかかります。量的には、ストレージを4000バイト未満に減らしたいと思っています。これは、面接官が私に説明したものです。

3
ダイクストラのアルゴリズムが減少キーを使用するのはなぜですか?
ダイクストラのアルゴリズムは私に教えられました while pqueue is not empty: distance, node = pqueue.delete_min() if node has been visited: continue else: mark node as visited if node == target: break for each neighbor of node: pqueue.insert(distance + distance_to_neighbor, neighbor) しかし、私はアルゴリズムに関していくつかの読書をしてきました、そして私が見る多くのバージョンは挿入ではなく減少キーを使用しています。 これはなぜですか、2つのアプローチの違いは何ですか?

6
重複する長方形を間隔を空けるアルゴリズム?
この問題は実際にはロールオーバーを扱います。以下のように一般化します。 2Dビューがあり、画面の領域内に多数の長方形があります。それらのボックスが互いに重ならないように広げて、最小限の移動でのみ調整する方法を教えてください。 長方形の位置は動的であり、ユーザーの入力に依存するため、長方形の位置はどこでもかまいません。 添付画像は問題と望ましい解決策を示しています 実際の問題は、実際にはロールオーバーを扱います。 コメントの質問に対する回答 長方形のサイズは固定されておらず、ロールオーバー内のテキストの長さに依存します 画面サイズについては、今のところ長方形の大きさは画面サイズで十分だと思った方がいいと思います。長方形が多すぎてアルゴが解決策を生成しない場合は、コンテンツを微調整する必要があります。 「最小限に移動」するための要件は、絶対的なエンジニアリング要件よりも無感覚のためのものです。2つの長方形の間隔を広げることで2つの長方形を離すこともできますが、GUIの一部としては見栄えがよくありません。アイデアは、ロールオーバー/長方形をそのソースに近づけることです(それを黒い線でソースに接続します)。したがって、「xの1つだけを移動」または「xの半分を両方移動」のどちらでも問題ありません。

30
アルゴリズム:配列から重複した整数を削除する効率的な方法
この問題は、マイクロソフトへのインタビューから得ました。 ランダムな整数の配列を指定して、重複した数値を削除し、元の配列の一意の数値を返すアルゴリズムをCで記述します。 たとえば、入力:{4, 8, 4, 1, 1, 2, 9} 出力:{4, 8, 1, 2, 9, ?, ?} 注意点の1つは、予想されるアルゴリズムでは配列を最初にソートする必要がないことです。また、要素が削除された場合、次の要素も前にシフトする必要があります。とにかく、要素が前方にシフトされた配列の末尾の要素の値は無視できます。 更新:結果は元の配列で返される必要があり、ヘルパーデータ構造(ハッシュテーブルなど)は使用しないでください。ただし、注文を保存する必要はないと思います。 Update2:なぜこれらの非現実的な制約が不思議に思う人のために、これはインタビューの質問であり、これらの制約はすべて、私がさまざまなアイデアを思いつくことができる方法を考えるために思考プロセス中に議論されます。

5
アルゴリズムに慣れていない記号:doesはどういう意味ですか?[閉まっている]
閉まっている。この質問はスタックオーバーフローのガイドラインを満たしていません。現在、回答を受け付けていません。 この質問を改善してみませんか?Stack Overflowのトピックとなるように質問を更新します。 2年前休業。 この質問を改善する 私はアルゴリズム(A *に基づくパス検索アルゴリズムです)について読んでいますが、これには私がよく知らない数学記号が含まれています:∀ ここにコンテキストがあります: v(s)≥g(s)= mins'∈pred(s)(v(s ')+ c(s'、s))∀s≠s start 誰かが∀の意味を説明できますか?

30
Pythonを使用したクイックソート
私はpythonをまったく使っていないので、それにクイックソートを実装しようとしています。誰かが私のコードを完成するのを手伝ってくれませんか? 3つの配列を連結して出力​​する方法がわかりません。 def sort(array=[12,4,5,6,7,3,1,15]): less = [] equal = [] greater = [] if len(array) > 1: pivot = array[0] for x in array: if x < pivot: less.append(x) if x == pivot: equal.append(x) if x > pivot: greater.append(x) sort(less) sort(pivot) sort(greater)



20
左から右、上から下にソートされた2D配列の数値を検索するにはどうすればよいですか?
私は最近このインタビューの質問を与えられました、そして私はそれに対する良い解決策が何であるかについて知りたいです。 配列のすべての数値が左から右、上から下へと昇順である2次元配列が与えられたとしましょう。 ターゲット番号が配列内にあるかどうかを検索して判別する最良の方法は何ですか? さて、私の最初の傾向は、データがソートされているため、バイナリ検索を利用することです。O(log N)時間で数値が単一行にあるかどうかを判断できます。しかし、それは私を捨てる2つの方向です。 私がうまくいくかもしれないと思ったもう一つの解決策は、真ん中のどこかから始めることです。真ん中の値が私の目標よりも小さい場合、それは真ん中からマトリックスの左の正方形の部分にあると確信できます。次に、対角線上に移動して再度チェックし、ターゲットの数に磨きをかけるまで、ターゲットが入る可能性のある正方形のサイズを小さくします。 この問題を解決する上で何か良いアイデアはありますか? 配列の例: 左から右、上から下に並べ替えました。 1 2 4 5 6 2 3 5 7 8 4 6 8 9 10 5 8 9 10 11

7
多項式時間と指数時間
誰かが多項式時間、非多項式時間、および指数時間アルゴリズムの違いを説明できますか? たとえば、アルゴリズムにO(n ^ 2)時間がかかる場合、どのカテゴリに属しますか?
90 algorithm 

7
タグシステムの実装方法
SOで使用されているようなタグシステムを実装するのが最善の方法は何だろうと思っていました。私はこれを考えていましたが、優れたスケーラブルなソリューションを思い付くことができません。 私は基本的な3つのテーブルソリューションを持つことを考えていました:tagsテーブル、articlesテーブル、そしてテーブルを持つことtag_to_articles。 これはこの問題の最善の解決策ですか、それとも代替手段がありますか?この方法を使用すると、テーブルは時間の経過とともに非常に大きくなり、検索にはあまり効率的ではないと思います。一方、クエリが高速に実行されることはそれほど重要ではありません。

19
どうすればグーグルはそんなに速くなることができますか?
ロックされています。この質問とトピックへの回答はロックされています。質問はトピックから外れていますが、歴史的に重要です。現在、新しい回答や相互作用を受け入れていません。 Googleが非常に高速にクエリを処理できるようにするテクノロジーとプログラミングの決定は何ですか? 私は何かを検索するたびに(1日に数回のうちの1つ)、1秒近くまたは1秒未満で結果を提供する方法をいつも驚かせます。これを実現するために、どのような構成とアルゴリズムを導入できますか? 補足:デスクトップアプリケーションを置いて自分のマシンで使用したとしても、おそらくGoogleの半分の速度ではないと考えるのは、圧倒的な考え方です。私が言うことを学び続けなさい。 提供されたすばらしい答えとポインタのいくつかを以下に示します。 Googleプラットフォーム マップリデュース 慎重に作成されたアルゴリズム ハードウェア-クラスターファームと大量の安価なコンピューター キャッシュと負荷分散 Googleファイルシステム

4
100個の移動するターゲット間の最短経路を見つけるにはどうすればよいですか?(ライブデモが含まれています。)
バックグラウンド 次の図は問題を示しています。 赤い丸をコントロールできます。ターゲットは青い三角形です。黒い矢印は、ターゲットが移動する方向を示します。 最低限のステップですべてのターゲットを収集したい。 ターンごとに、左/右/上または下に1ステップ移動する必要があります。 ボードに表示されている指示に従って、ターゲットを1回転するたびに1ステップ移動します。 デモ この問題の再生可能なデモをGoogle appengineで公開しました。 これは私の現在のアルゴリズムが最適ではないことを示しているので、誰かが目標スコアを上回ることができるかどうか非常に興味があります。(これを管理したら、おめでとうメッセージが表示されます!) 問題 私の現在のアルゴリズムは、ターゲットの数に非常によく対応していません。時間は指数関数的に増加し、16匹の魚ではすでに数秒です。 32 * 32のボードサイズと100個の移動ターゲットでの答えを計算したいと思います。 質問 すべてのターゲットを収集するための最小ステップ数を計算するための効率的なアルゴリズム(理想的にはJavaScript)とは何ですか? 私が試したこと 私の現在のアプローチはメモ化に基づいていますが、それは非常に遅く、常に最良のソリューションを生成するかどうかはわかりません。 「特定のターゲットのセットを収集して特定のターゲットに到達するための最小ステップ数はいくつですか?」の副問題を解決します。 サブ問題は、前のターゲットが訪問したことについての各選択肢を調べることにより、再帰的に解決されます。以前のターゲットのサブセットをできるだけ早く収集し、最終的な位置から現在のターゲットにできるだけ早く移動することが常に最適であると思います(ただし、これが有効な仮定であるかどうかはわかりません)。 これにより、n * 2 ^ n状態が計算され、非常に急速に増加します。 現在のコードを以下に示します。 var DX=[1,0,-1,0]; var DY=[0,1,0,-1]; // Return the location of the given fish at time t function getPt(fish,t) { var i; var x=pts[fish][0]; var …


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