![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
Firex |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 20.10.2010 Репутация: нет Всего: нет |
Создаётся динамический массив из 10 значений, в него рандомно записываются числа от -10 до 10. Как наиболее рационально можно определить число, которое встречается наибольшее количество раз(и сколько раз конкретно)?
Идея такая, но может быть кто-то предложит рациональнее: 1. Создаём дополнительно структурированный массив вида
В var будем писать повторившееся число, а count увеличивать на +1. Далее сортируем mass по переменной count и выводим максимальный элемент. Но тут возникает проблема... если повторившихся элементов несколько и переменная count у них одинаковая... Это лишние операции... |
|||
|
||||
Annihilator |
|
|||
![]() bytegrinder ![]() ![]() Профиль Группа: Участник Сообщений: 493 Регистрация: 21.11.2006 Где: Омск Репутация: 1 Всего: 3 |
Первое, что пришло на ум - 2 счетчика завести.
Допустим ты отсортировал массив и получилось что-то типа 1 1 1 2 2 2 2 3 3 3 5 5 7 8 8 9 9 9 9 9 0 первый счетчик начала считать элементы - насчитал 3 по 1 элемент изменился - запускаем второй счетчик по двойкам. Если счетчик по двойкам больше, чем по единицам, присваиваем первому счетчику значение второго счетчика, а второй счетчик используем далее, т.е. для троек. Потом опять сравниваем с первым счетчиком и т.д. Это сообщение отредактировал(а) Annihilator - 30.10.2010, 20:07 -------------------- Если вы не можете сделать хоpошyю пpогpаммy, сделайте, чтобы она по кpайней меpе выглядела хоpошо |
|||
|
||||
Firex |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 20.10.2010 Репутация: нет Всего: нет |
Спасибо за идею,если ничего больше не придумаю/не подскажут, то буду так делать.Но вот чувствую, что должно это как-то решаться совсем просто...
З.ы. Хотя этот вариант только для частного примера... хотелось бы масштабный вариант, не только для -10..10. З.ы.ы. да и рациональности тут не много, имхо ) Это сообщение отредактировал(а) Firex - 30.10.2010, 20:21 |
|||
|
||||
Леопольд |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 3 Всего: 13 |
Firex, отсортировать и один раз проbежаться по массиву.
-------------------- вопросов больше чем ответов |
|||
|
||||
azesmcar |
|
||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
есть множество решений, конкретно для этого случае можно хранить дополнительный массив
потом пройтись по всем элементам и сделать инкремент по индексу равному значению этого элемента +10
в итоге получаешь массив r, в котором по индексу записаны количества повторений каждого элемента массива. если элементов намного больше то можно использовать std::bitset (правда в этом случае будет невозможно отследить количество повторений) или std::map. Это сообщение отредактировал(а) azesmcar - 31.10.2010, 09:42 |
||||
|
|||||
Леопольд |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 3 Всего: 13 |
Но вариант с сортировкой bыстрее. Это сообщение отредактировал(а) Леопольд - 31.10.2010, 17:40 -------------------- вопросов больше чем ответов |
|||
|
||||
Firex |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 20.10.2010 Репутация: нет Всего: нет |
Прошу прощения тех, кто отписался, но я решил всё же пойти по своему алгоритму... Вот только проблемка одна появилась... как на вывод подать только 1 из повторяющихся значений ? А если переменная count одинакова у нескольких переменных, как быть ? Думаю стоит тогда вывести несколько разных переменных по одному разу, у которых переменная count одинакова. Собственно вопрос, что мне делать дальше? Вот код:
Это сообщение отредактировал(а) Firex - 31.10.2010, 17:46 |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
я уже писал об этом. сортировка - O(n log(n))+дальше понадобиться линейный перебор массива для поиска повторений, std::map - просто O(n log(n)), это n вставок, сложность каждой вставки O(log(n)). А в случае с вектором/bitset-ом сложность линейная O(n). Это сообщение отредактировал(а) azesmcar - 31.10.2010, 17:56 |
|||
|
||||
Леопольд |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 3 Всего: 13 |
Видимо, невнимательно читаю... ![]() Это сообщение отредактировал(а) Леопольд - 31.10.2010, 18:17 -------------------- вопросов больше чем ответов |
|||
|
||||
Firex |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 20.10.2010 Репутация: нет Всего: нет |
Подскажите пожалуйста по моему алгоритму
![]() |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
Firex
Завтра с утра напишу если никто не опередит, сегодня как-то лень ![]() Это сообщение отредактировал(а) azesmcar - 31.10.2010, 19:54 |
|||
|
||||
Леопольд |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 3 Всего: 13 |
-------------------- вопросов больше чем ответов |
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
Подсказываю - забыть как страшный сон. Из всех, предложенных в этом топике алгоритмов - ваш самый неэффективный (и самый прямолинейный). Единственное преимущество 'самый простой' полностью разбивается стилем реализации, типа 'черт ногу сломит' |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
||||
|
||||
Firex |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 20.10.2010 Репутация: нет Всего: нет |
Ладно, пусть плохой у меня код... тогда только подскажите дальнейшие действия, если на данной стадии я имею: структурированный массив упорядоченный по переменной vmass.tempCount(число повторений переменной), а в vmass.tempVar лежит сама переменная. Буду премного благодарен.
|
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
Вывести tempVar из начала (или конца - смотря как у вас они упорядоченны)
Не имеет значения - вам же нужен 1 максимальный? Вот один и берите. |
|||
|
||||
Firex |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 20.10.2010 Репутация: нет Всего: нет |
Решил следующим образом задачу, вдруг кому сгодиться) Программа ищет в массиве число, которое повторяется наибольшее количество раз, если таких чисел несколько, которые имеют равное количество повторений, то выводит их все.
Пусть код и убогий(как говорят тут старшие товарищи)... зато рабочий и без использования всякой всячины, которая на первом курсе не прокатывает. |
|||
|
||||
LeD4eG |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 115 Регистрация: 29.9.2009 Где: Волгоград Репутация: 1 Всего: 1 |
а нельзя ли сделать приблизительно такое (псевдокод):
ну хотя я ![]() --------------------
Ты не успел стать для кого-то главным, кому-то очень нужным..... |
|||
|
||||
Леопольд |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 3 Всего: 13 |
-------------------- вопросов больше чем ответов |
|||
|
||||
Firex |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 20.10.2010 Репутация: нет Всего: нет |
Леопольд, спасибо, буду это в последующем учитывать. Как то просто не задумывался над этим.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |