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

数学とコンピュータサイエンスでは、アルゴリズムは、関数を計算するための明確に定義された命令の有限リストとして表現される効果的な方法です。アルゴリズムは、計算、データ処理、および自動推論に使用されます。

5
線分の移動に関するインタビューパズル
長さの数直線上のM、0 < M <= 1,000,000,000指定した、N(1 < N <= 100,000点の対の整数)。各ペアで、最初のポイントはオブジェクトが現在配置されている場所を表し、2番目のポイントはオブジェクトを移動する必要がある場所を表します。(覚えておいてくださいsecondポイントがかもしれ小さいよりfirst)。 ここで、その時点0から始めて、1オブジェクトを保持できるカートがあるとします。すべてのオブジェクトを最初の位置からそれぞれの最終位置に移動し、数直線に沿って(変位ではなく)最短距離を移動したいとします。あなたはポイントで終わる必要がありMます。 今、私はこの問題をより簡単な問題に削減しようとしています。正直なところ、私は力ずくの(おそらく貪欲な)解決策を考えることすらできません。しかし、私の最初の考えは、後方への動きを2つの前方への動きに縮退させることでしたが、それがすべての場合に機能するとは思われません。 私はこれらの3サンプルテストケースをここに引き出しました: 最初のテストケースへの答えは12です。まず、redポイントでアイテムを受け取ります0。次に、ポイント6(距離= 6)に移動し、redアイテムを一時的にドロップして、アイテムを拾いgreenます。次に、ポイント5(距離= 1)に移動してgreenアイテムをドロップします。次に、ポイント6(距離= 1)に戻ってredドロップしたアイテムを拾い、ポイント9(距離= 3)に移動してから、ポイント10(距離= 1)に移動してシーケンスを終了します。 移動した総距離はでした6 + 1 + 1 + 3 + 1 = 12。これは可能な最小距離です。 他の2つのケースにはの答えがある12と思います。しかし、私はそれを解決するための一般的なルールを見つけることができません。 誰かアイデアはありますか?
10 algorithms  math 

3
効率的なバスローディング
これはずっと前にバス旅行会社でやったことで、結果に満足することはできませんでした。私は最近、その古いプロジェクトについて考えていて、その問題をもう一度見たいと思いました。 問題: バス旅行会社には、乗客定員が異なる複数のバスがあります(50人の乗客のバス15台、30人の乗客のバス25台など)。彼らは非常に大きなグループ(グループあたり300人以上の乗客)への輸送を提供することに特化しました。各グループは一緒に旅行する必要があるため、無駄を減らすために艦隊を効率的に管理する必要がありました。 たとえば、88人の乗客は、2人の50人乗りのバス(12人の空席)よりも3人の30人乗りのバス(2人の空席)でよりよくサービスされます。別の例では、75人の乗客は、1つの50人の乗客バスと1つの30人の乗客バス(種類の混合)でよりよくサービスされます。 これを行うための良いアルゴリズムは何ですか?
10 algorithms 

4
ソートされた浮動小数点数の配列を検索して、入力値を囲んでいる浮動小数点数のペアを見つける高速アルゴリズム
フロートの配列があり、最小から最大にソートされており、渡された入力値よりも大きいまたは小さい最も近いフロートを選択できる必要があります。この入力値は、必ずしも配列内の値として存在するわけではありません。 素朴なアプローチは、配列全体で単純な線形検索を行うことです。次のようになります。 void FindClosestFloatsInArray( float input, std::vector<float> array, float *min_out, float *max_out ) { assert( input >= array[0] && input < array[ array.size()-1 ] ); for( int i = 1; i < array.size(); i++ ) { if ( array[i] >= input ) { *min = array[i-1]; *max = array[i]; } …
10 c++  algorithms 

3
InterviewStreetで質問を解決する方法を学ぶ良い方法[終了]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 4年前休業。 ロックされています。この質問とトピックへの回答はロックされています。質問はトピックから外れていますが、歴史的に重要です。現在、新しい回答や相互作用を受け入れていません。 重複の可能性: 面接前の質問にどのように適応しますか? InterviewStreetは、企業がコーディング可能なプログラマーを見つけるためのフィルターとして機能する新しい会社です。私の問題は私の数学がかなり弱いことであり、たとえ最初からでも、彼らのサイトにあるこのような質問を解決できるように、それを勉強したいと思います。 Find the no of positive integral solutions for the equations (1/x) + (1/y) = 1/N! (read 1 by n factorial) Print a single integer which is the no of positive integral solutions modulo 1000007 さて、その質問への回答は投稿しないでください。InterviewStreetから直接取得されるため、ここに投稿しないでください。このスレッドで私が求めている答えではありません。私が求めているのは、SOコミュニティのハッカーの何人かがおそらく回答できるより根本的な質問です。 そのような質問にどのように準備しますか?このタイプの問題を解決する方法を研究/学習するために利用できるリソースは何ですか?これはMITオープンコースウェアでカバーされていますか?カーンアカデミー?特定の本?上記の問題の解決をどこから始めればよいのかさえわからないので、そのために実行できる手順を知りたいのですが。

5
プログラムで任意のコードの安全性を評価することは可能ですか?
最近、安全なコードについて多くのことを考えています。スレッドセーフ。メモリセーフ。セグフォールトセーフで自分の顔を爆発させない。ただし、質問を明確にするために、Rustの安全モデルを定義として使用します。 多くの場合、Rustの必要性によって証明されているunsafeように、同時実行など、キーワードを使用しないとRustに実装できない非常に合理的なプログラミングのアイデアがいくつかあるため、安全性の確保はネットでの問題です。unsafe。並行処理が完全にロック、ミューテックス、チャンネルやメモリ分離して安全か何を持って行うことができますが、これは作業が必要です外での錆の安全モデルのをunsafe、その後、手動で、というコンパイラを保証する「うん、私は私がやっているか知っていますこれは安全ではないように見えますが、完全に安全であることを数学的に証明しました。」 しかし、通常、これは手動でこれらのモデルを作成し、定理証明を使用してそれらが安全であることを証明することになります。コンピュータサイエンスの観点(可能か)と実用性の観点(宇宙の生命を奪うことになるか)の両方から、任意の言語で任意のコードを受け取り、それがそうであるかどうかを評価するプログラムを想像するのは合理的です錆びない」 警告: この問題の簡単な解決策は、プログラムが停止しない可能性があるため、停止の問題が失敗することを指摘することです。読者に提供されたプログラムが停止することが保証されているとしましょう 「任意の言語の任意のコード」が目標ですが、これはプログラムが選択された言語に慣れていることに依存していることはもちろん承知しています。

3
最もカロリーが均等な食事の取り方を選ぶ
私は1日に5回食事をし、週に7日あるので、各食事に7つのレシピがあり、合計35のレシピがあるとします。各レシピにはカロリー数があります。毎日、食事ごとに1つのレシピが含まれている必要があり、各レシピは特定の食事に固定されています(たとえば、ディナーにパンケーキを用意することはできません)。35のすべてのレシピがソリューションに含まれている必要があるため、週の間にレシピを繰り返すことはできません。 1日あたりのカロリー数が最も均等になるような食事の配置を見つけたいと思います。つまり、毎日消費される総カロリーの差を最小限に抑えたいと思っています。 これは宿題の問題ではありません—実際にはそうです!私はブルートフォースよりも優れたアプローチを思い付くことができず、7!^ 4の組み合わせがあります。

1
複雑な作業スケジュールのモデリング
私が表現して自動化しようとしている現実の問題があります。私はそれを次のように簡略化して抽象化しました: nの作業場所があります(P1、P2、...、Pn)。 各場所、Pnにはキー、Knがあります。 ワーカーがm人います(W1、W2、...、Wm)。 Pnで働くためには、労働者はKnを持たなければなりません。 各キーは、労働者が保持するか、取引所Eに残しておくことができます。 ワーカーはいつでもExchangeにアクセスして、要求されていないキーを取得したり、他のユーザーが使用できるようにいくつかのキーをドロップしたりできます。 現在、厳格な順序で完了する必要がある外因性の作業スケジュールがあります。例えば: 2016-04-21 W1はP6で働く必要があります 2016-04-21 W2はP3で働く必要があります **鍵の交換が必要です** 2016-04-22 W3はP3で働く必要があります 2016-04-22 W2はP6で働く必要があります 同じ日に決してではないが、スケジュールのある時点でPnで働く必要のある労働者はいくつもいる可能性がある 私たちは知っています: すべてのキーの開始場所(労働者またはEのいずれか) 各ワーカーが満たす必要がある将来の作業指示 それで、私はこの全体の状況をモデル化するのに苦労しています。データ構造とアルゴリズムを提案して、それを把握し、各ワーカーのエクスチェンジへのトリップの最適化を開始するために検討する必要がありますか? 私が最小限にしたいのは、Eへの旅行の総数です。2番目の目標は、労働者が不釣り合いな数の旅行をしないようにすることです。 前もって感謝します!!

2
タイムラプス写真に最適な圧縮アルゴリズム
約9,000枚のJPEG写真(約30Gb)を含むフォルダを持っています。これを何らかの圧縮でアーカイブします。通常、JPEGの圧縮はあまり効果的ではないことを理解していますが、これらの写真はタイムラプスのフレームであるため、ほとんどの画像間に非常に多くの共通点があります。この場合、通常よりもファイルサイズが小さくなる可能性がありますか?このシナリオで特にうまくいく可能性が高い特定の(一般的な)圧縮アルゴリズムはありますか?

4
このデータを保存する最も効率的な方法は何ですか?
私はいくつかの古いVBコードの書き換えを担当しています。私はそれがどのように機能するかを理解していますが、彼らがしたことを行うためのはるかに効率的な方法があるように感じます。それが何なのかわからない。これは、データ要件の点で私がする必要があるものと本当に似ている不自然な例です。 ユーザーは、GUIで車のメーカー、メーカー、モデル、色を選択する必要があります。次のような大きなテキストファイルがあります。 Ford Truck F150 red Ford Truck F150 blue Ford Truck F150 black Ford Truck F150 silver Ford Truck F250 red Ford Truck F250 green Ford Sedan Taurus red Ford Sedan Taurus green Ford Sedan Taurus white Ford... ... Subaru SUV Forester blue Subaru SUV Forester red Subaru SUV …

7
週次データシリーズ間のトランザクションを決定するためのアルゴリズム?
私は小さなレポートツール(sqliteバックエンド)を開発しようとしています。このツールは「トランザクション」元帳として最もよく説明できます。私がやろうとしていることは、毎週のデータ抽出からの「トランザクション」を追跡することです。 「新規」(または追加)- 抽出によって表示されていないため、アプリがこのリソースを以前に追跡していない可能性があるため、リソースはアプリにとって新しいものです。 「更新」(またはヒット)-そのリソースが最近使用されており、保存期間がもう1週間更新されています。 「削除」(またはドロップ)-このアイテムは、前回のレポート以降、使用されていません(オプションですが、リソースの需要の週ごとの変化をグラフ化するには便利です)。 私が持っているのは、私が制御できないレガシーのアーカイブ/レコード管理システムからの毎週のデータ抽出(パイプ区切りのフラットファイル)だけです。 各行は基本的にこれに蒸留することができます: resource_id | resource info | customer_id | customer_info サンプルデータ: 10| Title X | 1 | Bob 11| Another title | 1 | Bob 10| Title X | 2 | Alice 目標は、(最後のヒットに基づいて)Xか月間使用されていないリソースについて簡単にレポートできるようにすることです。リソースが人気がある場合、アクセスを容易にするためにリソースが保持される保持期間があります。18か月間使用されていないリソースは、他の場所で長期アーカイブ用にマークされています。 これは一般的な問題です。データセット間で何が新しい/同じ/削除されたかを判断するための汎用アルゴリズムがあるかどうか(dbと最新の抽出)

3
小さいボックスから作成できる最大のボックスを抽出する私のアルゴリズムは遅すぎる
キューブベースのワールド(Minecraft、Trove、Cube Worldなど)を想像してください。すべてが同じサイズのキューブで構成され、すべてのキューブが同じ種類です。 目標は、最も少ない数の長方形のボックスで世界を表すことです(立方体をマージしますが、凸状の形状(長方形のボックスの形状)を保持します)。私のアルゴリズムはこれで成功しましたが、そのパフォーマンスは意図した目的には遅すぎます。より速いアルゴリズムはありますか? 私のアルゴリズムの疑似C#コードは基本的に次のとおりです。 struct Coordinate { int x,y,z; }; //<-- integer based grid HashSet<Coordinate> world; // <-- contains all the cubes //width, height, and length represent how many cubes it spans struct RectangularBox { Coordinate coord; int width,height,length; } void Begin() { List<RectangularBox> fewestBoxes = new List<RectangularBox>(); while(world.Count > …

3
シャンティングヤードアルゴリズムにおける関数の優先順位
ウィキペディアで説明されているように、シャンティングヤードアルゴリズムを使用しています。 演算子を処理するときのアルゴリズムの説明は次のとおりです。 トークンが演算子o1の場合: 演算子スタックの一番上に演算子トークンo2があり、 o1 is left-associative and its precedence is less than or equal to that of o2, or o1 is right associative, and has precedence less than that of o2, 次に、オペレータースタックから出力キューにo2をポップします。 o1をオペレータースタックにプッシュします。 ただし、次の例を示します。 入力: sin max 2 3 / 3 * 3.1415 アルゴリズムが/トークンをヒットした場合、何が起こるかについての説明は次のとおりです。 Token | Action | Output …


3
文字列の数、各文字が偶数回出現する必要がある場合
私はしばらくの間、この問題に頭蓋骨をぶつけてきましたが、それは本当に私を苛立たせ始めています。問題は: 私は、文字のセットを持ってA、B、C、とD。長さがnあり、各文字が偶数回出現する必要がある場合、これらの文字から文字列を構築する方法をいくつも教えなければなりません。 たとえば、の答えn = 2は4です。 AA BB CC DD の答えn = 4は40です。これらの有効な文字列の一部は次のとおりです。 AAAA AABB CACA DAAD BCCB 私は論理を思いつくのに行き詰まっています。このためのDPソリューションがあると思います。これを介して私の方法を総当たり的にすることは問題外です:ソリューションの数は急速に膨大な数に成長します。 私はあらゆる種類のアイデアを紙に描いてみましたが、役に立ちませんでした。それらのほとんどすべては、それらの複雑さが大きすぎるために破棄しなければなりませんでした。ソリューションは、に対して効率的である必要がありますn = 10^4。 私のアイデアの1つは、実際の文字列を追跡するのではなく、各文字が偶数回または奇数回出現したかどうかを追跡することでした。このロジックを適用する方法を思いつきませんでした。 誰か助けてもらえますか?

4
ツリー内のすべてのノードのすべての子孫を生成する最も効率的な方法
ツリー(エッジのリスト、または親ノードから子ノードのリストへのマッピングのリストのいずれかとして格納)を取得するための最も効率的なアルゴリズムを探しています。すべてのノードについて、そのノードの子孫であるすべてのノードのリスト(リーフレベルと非リーフレベル)を生成します。 規模の関係上、実装は反省ではなくループを介して行う必要があります。理想的にはO(N)である必要があります。 このSOの質問は、ツリー内の1つのノードの答えを見つけるための標準的な合理的に明白なソリューションをカバーしています。しかし、明らかに、すべてのツリーノードでそのアルゴリズムを繰り返すことは非常に非効率的です(頭上からO(NlogN)からO(N ^ 2)へ)。 ツリーのルートは既知です。ツリーは完全に任意の形状です(例:N-naryではなく、いかなる形でもバランスが取れていない、形状または形式、均一な深さではない)-一部のノードには1〜2個の子があり、一部には30Kの子があります。 実用的なレベルでは(アルゴリズムには影響しないはずですが)、ツリーには100K〜200Kのノードがあります。

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