Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.05.2011, 13:51   #1
elpilasgsm
Пользователь
 
Регистрация: 30.03.2009
Сообщений: 20
По умолчанию Алгоритм поиска в массиве

Добрый день.
Возможно я конкретно туплю, но может ли мне кто-нибудь подсказать быстрый метод поиска максимума (минимума) в одномерном неотсортированном целочисленном массиве. Сортировать массив не имеется возможности. Временная сложность должна быть меньше линейной
elpilasgsm вне форума Ответить с цитированием
Старый 18.05.2011, 13:52   #2
Vanta11a
Lawful Evil
Участник клуба
 
Аватар для Vanta11a
 
Регистрация: 13.05.2008
Сообщений: 1,208
По умолчанию

Заводишь переменную, пишешь в неё значение 1го элемента массива.
Гонишь цикл по массиву. Если значение элемента больше(меньше) значения переменной, записываешь его в переменную.

После прогонки массива выводишь полученную переменную.
Алгоритм - бесплатен. Поиск багов - бесплатен. Реализация алгоритма - за отдельную плату.
На форуме помогают советами и объясняют, а не пишут на халяву программы, лабы, курсачи и т.д. (c)
Vanta11a вне форума Ответить с цитированием
Старый 18.05.2011, 14:31   #3
elpilasgsm
Пользователь
 
Регистрация: 30.03.2009
Сообщений: 20
По умолчанию

Для моей задачи это долго )). Спасибо за ответ)
elpilasgsm вне форума Ответить с цитированием
Старый 18.05.2011, 14:34   #4
Vanta11a
Lawful Evil
Участник клуба
 
Аватар для Vanta11a
 
Регистрация: 13.05.2008
Сообщений: 1,208
По умолчанию

Цитата:
быстрый метод поиска максимума (минимума) в одномерном неотсортированном целочисленном массиве
Терзают сомненья, что более быстрый вообще существует, ибо проверять в любом случае надо все элементы.
Алгоритм - бесплатен. Поиск багов - бесплатен. Реализация алгоритма - за отдельную плату.
На форуме помогают советами и объясняют, а не пишут на халяву программы, лабы, курсачи и т.д. (c)
Vanta11a вне форума Ответить с цитированием
Старый 18.05.2011, 14:36   #5
elpilasgsm
Пользователь
 
Регистрация: 30.03.2009
Сообщений: 20
По умолчанию

Ну да. Я вот думаю просто, если проверять параллельно с начала до середины и с конца до середины. А потом выбирать между двумя. будет ли быстрее?
elpilasgsm вне форума Ответить с цитированием
Старый 18.05.2011, 14:49   #6
Vanta11a
Lawful Evil
Участник клуба
 
Аватар для Vanta11a
 
Регистрация: 13.05.2008
Сообщений: 1,208
По умолчанию

Сложность даже выше, проверяются n+1 элементов.
Цитата:
n/2 + n/2 + 1
Алгоритм - бесплатен. Поиск багов - бесплатен. Реализация алгоритма - за отдельную плату.
На форуме помогают советами и объясняют, а не пишут на халяву программы, лабы, курсачи и т.д. (c)
Vanta11a вне форума Ответить с цитированием
Старый 18.05.2011, 14:49   #7
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

Цитата:
Сообщение от elpilasgsm Посмотреть сообщение
Ну да. Я вот думаю просто, если проверять параллельно с начала до середины и с конца до середины. А потом выбирать между двумя. будет ли быстрее?
думаю, вряд ли
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума Ответить с цитированием
Старый 18.05.2011, 14:56   #8
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

> будет ли быстрее?

быстрее может быть, но общая "временная сложность" останется постоянной и будет продолжать линейно зависеть от размера массива )
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 18.05.2011, 15:30   #9
elpilasgsm
Пользователь
 
Регистрация: 30.03.2009
Сообщений: 20
По умолчанию

В общем я решил практически проверить. "Мой метод" оказался порядка 25% - 40% быстрее. Да ВСА осталась та же.

вот код:
Код:
long Max2 (long *mas, long lenght)
{
	long max;
	long max1=mas[0];
	long max2=mas[lenght-1];

		for (long i=1; i < lenght/2; i++)
		{
			if (max1<mas[i])
			{
				max1=mas[i];
			}
			if (max2<mas[lenght-i-1])
			{
				max2=mas[lenght-i-1];
			}
		}
		if (max1>max2) {
			max=max1;
		}
		else max=max2;
	return max;
}
elpilasgsm вне форума Ответить с цитированием
Старый 18.05.2011, 15:31   #10
elpilasgsm
Пользователь
 
Регистрация: 30.03.2009
Сообщений: 20
По умолчанию

А какой функцией С++ можно проверить само время. Не GetTickCount (). Что нибудь более тонкое))
elpilasgsm вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
алгоритм поиска незнайка_на_земле Помощь студентам 4 08.03.2011 10:46
Алгоритм поиска!!!! vit1990 Помощь студентам 14 29.01.2011 21:18
Написать подпрограмму-процедуру поиска максимального элемента в массиве Noxil Паскаль, Turbo Pascal, PascalABC.NET 3 27.11.2008 21:39
Алгоритм поиска... Johnson Общие вопросы Delphi 1 26.10.2008 08:35