Итак, вам дан массив длиной n и числом k , и вас попросят найти наилучшее подходящее отверстие в массиве, близкое к k возможно, но не меньше.
Без предварительной информации о массиве и без гарантии связи между k и n , вы должны потратить O (n / k) время поиска в массиве, чтобы найти подходящее отверстие.Зачем?
Подумайте об этом так: априори, у вас есть n - k мест, где может начаться ваше отверстие наилучшего соответствия.Если вы запрашиваете один элемент в массиве, наибольшая информация, которую вы можете извлечь, заключается в том, что k местоположений в массиве не может работать:
n = 12, k = 3
array: [ ? ][ ? ][ ? ][ ? ][ ? ][ ? ][ ? ][ ? ][ ? ][ ? ][ ? ][ ? ]
^-(query here, find it is occupied)
array: [ ? ][ X ][ X ][ X ][ ? ][ ? ][ ? ][ ? ][ ? ][ ? ][ ? ][ ? ]
Now you know the locations with X's cannot fit your data.
However, you can't know anything more than that.
Из этого вы можете видеть, что неважноВаш алгоритм поиска или порядок, в котором вы запрашиваете массив, вам потребуется O (n / k) доступов, чтобы определить, где находится любое отверстие, не говоря уже о наилучшем соответствии.
PS Существует также некоторая путаница с термином "линейный поиск".Для большинства это равносильно тому, что алгоритм требует линейного времени - и ваш алгоритм ДОЛЖЕН занимать линейное время.Если для вас «линейный поиск» означает последовательный поэтапный поиск по массиву, то вы можете улучшить немного на O (n) , но не более, чем к .Если k предполагается постоянной для задачи, то она выпадает, и у вас все еще остается O (n) .