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

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

9
アルゴリズムの百科事典はありますか?[閉まっている]
Handbook of Mathematicsに似たスタイルのアルゴリズムの百科事典はありますか?多数のファイルを1か所で利用できると便利です。Art of Computer Programmingは良い情報源と考えられていますが、教訓的なほど百科事典的ではないようです。 モデレーターノート いくつかの説明とコンテキストを提供する長い答えを探しています。本をリストするだけではなく、本やリソースを推奨する理由を説明してください。何も説明していない回答は削除されます。詳細については、良い主観、悪い主観を参照してください。
34 algorithms 

5
多くのデータ構造に挿入するよりも、削除を実装するのが通常はるかに難しいのはなぜですか?
多くの(ほとんどの)データ構造の挿入よりも、削除の実装が通常はるかに難しい特定の理由を考えることができますか? 簡単な例:リンクリスト。挿入はささいなことですが、削除にはいくつかの特殊なケースがあり、それが非常に難しくなります。AVLやRed-blackなどの自己バランス型バイナリ検索ツリーは、痛みを伴う削除の実装の典型的な例です。 私はそれがほとんどの人々が考える方法に関係していると言いたい:私たちが物事を建設的に定義することはより簡単であり、それはうまく挿入を容易に導く。

1
私はJavaScriptをよく知っていますが、コーディングインタビューを爆弾します[非公開]
だから、私は現在、フロントエンド開発者としての新しい地位を探しています。私はJavaScriptを非常によく知っており、クロージャ、カリー化、プロトタイプ継承、デザインパターン、アプリのパフォーマンス、およびフロントエンドアーキテクチャ全体について詩的にワックスをかけることができます。しかし、それでも私は就職面接を爆撃することになります。(FYIインタビューしている仕事のほとんどは、何らかのMVCフレームワークでSPAを構築するためのものです) 通常、コーディングテストは、私がプロとして出会ったことのない小さなコードスニペットです。ある種の数学の問題を解決する関数を書くように。携帯電話を片手に持ちながらコードを書こうとすることや、見知らぬ人に画面を見たり、入力するすべての文字を見たりするという厄介さは別として、私は通常、この種のものを現実の世界では見ません。 これは私が不足している深刻なスキルセットですか、面接官は無関係な質問をします。関数型プログラミングとアルゴリズムチョップに取り組むべきだと思いますが、Web(または印刷物)に多くの良いリソースが見つかりませんでしたか?

5
分割統治アルゴリズム– 2つ以上の部分に分割してみませんか?
クイックソートやマージソートなどの分割統治アルゴリズムでは、入力は通常(少なくとも入門テキストでは)2つに分割され、2つの小さなデータセットは再帰的に処理されます。データセット全体を処理する作業が半分以下で済む場合、これにより問題の解決が速くなるというのは理にかなっています。しかし、データセットを3つの部分に分割してみませんか?四?n? データを多くの多くのサブセットに分割する作業は価値がないと思いますが、2つのサブセットで停止する必要があるという直感が欠けています。 また、3ウェイクイックソートへの多くの参照を見てきました。これはいつ高速ですか?実際には何が使用されていますか?

6
「究極のシャッフル」アルゴリズムを作成して、mp3コレクションを並べ替えたい
私は、タイトルとアーティストの重複を避ける方法でmp3ファイルをソートするための擬似コードの提案を探しています。私はクルーナーに耳を傾けます-フランク・シナトラ、トニー・ベネット、エラ・フィッツジェラルドなど、古い基準を歌います。各アーティストは、同じ曲を多数録音します-フライミートゥザムーン、ザウェイユールックトゥナイト、スターダストなど。2000曲あり、20曲がEllaのものである場合、100曲ごとに1回だけ聞きたいです。10人のアーティストがFly Me To The Moonを歌うなら、200曲に1回聴きたいです。もちろん、これら2つの要件を組み合わせて、「究極のシャッフル」を作成します。 これはかなり広範にわたる未解決の質問です。まだプログラミングを始めていませんので、良いアプローチの提案を探しています。実際には、他の曲の属性を均等に配置することに関して他のいくつかの要件がありますが、ここではそれに入りません。 出発点として、ここで見つけたコードを変更して、mp3ファイルを操作し、ID3タグを読み取ります。 以下のparsifalの回答を使用して、私のニーズを満たす小さなアプリを作成しました。ここにフォローアップの質問も書きました。素晴らしい反応をありがとう!



7
データベース上の文字列/レコードの非常に大きなリストをすばやく検索する方法
次の問題があります:200万件を超えるレコードを含むデータベースがあります。各レコードには文字列フィールドXがあり、フィールドXに特定の文字列が含まれるレコードのリストを表示します。各レコードのサイズは約500バイトです。 より具体的にするために、アプリケーションのGUIには、文字列を入力できるテキストフィールドがあります。テキストフィールドの上に、テキストフィールドの文字列に一致する(最初のN、たとえば100)レコードを表示するテーブルがあります。テキストフィールドに1文字入力または削除すると、テーブルの内容をその場で更新する必要があります。 適切なインデックス構造やキャッシュを使用してこれを行う効率的な方法があるのだろうか。上記で説明したように、クエリに一致する最初のN個のアイテムのみを表示します。したがって、Nが十分に小さい場合、データベースから一致するアイテムをロードすることは大きな問題ではありません。さらに、アイテムをメインメモリにキャッシュすると、検索が高速になります。 主な問題は、パターン文字列を指定して、一致するアイテムをすばやく見つける方法だと思います。DBMSの機能に依存することはできますか、それともインメモリインデックスを自分で構築する必要がありますか?何か案は? 編集 私は最初の実験を実行しました。レコードを異なるテキストファイルに分割し(ファイルあたり最大200レコード)、ファイルを異なるディレクトリに配置しました(1つのデータフィールドの内容を使用してディレクトリツリーを決定しました)。最終的に、約40000個のディレクトリに約50000個のファイルが作成されます。次に、Luceneを実行してファイルのインデックスを作成しました。Luceneデモプログラムを使用した文字列の検索は非常に高速です。分割とインデックス作成には数分かかりました。これは、クエリしたい静的なデータセットであるため、私にはまったく受け入れられます。 次のステップでは、Luceneをメインプログラムに統合し、Luceneから返されたヒットを使用して、関連するレコードをメインメモリにロードします。

10
物理量は、オーバーフローまたはアンダーフローなしで64ビット整数で表すことができると仮定するのは妥当ですか?
JDKの元のバイナリ検索アルゴリズムは32ビット整数を使用し、次の場合にオーバーフローバグがありました(low + high) > INT_MAX(http://googleresearch.blogspot.com/2006/06/extra-extra-read-all-about-it-nearly.html) 。 (符号付き)64ビット整数を使用して同じバイナリ検索アルゴリズムを書き換えた場合、low + high10 ^ 18バイトのメモリを持つことは物理的に不可能であるため、INT64_MAXを決して超えないと想定できますか? (符号付き)64ビット整数を使用して物理量を表す場合、アンダーフローとオーバーフローは発生しないと想定するのは合理的ですか?

6
クイックソートが実際に他のソートアルゴリズムよりも優れているのはなぜですか?
これはJanomaによるcs.SE に関する質問の再投稿です。彼またはcs.SEへの完全なクレジットと台無し。 標準アルゴリズムコースでは、クイックソートは平均でO(n log n)であり、最悪の場合はO(n²)であると教えられています。同時に、最悪の場合(mergesortやheapsortのような)O(n log n)であり、最高の場合(bubblesortのような)でも線形時間であるが、メモリの追加の必要性がある他のソートアルゴリズムが研究されています。 いくつかの実行時間をひと目見た後、クイックソートは他の効率ほど効率的であってはならないと言うのが自然です。 また、学生は基本的なプログラミングコースで、再帰があまりにも多くのメモリを使用するなどの理由であまり良くないことを学ぶと考えてください。したがって(これは本当の議論ではありませんが)、これはクイックソートがそうではないという考えを与えますそれは再帰アルゴリズムであるため、本当に良いです。 それでは、実際にクイックソートが実際に他のソートアルゴリズムよりも優れているのはなぜですか?実世界のデータの構造に関係していますか?コンピューターでのメモリの動作方法に関係していますか?一部のメモリは他のメモリよりもはるかに高速であることは知っていますが、それがこの直感に反するパフォーマンスの本当の理由であるかどうかはわかりません(理論的な推定と比較した場合)。

2
O(…)とは何ですか。どのように計算しますか?
助けて!アルゴリズムまたはコードのBig-Oを分析する必要がある場所について質問があります。 Big-Oが何であるか、またはBig-OtaとBig-Thetaまたはアルゴリズムの複雑さを分析するその他の手段にどのように関連するかは正確にはわかりません。 Big-Oがコードを実行する時間を指すのか、それとも必要なメモリ量(スペース/時間のトレードオフ)を指すのかわかりません。 私はコンピューターサイエンスの宿題を持っています。そこでは、いくつかのループ(おそらく再帰アルゴリズム)を使用し、そのためのBig-Oを考え出す必要があります。 私は、既知のBig-Oを持つ2つのデータ構造またはアルゴリズムから選択できるプログラムに取り組んでおり、どちらを選択するかわからない。 Big-Oを計算してプログラム、宿題、またはコンピューターサイエンスの一般的な知識に適用する方法を理解するにはどうすればよいですか? 注:この質問は、コミュニティによって決定された他のBig-O質問の標準的なターゲットです。多くのBig-Oの質問に役立つ情報を大量に含めることができるのは、意図的に広いことです。これが広いという事実を、同様の質問が受け入れられることを示すものとして使用しないでください。


8
美しいコードとは何ですか?[閉まっている]
開発者は美しいコードを書かなければならないことをよく読みますが、初心者の私にとっては、美しいコードとは何か、どのようにそれを認識するのかわかりません。 当然の質問は、美しいコードを書く方法と、コードの品質を向上させるための実践的な習慣は何ですか?、私が書いたコードを美しくするために何を気にする必要がありますか(そして私が学ぶこと)。

4
Piを粗雑な乱数ジェネレータとして使用できますか?
私は最近math.SEでこの質問を見ました。考えさせられました。Piは粗雑な乱数ジェネレーターとして使用できますか?私は結果がよく知られていることを意味します(これまでどのくらいのpiが計算されましたか?)が、一度に1桁の数字をとるとPiはかなりランダムに見えるようです。 これはまったく意味がありますか?

5
シャンペーンの噴水パズル
空のグラスは次の順序で並べられます。 液体がいっぱいの場合、1枚目のガラスに液体を注ぐと、余分な液体がガラス2と3に等量で流れます。ガラス2がいっぱいになると、余分な液体が4と5などに流れます。 液体がNリットルで、各ガラスの最大容量が1リットルである場合getWaterInBucket(int N, int X)、Xがガラス数である関数に記入してガラスに注ぐことにより液体をNリットル空けた場合、ガラスに存在する液体の量を与えます。たとえば、最初に4リットルが必要で、ガラス3の水を見つけたい場合、関数はgetWaterInBucket(4, 3) プログラムでこれを解決するにはどうすればよいですか?パスカルの三角形を使って数学の解を見つけようとしました。これは機能しませんでした。私はそれをツリーだと考えたので、このようなパラメーターを追加し、getWaterInBucket(BTree root, int N, int X)各レベルで再帰的な解決策を試すことができますが、この問題ではパラメーターは許可されていません。明らかな何か、いくつかのトリックはありますか?

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