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

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

2
アルゴリズムの予想実行時間と平均実行時間はどういう意味ですか?
アルゴリズムの実行時間を分析したいとしましょう。入力サイズがnで、最悪の場合はO(n)で示される場合に、アルゴリズムの実行時間を見つけたいと言うことがあります。時々、アルゴリズムの予想時間を見つける必要があると言っている本/論文を見ます。また、平均実行時間が使用されることもあります。 「予想時間」とは何ですか?最悪の場合の時間ではなく、予想される時間を見つけることはどの場合に役立ちますか? 編集:予想実行時間と平均実行時間の間には微妙な違いがあると思いますが、よくわかりません。この投稿を通して、もしあれば正確な違いを知りたい。

8
初心者に共通のデータ構造に問題がありますか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 4年前に閉鎖されました。 Javaの2番目のコースを受講しています。データ構造に入ります。リンクされたリストで割り当てを行い、スタックになりました。リンクリストで苦労しました。スタックは少しトラブルを引き起こしましたが、はるかに簡単でした。 これらのアルゴリズムとデータ構造で苦労することを心配する必要がありますか?本当に把握していないように感じます。


11
擬似コードとアルゴリズムの違いは?
技術的には、これら2つの単語に違いはありますか、それとも同じ意味で使用できますか?どちらも、多かれ少なかれ、問題を解決するために続く論理的な一連の手順を説明しています。じゃない?それで、なぜ同じことを話すのであれば、なぜそのような単語を2つ実際に使用するのでしょうか? または、同義語でない場合、それらを区別するのは何ですか?どのようなコンテキストで、擬似コード対ワードアルゴリズムを使用することになっていますか?

4
NP完全問題またはNPの現実の問題
NP完全問題またはNPハード問題(ヒューリスティック、または最適以下のソリューションの追跡など)を仕事で定期的に解決する実際の例はありますか?スケジューリング、プランニング、VLSI設計などで発生することは知っていますが、今日これを定期的に行うプログラマーやエンジニアを雇用している主要産業のアイデアを得ようとしています。専門知識やライブラリ、たとえば組み合わせ最適化を開発する場合、プログラミングジョブの一部としてそれをどこで使用できますか? 個人アカウントはありますか?

2
名前のスペルを間違えにくいものを見つけるには?
ここに、データマイニングと洗練されたアルゴリズムを使用して解決できると思われる質問がありますが、その方法はよくわかりません。どのデータソースを使用し、どのアルゴリズムを適用するかについてのポインタは大歓迎です。 背景:私はポーランドウクライナ人の赤ちゃんを期待しているルーマニアハンガリー人であり、どの国に落ち着きたいのかについて、まだ心を決めていません。ご想像のとおり、特定の名前を選択することは非常に重要であり、熱い議論です。私の側から見ると、ある国から別の国に移動したときに誰かが私の名前のスペルを間違えたときに経験しなければならないすべての面倒にまだ心を痛めています。たとえば、場合にのみ、あなたが「Adriさんのことになったことを見つけるために、あなたはルーマニアに祝福されるだろう「エイドリアン」と呼ばれたE n」は、いくつかの公式のフランスの文書です。ですから、私の唯一の要件は、ヨーロッパの一部の国で赤ちゃんの名前のつづりを間違えないようにすることです。 問題の声明:フランス、ドイツ、スウェーデン、ポーランド、ルーマニアなどの国のセットを考えると、適切に発音された場合、地元の人々がつづりを間違えにくい名のリストを見つけてください。 より正式には、p(c、n)を、国cで名前nのスペルが間違っている確率を返す関数とします。与えられたCに国のセットをして p₀確率を、見つけるNように与えられた名前のセット すべてのためのn ∈ NおよびC ∈ C、P(C、N)<p₀ 最初の考え:中心的な問題はp(c、n)を実装する方法です。ヒューリスティックで近似することを試みることができます。明らかに、次の2つの場合に名前のつづりが間違っている可能性があります。 その国ではほとんど使われていません。 別の国の名前に似ていますが、その国ではあまり使われていません。 これら2つの質問に効率的に回答するために、ウィキペディアなどのインターネットをどのように使用できるかわかりません。1つの国で、かなり頻繁に使用される名前のみをどのようにリストしますか?同様に綴られたものをどのように探しますか?

4
一定時間と償却一定時間は実質的に同等と見なされますか?
一定時間(O(1))で追加とランダム削除を可能にするRandomQueueを書く必要があります。 私の最初の考えは、ある種の配列(ArrayListを選択しました)でそれをバックアップすることでした。配列はインデックスを介して常にアクセスできるためです。 しかし、ドキュメントを見ると、ArrayListsの追加はAmortized Constant Timeと見なされていることに気付きました。これは、追加には基になる配列(O(n))の再割り当てが必要になる可能性があるためです。 Amortized Constant TimeとConstant Timeは事実上同じですか、または追加ごとに完全な再割り当てを必要としない構造を調べる必要がありますか? 配列ベースの構造は別として(私が知っている限り、常に一定の時間での償却が追加されます)、要件を満たすものは考えられないため、これを求めています: ツリーベースのものはすべて、せいぜいO(log n)アクセスを持ちます。 リンクされたリストには、潜在的にO(1)が追加される可能性があります(テールへの参照が保持される場合)が、ランダムな削除はせいぜいO(n)でなければなりません。 完全な質問は次のとおりです。私がいくつかの重要な詳細にlazした場合に備えて: RandomQueueを設計および実装します。これはQueueインターフェースの実装であり、remove()操作は、現在キューにあるすべての要素の中からランダムに均一に選択された要素を削除します。(RandomQueueは、要素を追加したり、ランダムな要素に到達してやみくもに削除できるバッグと考えてください。)RandomQueueのadd(x)およびremove()操作は、操作ごとに一定の時間で実行する必要があります。

9
Big n(n ^ 2 + n)/ 2成長率のアルゴリズムに関する質問
この質問をしているのは、大きなO表記に関する1つの側面について混乱しているためです。 Frank Carrano 著の「Data Structures and Abstractions with Java」という本を使用しています。「アルゴリズムの効率」に関する章では、次のアルゴリズムを示しています。 int sum = 0, i = 1, j = 1 for (i = 1 to n) { for (j = 1 to i) sum = sum + 1 } 彼は最初、このアルゴリズムを(n 2 + n) / 2の成長率を持つと説明しています。どちらを見るかは直感的に思えます。 ただし、nが大きい場合、(n 2 + n) / 2はn …
16 algorithms  big-o 

5
重複する範囲を平坦化するアルゴリズム
重複する可能性のある数値範囲のリストを平坦化(分割)する良い方法を探しています。問題は、この質問の問題と非常に似ています。重複する日付範囲を分割する最も速い方法、および他の多くの方法です。 ただし、範囲は整数だけではなく、JavascriptやPythonなどで簡単に実装できる適切なアルゴリズムを探しています。 サンプルデータ: ソリューション例: これが重複している場合はおApびしますが、解決策はまだ見つかりません。

2
高速タグ検索のアルゴリズム
問題は次のとおりです。 単純なエンティティEのセットがあり、各エンティティにはタグTのセットが添付されています。各エンティティには、任意の数のタグを付けることができます。エンティティの総数は1億に近く、タグの総数は約5000です。 したがって、初期データは次のようになります。 E1 - T1, T2, T3, ... Tn E2 - T1, T5, T100, ... Tk .. Ez - T10, T12, ... Tl この初期データが更新されることはほとんどありません。 どういうわけか、私のアプリは次のようなタグで論理式を生成します。 T1&T2&T3 | (T5&!T6) 私がする必要があるのは、与えられた表現に一致するエンティティの数を計算することです(注-エンティティではなく、単に数)。もちろん、これは完全に正確ではありません。 私が今持っているのは、単一のスレッドで5〜10秒の実行時間を与える単純なメモリ内テーブル検索です。 私は興味がありますが、このようなものを処理する効率的な方法はありますか?どのアプローチをお勧めしますか?このための一般的なアルゴリズムやデータ構造はありますか? 更新 要求に応じて少し説明します。 Tオブジェクトは実際には比較的短い定数文字列です。しかし、実際には問題ではありません-常にいくつかのIDを割り当てて整数を操作できます。 間違いなくソートできます。

7
ランダムな数式の生成
ランダムな数式を生成および評価するために、このアイデアを頭の中で実行しています。そこで、私はそれをテストするためにコーディングする前に、それを試してアルゴリズムを作り上げることにしました。 例: ランダムに生成する式の例を次に示します。 4 + 2 [easy] 3 * 6 - 7 + 2 [medium] 6 * 2 + (5 - 3) * 3 - 8 [hard] (3 + 4) + 7 * 2 - 1 - 9 [hard] 5 - 2 + 4 * (8 - (5 + 1)) …
16 algorithms 

6
ガベージコレクターは、収集ごとにメモリ全体がスキャンされるのをどのように防止しますか?
一部の(少なくともMonoおよび.NETの)ガベージコレクタには、頻繁にスキャンする短期メモリ領域と、あまり頻繁にスキャンしないセカンダリメモリ領域があります。Monoはこれをナーサリと呼びます。 どのオブジェクトを破棄できるかを調べるために、ルート、スタック、レジスタから始まるすべてのオブジェクトをスキャンし、参照されなくなったすべてのオブジェクトを破棄します。 私の質問は、使用中のすべてのメモリが収集ごとにスキャンされるのをどのように防ぐのですか?原則として、使用されなくなったオブジェクトを見つける唯一の方法は、すべてのオブジェクトとそのすべての参照をスキャンすることです。ただし、これにより、アプリケーションで使用されていなくても、OSがメモリをスワップアウトできなくなり、「Nursery Collection」でも実行する必要がある膨大な作業のように感じます。保育園を利用することで、彼らが多くを獲得しているとは思えません。 私は何かを見逃していますか、またはガベージコレクタは実際にすべてのオブジェクトとすべての参照をスキャンするたびにスキャンしますか?

10
アルゴリズムプログラミングのためのC上のPythonの優先
私は少しアルゴリズムを勉強していて、SPOJ.pl TopCoderなどのサイトを見てきました。プログラマーは通常、ほとんどのアルゴリズムプログラミングコンテストでCまたはC ++を好むことがわかりました。 今、私は最近いくつかの問題を抱えています。私は少しのCとPythonの両方を知っています。コードを書き込もうとすると、ほとんどのアルゴリズムでCよりPythonを好むようです。CIでコードを書くために座るたびに、約15分後にあきらめます。これは面倒で、Pythonに移行する傾向があるためです。マトリックスポインターなどを渡すことは、無駄な時間の無駄であるように思われ、実際にアルゴリズム自体について考えるために利用できます。 今、私はCが非常に重要な言語であり、多くのプログラマーのパンとバターであ​​ることを多くの人々から知っています。 私が知りたかったのは、私のこのアプローチに欠点/結果/欠点などがあるかどうかでした。 これはPython対Cの議論ではありません。これは、使いやすさのためにCよりもPythonを好むというこの特定の慣行が、長期的には私や他のプログラマー/コンピューター科学者にどのように影響するかについての質問です。 私は、これらの言語を業界で使用したことのある人々から、および/または大規模なソフトウェア/ライブラリなどを開発したいのです。

2
最高の「バケット充填」アルゴリズムとは何ですか?
私は画像処理にかなり慣れていないので、現在、塗りつぶし機能を備えたペイントのようなアプリケーションに取り組んでいます。ただし、バケットフィルに最適なアルゴリズムが何であるかはわかりません。 このサイトで見つけた例を実装しましたが、ユーザーが既に同じ色で既に塗りつぶされている領域を塗りつぶそうとすると、無限ループの問題が発生しました。 現在、左、右、上、下を埋めることでこの問題を回避しています。ただし、ピクセルが左に塗りつぶされると、右に塗りつぶせないようにしたので、次のような形状になります。 バケットツールを赤い点で使用すると、適切に塗りつぶされません。 したがって、これらの問題をすべて解決するアルゴリズムまたはアルゴリズムへのリンクを誰かが知っていることを望んでいます。 追加情報:これは、ペイントツールとしてJavascriptを使用して実装されます。Canvas要素を利用してオンラインで使用されます。
16 algorithms 

3
すべてのローカライズと文字列タイプで機能する一般化された文字列逆関数を書くことは可能ですか?
Dev-DaysのJon Skeet(Tony the Ponyと一緒に)のプレゼンテーションを見ていました。 「文字列の逆関数を書く」はインタビュー101をコーディングしていますが、すべてのローカリゼーションとすべての文字列タイプで機能するものではなく、一般的な文字列の逆関数を書くことが実際に可能かどうかはわかりません。 入力文字列がASCII、UTF8、UTF16(固定長および可変長)などであるかどうかを検出することとは別に、 Jonが強調表示した「次の文字にアクセントを適用する」(U + 0301)コードがあります。次に、表示される場合とされない場合、または二重文字としてエンコードされる場合があります。 「文字列を逆にする」ことは、実際には難しいコンピューターサイエンスのタスクの1つであるようです。

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