Предполагая, что фиксировано (как это делают обе связанные лекции), тогда ваш выбор алгоритма определит, будет ли ваше вычисление O ( n d + k n ) времени выполнения или O ( n d k ) времени выполнения.kO(nd+kn)O(ndk)
Сначала рассмотрим алгоритм времени выполнения :O(nd+kn)
- Инициализировать для всех наблюдений я в обучающем набореselectedi=0i
- Для каждого наблюдения обучающего набора вычислите d i s t i - расстояние от нового наблюдения до наблюдения обучающего набора i.idistii
- При до K : цикл по всем обучающей выборки наблюдений, выбирая индекс я с наименьшим д я сек т я значение , и для которых ев е л е с т е д я = 0 . Выберите это наблюдение, установив с й л е с т е д я = 1 .j=1kidistiselectedi=0selectedi=1
- Вернуть выбранных индексовk
Каждое вычисление расстояния требует времени выполнения , поэтому второй шаг требует времени выполнения O ( n d ) . Для каждой итерации на третьем шаге мы выполняем работу O ( n ) , циклически просматривая наблюдения обучающего набора, поэтому общий шаг требует работы O ( n k ) . Первый и четвертый шаги требуют только O ( n ) работы, поэтому мы получаем O ( n d + k n ) времени выполнения.O(d)O(nd)O(n)O(nk)O(n)O(nd+kn)
Теперь давайте рассмотрим алгоритм времени выполнения :O(ndk)
- Инициализировать для всех наблюдений я в обучающем набореselectedi=0i
- Для - k : переберите все наблюдения обучающего набора и вычислите расстояние d между выбранным наблюдением обучающего набора и новым наблюдением. Выберите индекс я с наименьшим г значения , при котором с е л е с т е д я = 0 . Выберите это наблюдение, установив с й л е с т е д я = 1 .j=1kdidselectedi=0selectedi=1
- Вернуть выбранных индексовk
Для каждой итерации на втором шаге мы вычисляем расстояние между новым наблюдением и каждым наблюдением обучающего набора, требуя работы для итерации и, следовательно, O ( n d k ) работы в целом.O(nd)O(ndk)
Разница между этими двумя алгоритмами заключается в том, что первый предварительно вычисляет и сохраняет расстояния (требуя дополнительной памяти), а второй - нет. Однако, учитывая , что мы уже хранить весь набор обучения, требующий вывод ( п d ) память, а также с й л е с т е д вектор, требующий O ( п ) хранением, хранение двух алгоритмов асимптотический одна и та же. В результате, лучшее асимптотическое время выполнения для k > 1 делает первый алгоритм более привлекательным.O(n)O(nd)selectedO(n)k>1
Стоит отметить, что можно получить время выполнения с помощью алгоритмического улучшения:O(nd)
- Для каждого наблюдения обучающего набора вычислите d i s t i - расстояние от нового наблюдения до наблюдения обучающего набора i.idistii
- Запустите алгоритм быстрого выбора, чтобы вычислить наименьшее расстояние в O ( n ) времени выполненияkthO(n)
- Вернуть все индексы, не превышающие вычисленное наименьшее расстояниеkth
Этот подход использует преимущество того факта, что существуют эффективные подходы для поиска наименьшего значения в несортированном массиве.kth
quickselect
.