Вот ситуация. У меня есть отсортированный список целых чисел, представляющих события, которые нужно уволить на определенную миллисекунду. Этот список может выглядеть следующим образом:Ищете эффективный алгоритм для нахождения ближайшего целого числа в списке целых чисел
0
1500
5000
9348
89234
109280
109281
109283
150000
Я тогда playhead
, который обычно движется вперед каждые 100 мс, но может случайным образом искать и кустарниковые вперед и назад, а также. Этот проигрыватель не гарантирует, что он будет кратным 100, но может быть перекрыт до нескольких, без каких-либо реальных проблем.
Мой вызов состоит в том, чтобы иметь возможность эффективно находить ближайший элемент в списке, который меньше или равен текущей точке воспроизведения. Средняя длина списка составляет от 300 до 1500 элементов. Я могу легко оптимизировать форвард с заданными интервалами, но случайный поиск немного сложнее.
Заставляет меня пожелать, чтобы я спал по классу алгоритмов.
Простейший способ: Цикл через массив в обратном направлении и выбрать первый элемент, который меньше или равен ползунка. Вы пробовали это, это слишком неэффективно для вашего случая использования? – deceze
Задача состоит в том, чтобы * эффективно * найти ... Линейный поиск неэффективен. –
Возможно, это будет достаточно эффективно *. 1500 элементов не * это * много для современной машины. – deceze