プロット検査ヒューリスティックをだます方法は?


23

ここで、デイブ・クラークは、漸近的な成長を比較するために、あなたが手で関数をプロットすべきであると提案しました。理論的に傾倒したコンピューター科学者として、私はこのブードゥーをプロットとして証明しません。考え直して、これは非常に有用なアプローチであり、時には十分に活用されていないことにも同意する必要があります。プロットは、最初のアイデアを得るための効率的な方法であり、時にはそれだけで十分です。

TCSを教えるとき、「常に機能するXだけを実行できる場合、正式な証明は何に必要ですか?」と尋ねる学生が常にいます。誤fallを指摘して説明するのは、彼の先生次第です。math.SEで最終的にフェールオーバーする見かけのパターンの素晴らしい例のセットがありますが、それらはかなり数学的なシナリオです。

それでは、どのようにプロット検査ヒューリスティックをだますのでしょうか?違いを見分けるのが難しい場合がいくつかあります。例えば

例 例 例
[ ソース ]

推測してから、実際の関数のソースを確認してください。しかし、それらは私が期待するほど壮観ではありません。特に初心者にとっても、実際の関係は機能だけから簡単に見つけることができるからです。

関数定義と合理的なプロット検査から真実が明らかではない(相対的な)漸近的成長の例はありnますか?数学関数と実際のデータセット(特定のアルゴリズムの実行時間など)はどちらも歓迎です。ただし、区分的に定義された関数は控えてください。


2
実際、私は問題を理解するためのヒントとしてそれを提案しました。
デイブクラーク

@DaveClarke:知ってるよ。私はあなたの初期の処方を単に挑発的なオープナーとして使用しました。意図的な違反はありません。
ラファエル

回答:


23

(logn)anbO(nlogn)O(n0.6)

プロット
[ ソース ]

[0,1]n0.6n0.7n1/2log3/4nn2/3


15

ここに別の(確かにかなり構築された)例がありますが、それでも私は注目に値します。プロットが漸近的成長を判断するために非常に誤解を招く可能性があることを示すことを目的としています。

fg

どの関数が(漸近的に)速く成長するかを推測できますか?

2000までのfとgのプロット 10,000までのfとgのプロット 200,000までのfとgのプロット

fg

f(x)=x2
g(x)=sin(log(x))+1dxdx=x2(135cos(log(x))+15sin(log(x))).

したがって、は本質的に、つまりと同じですが、その2次導関数は一様にではなく、から間で周期的に指数関数的に成長します。この振動は、通常のプロットでは見えません。gx2f204

以下のために、この例では、我々は両対数プロットを考慮して振動を脱マスクすることができます:

200,000までのfとgのlog-log-plot

もちろん、これは一般的には役に立ちません。たとえば、二重の指数関数期間があるかもしれません...


12

良い例は、Brzozowskiの深く魔法のような最小限のDFAアルゴリズムです。有限オートマトン与えられると、最小決定論的有限オートマトンを計算できます:N=(Q,SQ,FQ,RQ×Σ×Q)

Minimize:NFADFA=DeterminizeReverseDeterminizeReverse

これは明らかにワーストケースの指数時間アルゴリズムです。非決定的なオートマトンを使用して決定的なオートマトンを取得できるためです(さらに明らかに、サブセット構築を2回呼び出します)。

ただし、Brzozowskiのアルゴリズムを入力としてDFAにすると、多くの一般的な種類の入力で、競合することができ、特殊なDFA最小化アルゴリズム(通常はまたはハードコアで、Hopcraftのアルゴリズムを実装している場合)。O(n2)O(nlog(n))

これは、「プロット検査ヒューリスティック」の「プロット」部分に影響します。プロットを描画するときにサンプリングするポイントを選択する必要があります。ポイントを慎重に選択しないと、単純なプロットをだますことができます。これは、QuicksortやSimplexアルゴリズムなどの他の例にも当てはまりますが、教育学では、この2つよりもこのアルゴリズムの方が好きです。

Quicksortの違いは、「二次」対対数線形であり、多項式/指数関数の違いよりも目立ちません。シンプレックスアルゴリズムにも同様の壮大な違いがありますが、分析はBrzozowskiのアルゴリズムよりもかなり複雑です。

(また、BrzozowskiのDFA最小化アルゴリズムは、当然のようにあまり知られていませんが、もちろんそれは好みの問題です。)


申し訳ありませんが、関数プロットの解釈との関連性はよくわかりません。
ラファエル

3
インスタンスのサンプリングに対して、パフォーマンスとインスタンスサイズのようなプロットを行うことを想定します。Brzozowskiのアルゴリズムは、指数関数的な時間にするインスタンスを選択しない限り、多項式を「見ます」。
ニールクリシュナスワミ

1
そうですか。これは、アルゴリズムのベンチマークと平均実行時間のプロットの際の問題、つまり正しいデータプロットの問題です。私が質問を投げかけたとき、私はプロットを正しく解釈することだけを考えていました。これは完全に別の獣です。この視点を答えに追加してもらえますか?
ラファエル

平均および最悪の場合の動作が異なるすべてのアルゴリズムで同じ問題が発生します。クイックソートとシンプレックスが思い浮かびます。
ラファエル

8

カーブフィッティングの数学的手法を使用して、質問に対する答えを無限に提供できます。曲線と範囲が与えられると、任意の精度で曲線に適合する多項式を簡単に見つけることができます。ウィキペディアのこの例は、正弦波を4次多項式(青い曲線)にかなり正確に適合させる方法を示しています。

ここに画像の説明を入力してください

高次の多項式を使用して、このグラフよりもさらにプロット検査のヒューリスティックを欺くことができます。


2
それは本当だ。ただし、人工的な味もあります。確かに、この方法で学生向けの反例を生成することはできますが、それによってより懐疑的な見方がされているとは思いません。誤解が「致命的」であるこの現象(つまり、他の関数と間違われる可能性のある高次の多項式関数)の「自然な」発生はありますか?
ラファエル

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