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

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


17
.NETで配列をランダム化する最良の方法
.NETで文字列の配列をランダム化する最良の方法は何ですか?私の配列には約500個の文字列が含まれていArrayますが、同じ文字列でランダムな順序で新しい文字列を作成したいと思います。 回答にC#の例を含めてください。
141 c#  .net  algorithm  sorting  random 



5
ポイントを別のポイントを中心に回転(2D)
私はカードがファンアウトするカードゲームを作ろうとしています。現在、機能を備えたAllegro APIを使用してそれを表示します。 al_draw_rotated_bitmap(OBJECT_TO_ROTATE,CENTER_X,CENTER_Y,X ,Y,DEGREES_TO_ROTATE_IN_RADIANS); これでファンのエフェクトを簡単に作ることができます。問題は、マウスの下にあるカードを知ることです。これを行うには、ポリゴンの衝突テストを行うことを考えました。カードの4点を回転させてポリゴンを作成する方法がわかりません。基本的にはアレグロと同じ操作が必要です。 たとえば、カードの4つのポイントは次のとおりです。 card.x card.y card.x + card.width card.y + card.height 私は次のような機能が必要です: POINT rotate_point(float cx,float cy,float angle,POINT p) { } ありがとう
139 c++  algorithm 

13
100万の数字の文字列が与えられた場合、繰り返されるすべての3桁の数字を返します
数か月前にニューヨークのヘッジファンド会社にインタビューをしましたが、残念ながら、データ/ソフトウェアエンジニアとしてのインターンシップのオファーはありませんでした。(彼らはまた、ソリューションをPythonにすることを求めました。) 私は最初のインタビューの問題でかなり失敗しました... 質問:100万の数字(Piなど)の文字列が与えられた場合、3桁の数字の繰り返しと1より大きい繰り返しの数をすべて返す関数/プログラムを作成します。 たとえば、文字列が:の123412345123456場合、関数/プログラムは次を返します。 123 - 3 times 234 - 3 times 345 - 2 times 私がインタビューに失敗した後、彼らは私に解決策を与えませんでしたが、考えられるすべての結果が次の間にあるため、解決策の時間の複雑さは1000で一定であると教えてくれました: 000-> 999 私はそれについて考えているので、一定の時間のアルゴリズムを思いつくことは可能ではないと思います。それは...ですか?

5
3つのスタックでキューを実装する方法は?
私はアルゴリズムの本(Robert SedgewickとKevin WayneによるAlgorithms、4th Edition)でこの質問に出くわしました。 3つのスタックを持つキュー。3つのスタックを持つキューを実装して、各キュー操作が一定(最悪の場合)のスタック操作をとるようにします。警告:難易度が高い。 2つのスタックでキューを作成する方法を知っていますが、3つのスタックで解決策を見つけることができません。何か案が ? (ああ、これは宿題ではありません:))

2
なぜλ-calculusの最適なエバリュエーターは数式なしで大きなモジュラ指数を計算できるのですか?
教会番号は、関数としての自然数のエンコードです。 (\ f x → (f x)) -- church number 1 (\ f x → (f (f (f x)))) -- church number 3 (\ f x → (f (f (f (f x))))) -- church number 4 きちんと、2つの教会の数を適用するだけで指数化できます。つまり、4対2を適用すると、教会番号16、またはを取得します2^4。明らかに、それは全く実用的ではありません。教会の数は線形のメモリ量を必要とし、本当に非常に遅いです。10^10GHCIがすぐに正しく答えるようなものを計算すると、時間がかかり、とにかくコンピュータのメモリを合わせることができませんでした。 最近、最適なλエバリュエーターを使って実験しています。私のテストでは、最適なλ計算機に誤って次のように入力しました。 10 ^ 10 % 13 べき乗ではなく、乗法であると考えられていました。指を動かして、絶え間なく実行されているプログラムを絶望的に中止する前に、それは私の要求に答えました: 3 { iterations: 11523, applications: 5748, …

8
ハッシュテーブルとトライ(プレフィックスツリー)のどちらを選択するのですか?
したがって、ハッシュテーブルとプレフィックスツリーのどちらかを選択する必要がある場合、どちらを選択するかを決定する要因は何ですか。私自身の素朴な観点から、それは配列として保存されていないのでトライを使用するといくつかの余分なオーバーヘッドがあるように見えますが、実行時間の観点から(最長のキーが最長の英語の単語であると仮定)、それは本質的にOである可能性があります(1)(上限に関して)。多分最長の英語の単語は50文字ですか? ハッシュテーブルは、インデックスを取得するとすぐに参照されます。ただし、インデックスを取得するためにキーをハッシュすると、簡単に50ステップ近くかかる可能性があります。 誰かがこれについてより経験豊富な視点を教えてくれますか?ありがとう!

4
どの並列ソートアルゴリズムが平均のケースパフォーマンスが最も良いですか?
シリアルの場合、並べ替えにはO(n log n)かかります。O(n)プロセッサがあれば、線形の高速化が期待できます。O(log n)並列アルゴリズムは存在しますが、非常に高い定数を持っています。また、O(n)プロセッサの近くにないハードウェアには適用されません。pプロセッサでは、妥当なアルゴリズムはO(n / p log n)時間かかるはずです。 シリアルの場合、クイックソートは平均して実行時の複雑さが最も優れています。並列クイックソートアルゴリズムは実装が簡単です(こことここを参照)。ただし、最初のステップはコレクション全体を単一のコアに分割することであるため、パフォーマンスはよくありません。多くの並列ソートアルゴリズムに関する情報を見つけましたが、これまでのところ、明確な勝者を指すものは何もありません。 8から32コアで実行されているJVM言語で、100万から1億の要素のリストをソートしようとしています。

7
DFSとBFSの両方の時間の複雑さはなぜですかO(V + E)
BFSの基本的なアルゴリズム: set start vertex to visited load it into queue while queue not empty for each edge incident to vertex if its not visited load into queue mark vertex したがって、時間の複雑さは次のようになると思います。 v1 + (incident edges) + v2 + (incident edges) + .... + vn + (incident edges) v頂点はどこ1にn まず、私が言ったことは正しいですか?第二に、これはどうですか、O(N + E)そしてなぜ素晴らしいのかについての直感。ありがとう

14
どのようにしてZip爆弾を作成しますか?
zip爆弾に関するこの質問は、当然、このトピックに関するウィキペディアのページへと私を導きました。この記事では、1.3エクサバイトに解凍される45.1 kbのzipファイルの例について述べています。 そもそもそのようなファイルを作成するために使用される原則/テクニックは何ですか?実際にこれを実行するのではなく、関連する概念の簡略化された「方法-動作」説明に興味があります。 PS この記事では9層のzipファイルについて言及しているため、一連のゼロを圧縮するという単純なケースではありません。なぜ9、なぜそれぞれ10個のファイルなのか?

27
バブルソートの宿題
クラスでは、ソートアルゴリズムを実行しています。それらについて話したり、疑似コードを書き込んだりすると、それらはうまく理解できますが、実際のコードを書くのに問題があります。 これはPythonでの私の試みです: mylist = [12, 5, 13, 8, 9, 65] def bubble(badList): length = len(badList) - 1 unsorted = True while unsorted: for element in range(0,length): unsorted = False if badList[element] > badList[element + 1]: hold = badList[element + 1] badList[element + 1] = badList[element] badList[element] = hold print badList …

4
ロードされたサイコロのデータ構造?
私がnサイドのロードされたサイコロを持っているとします。サイコロを振ったときに、各サイドkがp kになる確率があります。サイコロのランダムなロールを効率的にシミュレートできるように、この情報を静的に(つまり、確率の固定セットに対して)保存するための優れたアルゴリズムがあるかどうか知りたいです。 現在、私はこの問題のO(lg n)ソリューションを持っています。すべてのkの最初のk側の累積確率のテーブルを保存し、[0、1)の範囲でランダムな実数を生成し、テーブルに対してバイナリ検索を実行して、累積的な値は選択した値以下です。私はこのソリューションが好きですが、ランタイムが確率を考慮に入れていないのは奇妙に思えます。特に、片側が常に表示される、または値が均一に分布する極値の場合、素朴なアプローチを使用してO(1)のロールの結果を生成することが可能ですが、私の解決策はまだ多くのステップをとっています。 この問題をランタイムで何らかの形で「適応」させる方法でこの問題を解決する方法についての提案はありますか? 編集:この質問への回答に基づいて、私はこの問題への多くのアプローチとその分析を説明する記事を書きました。エイリアスメソッドのVoseの実装は、サイコロごとにΘ(n)前処理時間とO(1)時間を与えるように見えます。これは本当に印象的です。うまくいけば、これは回答に含まれる情報への便利な追加です!

7
良いハッシュ関数とは何ですか?
良いハッシュ関数とは何ですか?私は大学のデータ構造のコースで多くのハッシュ関数とアプリケーションを見ましたが、良いハッシュ関数を作るのはかなり難しいと私はほとんど思いました。衝突を回避するための経験則として、私の教授は次のように述べています。 function Hash(key) return key mod PrimeNumber end (modはCおよび同様の言語の%演算子です) 素数をハッシュテーブルのサイズにします。これは、衝突を回避するためのやや良い関数であり、高速な関数ですが、どうすればより良い関数を作成できますか?数値キーに対する文字列キーのより良いハッシュ関数はありますか?

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