Iは、証明または反証配列が与えられると、アルゴリズムが存在する整数を三の指数を見つけ、私は、Jおよびkのように、I < J < KとA [ I ] < A [ J ] < A [ kは】(または、そのようなトリプルがないことがわかります)線形時間で。
これは宿題の質問ではありません。「そのようなアルゴリズムを実装してみてください」とフレーム化されたプログラミングフォーラムでそれを見ました。さまざまな実験の後では不可能だと思います。私の直感はそう教えてくれますが、それは実際には何の役にも立ちません。
正式に証明したいと思います。どうやってやるの?理想的には、段階的にレイアウトされた証明を見たいと思います。そして、もしあなたがとても傾いているなら、このような簡単な質問を一般的に証明/反証する方法についての説明をご覧ください。それが役立つ場合、いくつかの例:
[1,5,2,0,3] → (1,2,3)
[5,6,1,2,3] → (1,2,3)
[1,5,2,3] → (1,2,3)
[5,6,1,2,7] → (1,2,7)
[5,6,1,2,7,8] → (1,2,7)
[1,2,999,3] → (1,2,999)
[999,1,2,3] → (1,2,3)
[11,12,8,9,5,6,3,4,1,2,3] → (1,2,3)
[1,5,2,0,-5,-2,-1] → (-5,-2,-1)
反復処理でき、i < j(つまり、現在のj)が存在するたびに、新しいトリプルを作成して配列にプッシュすると想定しました。トリプルの1つが完了するまで、各トリプルのステップ実行と比較を続けます。だから、のようなものです、!しかし、トリプル配列のトリプルの数は最悪の場合入力リストのサイズに対応するため、これは単なるO(n )よりも複雑だと思います。[1,5,2,0,-5,-2,-1] → 1..2.. -5.. -2.. -1
[1,5,2,0,-5,-2,3,-1] → 1..2.. -5.. -2.. 3