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

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

16
スペースのないテキストを単語のリストに分割する方法は?
入力: "tableapplechairtablecupboard..."多くの単語 そのようなテキストを単語のリストに分割して取得するための効率的なアルゴリズムは何ですか? 出力: ["table", "apple", "chair", "table", ["cupboard", ["cup", "board"]], ...] 最初に頭に浮かぶのは、すべての可能な単語(最初の文字から始まる)を調べて、可能な限り長い単語を見つけることです。 position=word_position+len(word) PS 私たちはすべての可能な単語のリストを持っています。 「cupboard」という単語は「cup」と「board」にすることができ、最も長いものを選択します。 言語:Python、ただし主要なものはアルゴリズム自体です。
106 python  algorithm  text  split 


9
「便利な」C ++バイナリ検索アルゴリズムはどこで入手できますか?
std::binary_search標準ライブラリの<algorithm>ヘッダーのようなC ++ STLコンテナーと互換性のあるバイナリ検索アルゴリズムが必要ですが、要素が存在するかどうかを示す単純なブール値ではなく、結果を指すイテレーターを返す必要があります。 (補足として、binary_searchのAPIを定義したとき、標準委員会は一体何を考えていましたか?) ここでの主な懸念は、バイナリ検索の速度が必要であることです。そのため、以下で説明するように、他のアルゴリズムでデータを見つけることができますが、データがソートされているという事実を利用して、バイナリの利点を得たいと思います。線形検索ではなく検索。 これまでlower_boundとupper_boundデータが欠落している場合失敗します。 //lousy pseudo code vector(1,2,3,4,6,7,8,9,0) //notice no 5 iter = lower_bound_or_upper_bound(start,end,5) iter != 5 && iter !=end //not returning end as usual, instead it'll return 4 or 6 注:コンテナーと互換性がある限り、std名前空間に属さないアルゴリズムを使用しても問題ありません。同様に、言いますboost::binary_search。

17
2つの並べ替えられた配列の和集合でk番目に小さい要素を見つける方法は?
これは宿題です。彼らはそれがO(logN + logM)どこに取られ、配列の長さであるNと言いMます。 レッツは、配列に名前を付けるaとb。もちろん、i> kのすべてa[i]を無視できますb[i]。 まず比較a[k/2]してみましょうb[k/2]。してみましょうb[k/2]> a[k/2]。したがってb[i]、i> k / 2のすべてを破棄することもできます。 これで、答えが見つかるa[i]all b[i]、i <kおよびall 、i <k / 2が得られました。 次のステップは何ですか?


2
JavaScript配列のビッグO
JavaScriptの配列は、アイテムを追加したり削除したりすることで非常に簡単に変更できます。ほとんどの言語の配列は固定サイズであり、サイズを変更するには複雑な操作が必要であるという事実を多少覆っています。JavaScriptでは、パフォーマンスの低い配列コードを簡単に記述できるようです。これは質問につながります: 配列のパフォーマンスに関して、JavaScript実装から期待できるパフォーマンス(大きなO時間の複雑さに関して) 私はすべての妥当なJavaScript実装に最大で以下の大きなOがあると想定しています。 アクセス-O(1) 追加-O(n) 付加-O(n) 挿入-O(n) 削除-O(n) スワッピング-O(1) JavaScriptでは、new Array(length)構文を使用して、配列を特定のサイズに事前入力できます。(ボーナス質問:この方法で配列を作成していますO(1)またはO(n))これは従来の配列に似ており、プリサイズの配列として使用すると、O(1)を追加できます。循環バッファロジックが追加された場合、O(1)の先頭に追加できます。動的に拡張する配列が使用される場合、O(log n)は両方の平均ケースになります。 ここでの想定よりも、いくつかの点でより良いパフォーマンスを期待できますか?仕様で概説されているものはないと思いますが、実際には、すべての主要な実装が舞台裏で最適化された配列を使用している可能性があります。動的に拡張する配列または他のパフォーマンス向上アルゴリズムが機能していますか? PS 私がこれを不思議に思っているのは、いくつかの並べ替えアルゴリズムを研究しているためです。それらのほとんどは、全体的な大きなOを記述するときに、追加と削除がO(1)操作であると想定しているようです。

5
DateTimeオブジェクトの丸め
チャートアプリケーションの日付/時刻を最も近い間隔に丸めたい。次のような拡張メソッドシグネチャを使用して、任意のレベルの精度で丸めを実行できるようにします。 static DateTime Round(this DateTime date, TimeSpan span); アイデアは、10分のタイムスパンを渡すと、最も近い10分の間隔に丸められるということです。私は実装を理解することができず、あなたの1人が以前に同様の何かを書いたり使用したりすることを望んでいます。 床、天井、または最も近い実装のいずれかで結構です。 何か案は? 編集:@tvanfossonと@ShuggyCoUkのおかげで、実装は次のようになります。 public static class DateExtensions { public static DateTime Round(this DateTime date, TimeSpan span) { long ticks = (date.Ticks + (span.Ticks / 2) + 1)/ span.Ticks; return new DateTime(ticks * span.Ticks); } public static DateTime Floor(this DateTime date, TimeSpan …
105 c#  algorithm 


16
数のすべての約数を取得する最良の方法は何ですか?
これは非常にばかげた方法です: def divisorGenerator(n): for i in xrange(1,n/2+1): if n%i == 0: yield i yield n 私が得たい結果はこれに似ていますが、よりスマートなアルゴリズムが必要です(このアルゴリズムは非常に遅くて馬鹿げています:-) 素因数とその多様性を十分に速く見つけることができます。私はこのように因子を生成するジェネレーターを持っています: (factor1、multiplicity1) (factor2、multiplicity2) (factor3、multiplicity3) など... すなわちの出力 for i in factorGenerator(100): print i です: (2, 2) (5, 2) これが自分のやりたいことにどれほど役立つかわかりません(他の問題のためにコード化しました)。とにかく、よりスマートな方法で for i in divisorGen(100): print i これを出力: 1 2 4 5 10 20 25 50 100 …
105 python  algorithm  math 

14
リスト内のすべての要素が一意であるかどうかの確認
リスト内のすべての要素が一意であるかどうかを確認する最良の方法(従来の方法と同様)は何ですか? 私の現在のアプローチCounterは次のとおりです: >>> x = [1, 1, 1, 2, 3, 4, 5, 6, 2] >>> counter = Counter(x) >>> for values in counter.itervalues(): if values > 1: # do something もっと上手にできる?
104 python  algorithm  list  unique 






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