Russian Qt Forum

Программирование => Алгоритмы => Тема начата: Пантер от Ноябрь 24, 2011, 15:01



Название: Нахождение ближайшего числа
Отправлено: Пантер от Ноябрь 24, 2011, 15:01
Что-то у меня не получается, мозги уже не варят. :(
Есть вектор чисел (не отсортированный). Есть две границы. Нужно найти в векторе 2 числа, наиболее близкие к этим границам.

массив: -1.2 0.1 2.3 2.2 9.8 3.7 0.9
границы: 0 2
результат: 0.1 0.9

Заранее благодарю.


Название: Re: Нахождение ближайшего числа
Отправлено: ddrtn от Ноябрь 24, 2011, 15:05
Линейный поиск сразу двух чисел в одном цикле. сохранять найденное число и разность с границей (по две штуки). сравнивать разности.


Название: Re: Нахождение ближайшего числа
Отправлено: Пантер от Ноябрь 24, 2011, 15:15
Еще сложность в том, что границы не обязательно положительные числа...


Название: Re: Нахождение ближайшего числа
Отправлено: ddrtn от Ноябрь 24, 2011, 15:22
а разницы нет.

пусть границы a, b
расстояние от x до a:dx = abs(x - a),
расстояние от y до b:dy = abs(y - b),
ищется минимум dx и dy


Название: Re: Нахождение ближайшего числа
Отправлено: Пантер от Ноябрь 24, 2011, 15:22
Хм. Сейчас попробую...


Название: Re: Нахождение ближайшего числа
Отправлено: Igors от Ноябрь 24, 2011, 15:27
Линейный поиск

Код
C++ (Qt)
template <class T>
size_t LookupNearby( const std::vector <T> & vec,  double value )
{
size_t index = 0;
size_t i, limit = vec.size();
for (i = 1; i < limit; ++i)
 if (fabs(vec[i] - value) < fabs(vec[index] - value))
   index = i;
return index;
}
 

Но если жмет скорость, придется повозиться (не буду много писать если это не требуется)



Название: Re: Нахождение ближайшего числа
Отправлено: ddrtn от Ноябрь 24, 2011, 15:37
Линейный поиск


Тут уж нужно value делать pair<double, double>.
экономит целый проход цикла


Название: Re: Нахождение ближайшего числа
Отправлено: Пантер от Ноябрь 24, 2011, 15:42
Igors, спасибо большое. Вроде, оно.
У самого были мысли по-поводу расстояний, но до ума не довел. Вообще, заколдованный проект какой-то, сил много уходит, а дело не спорится. :(
Скорость пока не критична, нужно его срочно сдать, а потом уже буду ускорять.


Название: Re: Нахождение ближайшего числа
Отправлено: kambala от Ноябрь 24, 2011, 15:57
Вообще, заколдованный проект какой-то, сил много уходит, а дело не спорится. :(
большинство проектов, если не все, такие в определённый момент времени :)


Название: Re: Нахождение ближайшего числа
Отправлено: Пантер от Ноябрь 24, 2011, 16:35
Вообще, заколдованный проект какой-то, сил много уходит, а дело не спорится. :(
большинство проектов, если не все, такие в определённый момент времени :)
Не, этот особенный. Он уже столько моих нервов попортил.