![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| vitlic |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 22.2.2007 Где: где home(){return где="тут"} Репутация: 1 Всего: 1 |
Был на собеседование в одной фирме на должность с/с++ embeded программиста. Задали вопрос, который на мой взгляд решил оптимально.
Может кто-нибудь знает как решить более оптимально? Задача: есть int массив n чисел. Нужно проверить есть ли в нем число k. Обычное решение:
При таком подходе в худшем случае, когда "к" не находиться в масиве, делается 2n+2 проверок (сравнений) Мое решение:
Сейчас в худшем случае делается n+2 проверок (сравнений). Есть ли еще какие-нибудь оптимизации? |
||||
|
|||||
| Sartorius |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1568 Регистрация: 18.7.2006 Где: Ivory tower Репутация: 8 Всего: 37 |
Не по теме немного ))
А что же вернется в первом случае, если i == n? Во втором случае нашли мы a[i] == k, а потом i-- делаем. ... PS а используя ограничивающий элемент в конце массива , оптимизировать больше некуда, если конечно никаких других данных о массиве у нас нет ))) ясно, что меньше чем n сравнениями не обойтись Это сообщение отредактировал(а) Sartorius - 2.4.2007, 14:42 |
|||
|
||||
| Xenon |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
Думал-думал и пока ничего лучше не придумал
... Удалил Это сообщение отредактировал(а) Xenon - 2.4.2007, 14:59 |
|||
|
||||
| Fazil6 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
Это сообщение отредактировал(а) Fazil6 - 2.4.2007, 14:55 |
|||
|
||||
| Sartorius |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1568 Регистрация: 18.7.2006 Где: Ivory tower Репутация: 8 Всего: 37 |
удалил...
Это сообщение отредактировал(а) Sartorius - 2.4.2007, 14:54 |
|||
|
||||
| vitlic |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 22.2.2007 Где: где home(){return где="тут"} Репутация: 1 Всего: 1 |
про i==n забыл, писал на скорую руку) насчет i-- ты прав других данных нет. Вопрос такой, есть ли какая-нибудь другая техника, при которой есть возможность добиться минимального количества сравнений/проверок? Добавлено через 1 минуту и 54 секунды
Решение с эстетической точки зрения красивое, но здесь 2n сравнений.. |
||||||
|
|||||||
| HappyLife |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 642 Регистрация: 17.5.2006 Репутация: 3 Всего: 8 |
Не соглашусь совершенно. Делаеться 2n + 2 сравнений. 1n. a[i]!=k 2n в условии while проверка на нуль... |
||||
|
|||||
| Sartorius |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1568 Регистрация: 18.7.2006 Где: Ivory tower Репутация: 8 Всего: 37 |
HappyLife,
где??? |
|||
|
||||
| HappyLife |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 642 Регистрация: 17.5.2006 Репутация: 3 Всего: 8 |
Добавлено @ 17:21 Sartorius, While сам по себе обладает такой конструкцией, что чтобы выйти из цикла сверяет булевое выражение.... Это сообщение отредактировал(а) HappyLife - 2.4.2007, 17:23 |
|||
|
||||
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
||||
|
||||
| threef |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 375 Регистрация: 27.10.2005 Где: Запорожье Репутация: 9 Всего: 10 |
vitlic,
ты запортил элемент массива - обидел работодателей.
|
|||
|
||||
| Sartorius |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1568 Регистрация: 18.7.2006 Где: Ivory tower Репутация: 8 Всего: 37 |
HappyLife, я думаю современные компиляторы все таки умеют оптимизировать обработку простых логических выражений....
|
|||
|
||||
| HappyLife |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 642 Регистрация: 17.5.2006 Репутация: 3 Всего: 8 |
Я бы сделал так.
Это сообщение отредактировал(а) HappyLife - 2.4.2007, 17:32 |
|||
|
||||
| Sartorius |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1568 Регистрация: 18.7.2006 Где: Ivory tower Репутация: 8 Всего: 37 |
HappyLife, а теперь представь, что вставит компилятор для проверки границ и выброса исключения.(Если оно вообще будет)
Это сообщение отредактировал(а) Sartorius - 2.4.2007, 17:32 |
|||
|
||||
| threef |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 375 Регистрация: 27.10.2005 Где: Запорожье Репутация: 9 Всего: 10 |
а корифеи не рекомендуют использовать исключения в виде составляющей алгоритмов.
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |