Russian Qt Forum
Ноябрь 23, 2024, 04:40 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Нахождение ближайшего числа  (Прочитано 6739 раз)
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« : Ноябрь 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

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

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
ddrtn
Гость
« Ответ #1 : Ноябрь 24, 2011, 15:05 »

Линейный поиск сразу двух чисел в одном цикле. сохранять найденное число и разность с границей (по две штуки). сравнивать разности.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #2 : Ноябрь 24, 2011, 15:15 »

Еще сложность в том, что границы не обязательно положительные числа...
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
ddrtn
Гость
« Ответ #3 : Ноябрь 24, 2011, 15:22 »

а разницы нет.

пусть границы a, b
расстояние от x до a:dx = abs(x - a),
расстояние от y до b:dy = abs(y - b),
ищется минимум dx и dy
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #4 : Ноябрь 24, 2011, 15:22 »

Хм. Сейчас попробую...
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #5 : Ноябрь 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;
}
 

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

Записан
ddrtn
Гость
« Ответ #6 : Ноябрь 24, 2011, 15:37 »

Линейный поиск


Тут уж нужно value делать pair<double, double>.
экономит целый проход цикла
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #7 : Ноябрь 24, 2011, 15:42 »

Igors, спасибо большое. Вроде, оно.
У самого были мысли по-поводу расстояний, но до ума не довел. Вообще, заколдованный проект какой-то, сил много уходит, а дело не спорится. Грустный
Скорость пока не критична, нужно его срочно сдать, а потом уже буду ускорять.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #8 : Ноябрь 24, 2011, 15:57 »

Вообще, заколдованный проект какой-то, сил много уходит, а дело не спорится. Грустный
большинство проектов, если не все, такие в определённый момент времени Улыбающийся
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #9 : Ноябрь 24, 2011, 16:35 »

Вообще, заколдованный проект какой-то, сил много уходит, а дело не спорится. Грустный
большинство проектов, если не все, такие в определённый момент времени Улыбающийся
Не, этот особенный. Он уже столько моих нервов попортил.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.073 секунд. Запросов: 22.