これはばかげた質問かもしれませんが、入力のサイズが大きくなるにつれて実際に簡単になる問題がある可能性はありますか?実用的な問題はこのようなものではないかと思いますが、この特性を持つ退化した問題を発明できるかもしれません。例えば、おそらく、それは大きくなるか、または他の奇妙な方法で動作するときに「それ自体を解決」し始めます。
これはばかげた質問かもしれませんが、入力のサイズが大きくなるにつれて実際に簡単になる問題がある可能性はありますか?実用的な問題はこのようなものではないかと思いますが、この特性を持つ退化した問題を発明できるかもしれません。例えば、おそらく、それは大きくなるか、または他の奇妙な方法で動作するときに「それ自体を解決」し始めます。
回答:
いいえ、それは不可能です。少なくとも、漸近的な意味ではありませんように、永久に厳密に簡単になり続けるには問題が必要です。
してみましょうこのような問題、解決するための最良の実行時間も入力の大きさです。実行時間はアルゴリズムによって実行された命令の数のカウントであるため、非負の整数である必要があることに注意してください。つまり、すべてのです。ここで、関数を考慮すると、厳密に単調減少する関数は存在しないことがわかります。(が何であれ、ように有限でなければなりませんが、は単調に厳密に減少するため、およびN T (N )∈ N N T :N → N T (0 )、T (0 )= C T T (C )≤ 0 T (C + 1 )≤ - 1 T (N )N 0、N ≥ nは0 T (N )、これは不可能である)同様の理由で、漸近的に厳密に減少している機能がない:。我々は、同様に何の走行時間機能がないことを証明することができる存在するようにすべてのため、は単調に厳密に減少しています(そのような関数は最終的に負にならなければなりません)。
そのため、実行時間が非負の整数でなければならないという単純な理由により、このような問題は存在できません。
この答えは決定論的なアルゴリズム(つまり、最悪の場合の実行時間)のみを対象とすることに注意してください。予想実行時間が厳密に単調に減少するランダム化アルゴリズムの可能性を永久に排除するものではありません。そのようなアルゴリズムが存在する可能性があるかどうかはわかりません。この観察について、 Beni Cherniavsky-Paskinに感謝します。
それはあなたの質問に対する答えではありませんが、ボイヤー・ムーアの文字列検索アルゴリズムが近づいています。Robert Mooreがアルゴリズムについて彼のWebページで述べているように、
アルゴリズムには、おおまかに言って、パターンが長いほどアルゴリズムが速くなるという独特の特性があります。
つまり、一般的に言えば、アルゴリズムはソース文字列内のターゲット文字列のインスタンスを検索し、固定ソース文字列を検索する場合、ターゲット文字列が長いほど、アルゴリズムの実行が速くなります。
明らかに、純粋な数学的、純粋にCSアルゴリズムの観点から、これは不可能です。しかし、実際には、プロジェクトをスケールアップすることでプロジェクトが簡単になる実際の例がいくつかあり、その多くはエンドユーザーにとって直感的ではありません。
方向:あなたの方向を取得長く、彼らは時々簡単に取得することができます。たとえば、Googleマップで3000マイル西に進むための道順を教えたい場合、西海岸まで車で行くことができます。しかし、西に6000マイル移動したい場合は、NYCから北海道への飛行機に乗るという非常に簡単な指示になります。交通、道路、天気などを取り入れたクロスカントリールートを与えることはアルゴリズム的にはかなり困難ですが、飛行機に乗ってデータベースでフライトを検索するよう指示するのは比較的簡単です。難易度と距離のASCIIグラフ:
| /
| /
Difficulty | / ____-------
| / ____----
| / ____----
---------------------------------
Distance
レンダリング:1つの面のレンダリングと1000の面のレンダリングが必要だと言います。これはビルボード広告用であるため、両方の最終画像は10000x5000ピクセルでなければなりません。1つの顔を現実的にレンダリングするのは難しいでしょう-数千ピクセルの解像度では本当に強力なマシンを使用する必要があります-しかし、1000人の顔の群衆の場合、各顔は10ピクセルで十分であり、簡単にクローン化できます!おそらくラップトップで1000の顔をレンダリングできますが、10000ピクセルのリアルな顔をレンダリングするには、非常に長い時間と強力なマシンが必要です。難易度対レンダリングされたオブジェクトのASCIIグラフ。n個のオブジェクトを設定サイズのイメージにレンダリングする難易度が急速に低下した後、ゆっくり戻ることを示します。
| -
|- - _________
Difficulty | -- ______-------
| ------
|
---------------------------------
Objects
ハードウェア制御:ハードウェアに関する多くのことが非常に簡単になります。「モーターX 1度移動」は難しく、不可能であり、「モーターX 322度移動」で対処する必要のないあらゆる種類のものに対処する必要があります。
短時間のタスク:アイテムXを毎秒(非常に短い時間)オンにする必要があるとします。Xの実行時間を長くすることにより、ハードウェアだけでなく複雑なソフトウェアも必要なくなります。
情報学における私たちの哲学は、読むのが難しいほど問題を解決することであるため、この質問は興味深いものです。しかし、実際には、典型的な方法(難しい)で提示される問題のMOSTは、「簡単な」方法で簡単に表すことができます。DWの応答を知っていても(簡単というのは速くないということは間違っていますが、「遅くなる」ことを意味します。したがって、負の時間を見つける必要はなく、漸近時間を見つけるのが面倒です)。
問題を見つけるコツは、ヒントのような解決策の一部をエントリとして配置し、定数パラメータのような問題のエントリを考慮することです。
例:フランスとイギリスの町を2回訪問し、他の国を訪問することを避けて、ロンドンとパリの間の車での最長の方法は何ですか?アシュフォードの前にバーミンガム、ベルサイユの前にオーリンズ、リモージュの前にラロシェルなどに行く必要があります。
長いエントリでのこの問題は、短いエントリでの問題よりも簡単になることは明らかです。
使用例:マシンによって管理されるプレイゲームを想像してください。コンピューターのIAは、今より多くのヒントを見つけるためにプレイでさらに探索する必要があるかどうかを判断する必要があります。 。
パスワードについて知っていることを入力として受け取り、それを解読しようとするプログラムを考えてみましょう。私はこれがあなたが望むことをすると思う。例えば:
このような問題は入力サイズに反するため、これはトリックであると付け加えます。抽象化の1つのレイヤーを省き、入力なしの場合は入力サイズが大きく(すべての記号と単語の長さを確認)、最初に正しいパスワードを入力した場合は小さいと言うことができます。
だから、それはあなたがどれだけの抽象化を許すかにかかっています。
実際のところ、データが増加するにつれて小さくなる問題があります。私のアプリケーションの1つは、チーズなどの特定の製品の属性を記録します。属性は、たとえばCheeseType、Brand、Country、Area、MilkTypeなどです。毎月かそこらで、その期間に市場に登場した新しいチーズのリストとその属性を取得します。現在、これらの属性は人間のグループによって手で入力されています。タイプミスをする人もいれば、すべての属性の値を知らない人もいます。
私のデータベースで検索を行うとき、これらの属性に基づいて、チーズの味を統計から予測しようとします。起こることは、各属性について、値の範囲になります; 一部は有効、一部は無効です。これらの無効なものを削除または修正できるのは、十分なデータがある場合のみです。これは、まれではあるが有効な値を排除することなく、実際の値とノイズを区別することです。
ご想像のとおり、音量が小さいと、ノイズはあまりにも重要であるため、適切に修正できません。チェダーのインスタンスが5つ、ブリーの1つ、ブリの1つ、チェダーの1つがある場合、どちらが正しいのか、どちらがタイプミスなのかをどのように見分けるのですか?音量を上げると、タイプミスは非常に低く抑えられる傾向がありますが、まれな値にはいくつかの重要な増分があり、ノイズから逃れます(経験に裏打ちされています)。この場合、たとえば、50000チェダー、3000ブリー、5ブリ、15チェダーを想像できます。
はい、十分なデータがあれば、いくつかの問題が最終的に解決します。
NP完全問題3-SATを考えます。x_i = true / falseの形式の入力を提供して問題を拡大し続けると、個々の選言を2変数節に変換して、明らかにPである2-SAT問題を作成するか、単純に真/偽の答え。
x_i = true / false入力に冗長性がある場合(同じ入力が何度も提供される、または矛盾する入力)、入力を簡単に並べ替え、冗長な値を無視するか、値が矛盾する場合はエラーを報告できます。
いずれにせよ、これは入力の数が増えるにつれて簡単に解決できる「現実的な」問題を表していると思います。「簡単な」側面は、NP完全問題をP問題に変換することです。ソートだけで問題を強引に強制するよりも時間がかかるように、ばかげた入力を提供することで、システムをゲームすることができます。
さて、本当にクールなシナリオは、T(0)(上記の答えでDWの表記法を利用する)を受け入れたい場合は無限になります。たとえば、T(0)はチューリングの停止問題を解くのと同等です。より多くの入力を追加することで解決可能な問題に変換するような問題を考案できれば、金を獲得しました。漸近的に解決可能な問題に変換するだけでは不十分であることに注意してください。これは、問題を強引に強制するのと同じくらい悪いからです。
質問は、「入力のサイズが大きくなるにつれて実際に簡単になる問題を抱えることは可能ですか?」入力がジョブで動作するためにアルゴリズムによって使用されるリソースである場合はどうなりますか。リソースが多いほど良いというのは一般的な知識です。以下は、従業員が多いほど良い例です。
3)出力:
出力は、従業員が行うタスク間のパスです。各パスは、それを使用する従業員の数に関連付けられています。例えば:
4)考えられる解決策:考えられる解決策の
1つは、最初にAから最も近いノードへの最短経路を計算することです。これは前方経路になります。次に、訪問した各タスクのフォワードパスを再帰的に計算します。結果はツリーです。例えば:
A 紀元前 DE