サイズが大きくなると簡単になる問題はありますか?


62

これはばかげた質問かもしれませんが、入力のサイズが大きくなるにつれて実際に簡単になる問題がある可能性はありますか?実用的な問題はこのようなものではないかと思いますが、この特性を持つ退化した問題を発明できるかもしれません。例えば、おそらく、それは大きくなるか、または他の奇妙な方法で動作するときに「それ自体を解決」し始めます。


7
頭に浮かぶこのプロパティの1つの本当の問題は、「nハッシュが与えられ、少なくとも1つのハッシュをクラックする」ように定式化されたときの無塩パスワードハッシュクラックです。クラッキング速度はnに比例するため、実行時間は1 / nに比例します。ただし、クラッキングは確率的であり、時間の上限が一定ではないため、実際の確定時間を割り当てることができません。
アモン

1
@amon実行時間はようにスケーリングしません。入力として与えられたハッシュを読むだけで時間がかかります!n n1/nnn
デビッドリチャービー16年

3
絶対的または相対的な意味で簡単ですか?どのコスト基準を許可していますか?厳密にコストを削減する必要がありますか、それとも非増加(ある時点から)で十分ですか?
ラファエル

2
@DavidRicherbyこの例では、絶対コストについて何も述べていない限り、入力を読み取るコストを無視するのが妥当です。代わりに、速度は入力とともに直線的に増加します。したがって、入力を読み取るコストを考慮しても、n•T(1)> T(n)です。つまり、この問題の場合、たとえ問題が分割可能であるとしても、入力を分割するよりも、一度に大きな入力を解決する方が簡単です。すべてのnについてT(n)> T(n + 1)と言っているわけではありません。
アモン

4
フォームのさらに別の回答を投稿したいすべての人に、「入力が質問に加えて回答に関する多くのヒントがあるいくつかの問題」:これは機能しません。長さの最も難しい入力は、ビットすべてを使用して質問し、ヒントを与えない入力です。短い質問を多くのヒントで簡単に処理できるという事実は、最悪の場合の実行時間が良いことを意味しません。nnn
デビッドリチャービー16年

回答:


39

いいえ、それは不可能です。少なくとも、漸近的な意味ではありませんように、永久に厳密に簡単になり続けるには問題が必要です。n

してみましょうこのような問題、解決するための最良の実行時間も入力の大きさです。実行時間はアルゴリズムによって実行された命令の数のカウントであるため、非負の整数である必要があることに注意してください。つまり、すべてのです。ここで、関数を考慮すると、厳密に単調減少する関数は存在しないことがわかります。(が何であれ、ように有限でなければなりませんが、は単調に厳密に減少するため、およびN T N N N T NN T 0 )、T 0 = C T T C 0 T C + 1 - 1 T N N 0、N nは0 T N T(n)nT(n)NnT:NNT(0)T(0)=cTT(c)0T(c+1)1、これは不可能である)同様の理由で、漸近的に厳密に減少している機能がない:。我々は、同様に何の走行時間機能がないことを証明することができる存在するようにすべてのため、は単調に厳密に減少しています(そのような関数は最終的に負にならなければなりません)。T(n)n0nn0T(n)

そのため、実行時間が非負の整数でなければならないという単純な理由により、このような問題は存在できません。


この答えは決定論的なアルゴリズム(つまり、最悪の場合の実行時間)のみを対象とすることに注意してください。予想実行時間が厳密に単調に減少するランダム化アルゴリズムの可能性を永久に排除するものではありません。そのようなアルゴリズムが存在する可能性があるかどうかはわかりません。この観察について Beni Cherniavsky-Paskinに感謝します。


9
これは良い証拠ですが、前提に同意しません。厳密に単調に減少する実行時間を求める代わりに、質問はa <bを持つa、bが存在する関数をより合理的に要求するため、T(a)> T(b)、つまり非厳密に単調に減少します。その後、適切な整数関数を見つけることはもちろん可能です。しかし、なぜ整数なのでしょうか?私は、実行時間は命令カウントではなく時間を示し(Turingマシンの場合を除いて)、T式はlog()や非整数指数のような非整数演算を使用できるという印象を受けました。
アモン

2
@amon「実行時間は、命令カウントではなく時間を示します」絶対にそうではありません。実行時間は常に命令カウントです。実行不可能な多くの実装の詳細に依存するため、他のことを推論することは不可能です。
デビッドリチャービー16年

3
質問は曖昧ですが、たとえばコスト関数を除外する方法がわかりません。現在、が、は「小さい」であるため、問題は「簡単になります」、比較的言えます。(もちろん、絶対コストは漸近的に増加します)。T N N T N N 2 NT(n)=n2(1+ϵ)n+nT(n)nT(n)n2n
ラファエル

2
@Raphael、であるが容易になっていない問題:と大きくなり大きくなる、ような問題が難しくなり大きくなる、一度十分な大きさです。私の答えの最初の文で、問題は永遠に楽になり続けることができないと述べました。もちろん、問題は少しの間は簡単になり(たとえば、はで減少します)が、永遠に簡単になり続けることはできません。T N N 、N 、N T N N CT(n)nT(n)nnnT(n)nc
DW

1
整数時間であっても、ランダム化されたアルゴリズムの場合、予想時間(または分布の他の測定値)は小数である可能性があり、上から一定の定数に徐々に近づく可能性があります。[これは、そのような問題が実際に存在することを意味するのではなく、「そのような関数が存在しない」引数が不十分であることだけを意味します。]T
Beni Cherniavsky-Paskin

25

それはあなたの質問に対する答えではありませんが、ボイヤー・ムーアの文字列検索アルゴリズムが近づいています。Robert Mooreがアルゴリズムについて彼のWebページで述べているように、

アルゴリズムには、おおまかに言って、パターンが長いほどアルゴリズムが速くなるという独特の特性があります。

つまり、一般的に言えば、アルゴリズムはソース文字列内のターゲット文字列のインスタンスを検索し、固定ソース文字列を検索する場合、ターゲット文字列が長いほど、アルゴリズムの実行が速くなります。


10
おそらく、パターンは問題のサイズではなく、検索される文字列の長さです。以下のように上記のデビッドRicherbyさんのコメント、私はパターンが特定の長さの文字列に一致する場合、パターンの長さは(問題自体よりも(文字列の検索についてGOT)の問題を解決する方法についてのヒントをより多くのを見ていると主張します。)
ケビン

4
nnlogn

10

明らかに、純粋な数学的、純粋に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の実行時間を長くすることにより、ハードウェアだけでなく複雑なソフトウェアも必要なくなります。


「方向」の例では、何が計算上の問題であり、何がインスタンスであるかを正確に述べてください。あなたの6kマイルの例がより大きなインスタンスであるか、何かの簡単な部分の例であることは私にはまったく明確ではありません(たとえば、大きなグラフ接続グラフと1つの孤立した頂点を与えると、一般に最短経路を求めます「難しい」が、孤立した頂点からどこへでも最短経路を要求するのは簡単です。繰り返しますが、レンダリングの例では、実際の計算上の問題は何ですか?複雑さを測定しているインスタンスは何ですか?
デビッドリチャービー

レンダリングの例は同じ問題のインスタンスではないようです。最初の例は単一の画像をレンダリングしています。2つ目は、多数の小さな画像をレンダリングし、それらの画像の複数のコピーをある領域に貼り付けることです。
デビッドリチャービー

パラメータを移動するのは、2つの都市の名前であり、nはそれらをエンコードする文字数です。
エモリー

3

場合があります。それらは、単一の答えを見つけようとするのではなく、成功基準がデータの関数である場合です。たとえば、結果が信頼区間で表現されている統計プロセスは簡単になります。

私が考えている特定のケースの1つは、流体の流れのように、離散的な動作から連続的な動作に移行する問題です。小さな問題をある程度の誤差の範囲内で解決するには、すべての個別の相互作用をモデリングする必要があり、スーパーコンピューターが必要になる場合があります。連続的な振る舞いは、多くの場合、関連するエラー範囲外の結果をもたらすことなく単純化を可能にします。


2

情報学における私たちの哲学は、読むのが難しいほど問題を解決することであるため、この質問は興味深いものです。しかし、実際には、典型的な方法(難しい)で提示される問題のMOSTは、「簡単な」方法で簡単に表すことができます。DWの応答を知っていても(簡単というのは速くないということは間違っていますが、「遅くなる」ことを意味します。したがって、負の時間を見つける必要はなく、漸近時間を見つけるのが面倒です)。

問題を見つけるコツは、ヒントのような解決策の一部をエントリとして配置し、定数パラメータのような問題のエントリを考慮することです。

例:フランスとイギリスの町を2回訪問し、他の国を訪問することを避けて、ロンドンとパリの間の車での最長の方法は何ですか?アシュフォードの前にバーミンガム、ベルサイユの前にオーリンズ、リモージュの前にラロシェルなどに行く必要があります。

長いエントリでのこの問題は、短いエントリでの問題よりも簡単になることは明らかです。

使用例:マシンによって管理されるプレイゲームを想像してください。コンピューターのIAは、今より多くのヒントを見つけるためにプレイでさらに探索する必要があるかどうかを判断する必要があります。 。


2
あなたの例は機能しません。それらが非常に多くのヒントを持っているために大きいインスタンスは、そのヒントがグラフの頂点の線形順序を決定するのは確かに簡単です。ただし、ヒントがほとんどない大きなグラフを表示するために大きいインスタンスは、通常のハミルトニアンパス問題と同じくらい困難です。したがって、この問題を解決するアルゴリズムの最悪の場合の実行時間は、少なくとも「超簡単」ではないように見えるハミルトニアンパスの最適なアルゴリズムの最悪の場合の実行時間と同じくらい悪くなります。
デビッドリチャービー16年

@David、あなたの応答は完全に間違っています:1.エントリはグラフではありません:大きなグラフはPARAMETERです。したがって、ハミルトニアン問題は定数に変換されます(非常に大きいが、定数)。2.エントリは問題の解決策であるため、大きい場合は、ヒントの組み合わせによる説明を提供します。1つのヒントを入力すると、2つのヒントが2つ、3つのヒントが4倍近くになります。したがって、これはハミルトニアンではなく、これは特定のグラフからの解決策であり、問​​題は解決策の一部をどうするかです。
フアンマヌエルダト

大きなインスタンスはある意味で「簡単」なので、あなたの議論は面白いと思いますが、元の質問に対する答えは最終的には「いいえ」だと思います。グラフは有限であるため、可能性のあるヒントは限られています。したがって、すべてのインスタンスを一定の時間で解決できます(たとえば、ルックアップテーブルを使用して)。(漸近的な)コンピューターサイエンスの観点では、より大きなインスタンスは(直感的に)より簡単ですが、すべてのインスタンスは同様に困難です(一定時間で解決可能)。
トムヴァンデルザンデン

@Tom、複雑さについてのあなたの考慮は一定であることに同意しますが、問題は新しいヒントをどのように受け入れるかです:長いエントリを計算するという哲学で短いエントリよりも優れていない場合は、哲学を変更する必要があります-それは事実だからです。長いエントリは簡単な問題を意味します。だから私たちはそのように動作することはできません... ...私は私の本をお勧めしますが、私は何の評判を持っていない
フアン・マヌエル・ダト

nlogn

1

パスワードについて知っていることを入力として受け取り、それを解読しようとするプログラムを考えてみましょう。私はこれがあなたが望むことをすると思う。例えば:

  • 入力なし->すべての記号と任意の長さの単語に対するブルートフォースクラック
  • パスワードの長さ->その長さの単語内のすべての記号をブルートフォース
  • 含まれるシンボル->チェックするシンボルのリストを縮小します
  • ...
  • 複数の出現と長さを含む含まれるシンボル->順列のみを計算する
  • 正しい順序のすべてのシンボル->基本的にそれ自体を解決しました

このような問題は入力サイズに反するため、これはトリックであると付け加えます。抽象化の1つのレイヤーを省き、入力なしの場合は入力サイズが大きく(すべての記号と単語の長さを確認)、最初に正しいパスワードを入力した場合は小さいと言うことができます。

だから、それはあなたがどれだけの抽象化を許すかにかかっています。


2
b

0

実際のところ、データが増加するにつれて小さくなる問題があります。私のアプリケーションの1つは、チーズなどの特定の製品の属性を記録します。属性は、たとえばCheeseType、Brand、Country、Area、MilkTypeなどです。毎月かそこらで、その期間に市場に登場した新しいチーズのリストとその属性を取得します。現在、これらの属性は人間のグループによって手で入力されています。タイプミスをする人もいれば、すべての属性の値を知らない人もいます。

私のデータベースで検索を行うとき、これらの属性に基づいて、チーズの味を統計から予測しようとします。起こることは、各属性について、値の範囲になります; 一部は有効、一部は無効です。これらの無効なものを削除または修正できるのは、十分なデータがある場合のみです。これは、まれではあるが有効な値を排除することなく、実際の値とノイズを区別することです。

ご想像のとおり、音量が小さいと、ノイズはあまりにも重要であるため、適切に修正できません。チェダーのインスタンスが5つ、ブリーの1つ、ブリの1つ、チェダーの1つがある場合、どちらが正しいのか、どちらがタイプミスなのかをどのように見分けるのですか?音量を上げると、タイプミスは非常に低く抑えられる傾向がありますが、まれな値にはいくつかの重要な増分があり、ノイズから逃れます(経験に裏打ちされています)。この場合、たとえば、50000チェダー、3000ブリー、5ブリ、15チェダーを想像できます。

はい、十分なデータがあれば、いくつかの問題が最終的に解決します。


1
これは通常の理由で失敗します。大きな入力は、いくつかの種類のチーズについて説明するのではなく、いくつかの種類のスペルを間違えるものではなく、多くの異なる種類のチーズについて説明するものです。また、「より簡単」が「結果の信頼性を高める」と解釈されることになっていることは明らかではありません。
デビッドリチャービー

これは現実の問題であり(既に2回経験しています)、少量のデータでは解決できません。ボリュームが大きくなると、良い値と間違った値を区別しやすくなります。「サイズが大きくなるにつれて簡単になる問題はありますか?」という質問に答えるメリットがあります。何種類のチーズが出てくるかは問題ではなく、最終的には十分な量で、タイプミスよりも多くの「ヒット」があります。これはcs .stackexchangeであり、数学ではないため、問題は異なります。それらを解決することは、結果に対する信頼性を高めることだけです。
クリス

これもテレビ番組番号の前提ではないでしょうか?または少なくともいくつかのエピソード-私は、数学の男が目前の問題を解決するために使用しているアルゴリズムがより大きなデータセットでより効果的になると言っているシーンを特に覚えていることを知っています。
ダンヘンダーソン

2
「より効果的に」!=「より簡単に」。
デビッドリチャービー16年

-1

NP完全問題3-SATを考えます。x_i = true / falseの形式の入力を提供して問題を拡大し続けると、個々の選言を2変数節に変換して、明らかにPである2-SAT問題を作成するか、単純に真/偽の答え。

x_i = true / false入力に冗長性がある場合(同じ入力が何度も提供される、または矛盾する入力)、入力を簡単に並べ替え、冗長な値を無視するか、値が矛盾する場合はエラーを報告できます。

いずれにせよ、これは入力の数が増えるにつれて簡単に解決できる「現実的な」問題を表していると思います。「簡単な」側面は、NP完全問題をP問題に変換することです。ソートだけで問題を強引に強制するよりも時間がかかるように、ばかげた入力を提供することで、システムをゲームすることができます。

さて、本当にクールなシナリオは、T(0)(上記の答えでDWの表記法を利用する)を受け入れたい場合は無限になります。たとえば、T(0)はチューリングの停止問題を解くのと同等です。より多くの入力を追加することで解決可能な問題に変換するような問題を考案できれば、金を獲得しました。漸近的に解決可能な問題に変換するだけでは不十分であることに注意してください。これは、問題を強引に強制するのと同じくらい悪いからです。


1
これらの特定の入力は簡単になります。ただし、考えられるすべての入力を考慮すると、一般に3SATは句を追加するにつれてかなり難しくなります。ハード入力は、これらの「ヒント」句のないものです。一般的な入力を許可しない場合は、許可する入力を正確に指定する必要があります。
デビッドリチャービー

まず、入力を追加すると実行時間が長くなる可能性があることに同意します。上記と本質的に同じことを言います。次に、既存の3-SATを使用し、x_i = true / falseの形式の入力のみを追加していることを明確に述べています。これは十分に明確であり、さらに説明する必要はないと思います。私が書いたものの最も誤解された解釈を形成するために、あなたは問題を抱えていると思います。困らないでください。
v vv cvvcv

1
いいえ、真剣に。どのような計算上の問題を解決していますか?計算上の問題は、一連の文字列のメンバーシップを決定することです(コーディングに関する煩わしさを避けるための一連の式を考えてみましょう)。長い式がセットに含まれているかどうかを判断する方が、短い式がセットに含まれていると判断するよりも簡単だと主張している式のセットは何ですか?あなたがこれを正確にしようとするとすぐに、私はあなたの主張がばらばらになると確信しています。
デビッドリチャービー

「私の主張」について明確に理解してください。あなたがこれを正確にしようとするとすぐに、インターネット帯域幅の浪費をやめると確信しています。
v vv cvvcv 16年

私はコンピューター科学者であり、マインドリーダーではありません。あなたの主張を正確にすることはあなたの仕事であり、私の仕事ではありません。
デビッドリチャービー16年

-1

質問は、「入力のサイズが大きくなるにつれて実際に簡単になる問題を抱えることは可能ですか?」入力がジョブで動作するためにアルゴリズムによって使用されるリソースである場合はどうなりますか。リソースが多いほど良いというのは一般的な知識です。以下は、従業員が多いほど良い例です。


n
tp


n

3)出力:
出力は、従業員が行うタスク間のパスです。各パスは、それを使用する従業員の数に関連付けられています。例えば:

n1
n2
n3
n4
n5

4)考えられる解決策:考えられる解決策の
1つは、最初にAから最も近いノードへの最短経路を計算することです。これは前方経路になります。次に、訪問した各タスクのフォワードパスを再帰的に計算します。結果はツリーです。例えば:

          A
      紀元前
    DE

nn1n2n20

n=n=1

n


6
ご意見をお寄せいただきありがとうございます。通常、コンピューターサイエンスでは、アルゴリズムは入力としてビットシーケンスを受け入れ、別のビットシーケンスを出力すると理解されています。その標準的な理解では、この答えがどのように意味をなさないかわかりません。アルゴリズムの異なる概念を念頭に置いている場合、質問を編集してアルゴリズムの意味を説明すると役立つと思います(用語の標準的な使用法に対応する方法で用語を使用していないようだから用語、私はそれを理解しているように)。
DW

入力は、単純に数字(リソースの数)にすることができます。これは、アルゴリズムが通過する必要がある追加の計算の数に影響します。答えを編集して、より具体的な例を提供します。
yemelitc

編集してくれてありがとう。最初に考えたように、ソリューションの計算コストと実行コストを混同していないことがわかりました。しかし、今は通常の状況です。まず、入力の読み取りには少なくとも直線的な時間がかかります。第二に、難しいインスタンスは、小さな木と数十億人を与えるものではなく、大きな木と比較的少数の人を与えるものです。(たとえば、100万ビットを許可した場合、頂点が5つ、1000人のツリーではなく、頂点が約1000のツリーを選択して、5人を指定します。)
David Richerby

同意する。元の質問が私たちを誘惑したものとは異なり、私たち全員がそれについて非常に批判的になったようです!しかし、うまくいけば、「リソースとしての入力」という私のアイデアが得られることを願っています。作業がどれほど大きくても、人が多ければ多いほどよいのです。それでも漸近的な意味であなたは間違いなく正しいです、私はそれを非負の整数で責めるべきです。
yemelitc
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.