私はこの宿題に関する質問を今少し考えてきました。サイズnの配列が与えられた場合、高低の値を最大1.5nの比較で見つけるアルゴリズムを設計します。最大で1.5nの比較で高/低の数を見つけるアルゴリズム
私の最初の試みは、私の問題は、ループの各反復は、三つの可能性の一つを有するある
int high=0
int low= Number.MaxValue //problem statement is unclear on what type of number to use
Number numList[0 . . n] //number array, assuming unsorted
for (i=0, i < n, i++) {
if (numList[i] > high)
high = numList[i]
else if (numList[i] < low)
low = numList[i]
}
た:
- 低い値が発見された - 1つの比較が
- 高い値が検出された作られたが - 2比較を行った
- どちらも見つかりませんでした - 2比較が行われました
したがって、配列トラバーサル全体に対して、最大2n回の比較が可能です。これは、1.5n回の比較の問題の最大要件とはまったく異なります。
、最良の開始値は、最初の要素です。 – wildplasser
@wildplasser、最初と最後の両方の値を初期化することを意味しますか? – Jason
はい。これにより、任意の{より低い、より高い}可能なセンチネル値を任意に選択することが回避される。 '空配列'の場合は常に特殊です(それは*が最低、最高ではありません) – wildplasser