タグ付けされた質問 「complexity-theory」

計算の複雑さの理論は、理論的なコンピューターサイエンスと数学における計算理論の分岐であり、固有の難易度に従って計算問題を分類することに焦点を当てています。プログラミングで特に一般的なのは、時間または空間の*償却分析*です。

26
何にもマッチしない正規表現
これは馬鹿げた質問のように聞こえるかもしれませんが、私は私の仲間の開発者の何人かと長い話し合いをしました、そしてそれは考えるのは楽しいことのように聞こえました。 そう; あなたの考えは何ですか-正規表現はどのように見えますか? 編集:なぜこれが必要なのですか?1つは、そのような表現について考えるのが興味深いためです。2つ目は、スクリプトに必要なためです。 そのスクリプトでは、辞書をと定義していDictionary<string, Regex>ます。これには、ご覧のとおり、文字列と式が含まれています。 そのディクショナリーに基づいて、私はすべてこのディクショナリーを使用してメソッドを作成する方法の参照としてのみ使用するメソッドを作成します。そのうちの1つは、正規表現を解析済みログファイルと照合します。 式が一致する場合、式Dictionary<string, long>によって返される値に別の値が追加されます。そこで、辞書の表現と一致しないログメッセージをキャッチするために、「不明」という新しいグループを作成しました。 このグループには、他のものと一致しなかったすべてが追加されます。しかし、「未知の」式が(偶然に)ログメッセージと一致しないようにするために、どの文字列を指定しても、決して一致しない式を作成する必要がありました。 したがって、あなたにはこの「本当の質問ではない」という私の理由があります...

5
LINQメソッドの実行時の複雑さ(Big-O)にはどのような保証がありますか?
私は最近LINQをかなり使い始めましたが、どのLINQメソッドの実行時の複雑さについてもまったく触れていません。明らかに、ここには多くの要素が関係しているので、議論をプレーンなIEnumerableLINQ-to-Objectsプロバイダーに限定しましょう。さらに、Funcセレクター/ミューテーター/などとして渡されたものはすべて安価なO(1)操作であると想定しましょう。 これは、すべてのシングルパス動作することを明らかに思える(Select、Where、Count、Take/Skip、Any/All、など)彼らは一度だけシーケンスを歩く必要があるので、O(n)となります。でもこれは怠惰の対象です。 より複雑な操作では物事は危険です。セットのような演算子(Union、Distinct、Except、など)を使用して作業GetHashCodeデフォルトでは(私の知る限り)、彼らが、一般的には、だけでなく、これらの操作のO(n)を作り、内部ハッシュ・テーブルを使用していると仮定するのが妥当と思われるので。を使用するバージョンはIEqualityComparerどうですか? OrderByソートが必要になるので、おそらくO(n log n)を調べています。すでに並べ替えられている場合はどうなりますか?私が言っOrderBy().ThenBy()て両方に同じキーを提供したらどうですか? 並べ替えまたはハッシュのいずれかを使用してGroupBy(およびJoin)を表示できました。どっち? ContainsはO(n)ですが、A ListはO(1)ですHashSet-LINQは基礎となるコンテナーをチェックしてスピードアップできるかどうかを確認しますか? そして本当の質問-これまでのところ、私は操作が高性能であることを信じてそれを取っています。しかし、それを利用することはできますか?たとえば、STLコンテナは、すべての操作の複雑さを明確に指定します。.NETライブラリ仕様のLINQパフォーマンスについて同様の保証はありますか? その他の質問(コメントへの回答): オーバーヘッドについてはあまり考えていませんでしたが、単純なLinq-to-Objectsについてはそれほど多くあるとは思いませんでした。CodingHorrorの投稿はLinq-to-SQLについて話しており、クエリを解析してSQLを作成するとコストが追加されることを理解できます。オブジェクトプロバイダーにも同様のコストがありますか?もしそうなら、宣言構文または関数構文を使用している場合とは異なりますか?


5
Bツリーとハッシュテーブル
MySQLでは、インデックスタイプはbツリーであり、bツリー内の要素へのアクセスは対数償却時間O(log(n))です。 一方、ハッシュテーブルの要素へのアクセスはにありO(1)ます。 データベース内のデータにアクセスするために、Bツリーの代わりにハッシュテーブルが使用されないのはなぜですか?

7
Big O(logn)ログベースはeですか?
バイナリサーチツリータイプのデータ構造の場合、Big O表記は通常O(logn)と表記されます。ログに小文字の 'l'がある場合、これは自然対数で記述されているようにログベースe(n)を意味しますか?簡単な質問で申し訳ありませんが、暗黙の対数を区別するのにいつも問題がありました。


4
ナップサック問題が疑似多項式であるのはなぜですか?
KnapsackDPによって解決できる一方で、それはNP完全であることを私は知っています。彼らは、DPソリューションはpseudo-polynomial「入力の長さ」(つまり、入力をエンコードするために必要なビット数)で指数関数的であるため、であると言います。残念ながら、私はそれを取得できませんでした。誰かpseudo-polynomialが私にそのことをゆっくり説明できますか?


2
std :: dequeは実際には最初に一定時間の挿入を持っていますか?
標準は言う: 両端キューは、ランダムアクセス反復子(27.2.7)をサポートするシーケンスコンテナーです。さらに、最初または最後の一定時間の挿入および消去操作をサポートします。途中で挿入と消去には線形時間がかかります。 ただし、同じ条項にも次のように記載されています。 この条項のすべての複雑さの要件は、含まれているオブジェクトに対する操作の数に関してのみ記述されています。[例:vector<vector<int>>含まれるそれぞれのコピーの複雑さvector<int>自体は線形であるにもかかわらず、タイプのコピーコンストラクターは線形の複雑さを持っています。—最後の例] これは、たとえば両端キューに既に存在するsと挿入される新しいオブジェクトに対して一定数以上の操作を実行しない限り、最初の挿入にdeque<int>線形時間がかかることを意味するのではありませんか?intint たとえば、「サイズKのベクターのベクター」を使用して両端キューを実装するとします。最初にK回挿入するたびに、新しいサイズKのベクトルを最初に追加する必要があるため、他のすべてのサイズKのベクトルを移動する必要があります。これは、最初の挿入の時間の複雑さが償却されたO(N / K)であることを意味します。ここで、Nは要素の総数ですが、Kは定数なので、これは単なるO(N)です。しかし、これは規格で許可されているようです。サイズKのベクトルを移動してもその要素は移動せず、「複雑さの要件」は含まれているintオブジェクトの「操作の数に関してのみ述べられている」ためです。 規格はこれを本当に許可していますか?それとも、より厳しい要件、つまり、含まれているオブジェクトに対する一定数の操作に加えて一定の追加時間があると解釈する必要がありますか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.