![]() |
|
Модераторы: bsa |
![]()
|
|
| ArniLand |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 17.8.2008 Репутация: нет Всего: нет |
За два курса в университете понял, что я ни черта не умею программировать. Сейчас хочу решить эту проблему. Для думаю нужно выяснить, что мне нужно повторить. Алгоритмическое мышление хромает и знания языка хромают. Вот выкладываю задачку которую пытался решить. Условие задачи: Найти количество различных элементов в массиве. Задачки решена не правильно, но пока я не могу понять как решить. С помощью этой задачи хочу выявить свои пробелы и получить рекомендации как их устранить. Заранее благодарен.
Это сообщение отредактировал(а) ArniLand - 20.6.2011, 21:57 |
|||
|
||||
| triclosan |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 515 Регистрация: 18.8.2006 Репутация: 2 Всего: 12 |
||||
|
||||
| ArniLand |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 17.8.2008 Репутация: нет Всего: нет |
Извините, исправил первый пост.
|
|||
|
||||
| fish9370 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 663 Регистрация: 15.4.2007 Где: Москва Репутация: 1 Всего: 1 |
эта задачка интереснее решается с помощью хеш-таблицы.. привожу самый приметивный пример:
алгоритм можно улучшить, если не брать чистый индекс для хеша, а получать его другим путем.. тогда можно сократить размер результирующего массива.. сорри что оффтоп и на Си.. Это сообщение отредактировал(а) fish9370 - 20.6.2011, 22:05 -------------------- undefined |
|||
|
||||
| triclosan |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 515 Регистрация: 18.8.2006 Репутация: 2 Всего: 12 |
Это сообщение отредактировал(а) triclosan - 20.6.2011, 22:26 |
|||
|
||||
| 500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: 1 Всего: 14 |
fish9370
старо))) может памяти не хватить -------------------- |
|||
|
||||
| fish9370 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 663 Регистрация: 15.4.2007 Где: Москва Репутация: 1 Всего: 1 |
я же говорю, что нужно хеш улучшить.. сделать перемешаную таблицу.. пример учебный.. зато как изящно.. Это сообщение отредактировал(а) fish9370 - 20.6.2011, 22:57 -------------------- undefined |
|||
|
||||
| 500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: 1 Всего: 14 |
fish9370
при чем тут определение "хеш"? -------------------- |
|||
|
||||
| fish9370 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 663 Регистрация: 15.4.2007 Где: Москва Репутация: 1 Всего: 1 |
набери в google: таблица с вычисляемым входом -------------------- undefined |
|||
|
||||
| 500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: 1 Всего: 14 |
вот это изящно , где esi= начала массива arr_res, ebp = элемент массива arr но это нифига не хеш ))) -------------------- |
|||
|
||||
| Qu1nt |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 602 Регистрация: 13.1.2007 Репутация: нет Всего: 50 |
|
|||
|
||||
| fish9370 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 663 Регистрация: 15.4.2007 Где: Москва Репутация: 1 Всего: 1 |
500mhz, ты тему читал? я уже и извинился за оффтоп.. и рассказал как нужно сделать.. что нужно доработать прогу и использовать перемешаную таблицу - специально для тебя писал..
а ты приводишь код на асме? мужик, че ты там куришь? -------------------- undefined |
|||
|
||||
| 500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: 1 Всего: 14 |
fish9370
какая разница на чем код ? ))) тут главное алгоритм ))) -------------------- |
|||
|
||||
| fish9370 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 663 Регистрация: 15.4.2007 Где: Москва Репутация: 1 Всего: 1 |
хорошо, где у тебя будет хранится результирующий массив? ты упрекнул мой алгоритм, что ему не хватит памяти при больших числах.. переадресую этот вопрос тебе.. как поведет себя твой алгоритм при больших числах? сколько памяти понадобится? -------------------- undefined |
|||
|
||||
| 500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: 1 Всего: 14 |
4 gb в худшем варианте )))
-------------------- |
|||
|
||||
| fish9370 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 663 Регистрация: 15.4.2007 Где: Москва Репутация: 1 Всего: 1 |
всего лишь? я использую перемешанную таблицу и сведу размер результирующего массива к размеру входного.. для любых чисел.. а тебе слабо? -------------------- undefined |
|||
|
||||
| 500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: 1 Всего: 14 |
да запросто ) как два байта переслать
-------------------- |
|||
|
||||
| fish9370 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 663 Регистрация: 15.4.2007 Где: Москва Репутация: 1 Всего: 1 |
-------------------- undefined |
|||
|
||||
| 500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: 1 Всего: 14 |
на пиво?
-------------------- |
|||
|
||||
| fish9370 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 663 Регистрация: 15.4.2007 Где: Москва Репутация: 1 Всего: 1 |
-------------------- undefined |
|||
|
||||
| 500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: 1 Всего: 14 |
не я в киеве )
-------------------- |
|||
|
||||
| fish9370 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 663 Регистрация: 15.4.2007 Где: Москва Репутация: 1 Всего: 1 |
вобщем если есть интерес и время, то сделай.. вообще было бы прикольно посмотреть это на асме..
-------------------- undefined |
|||
|
||||
| volatile |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
Горячие финские парни, не спорьте.
Мой вариант. В СТЛ есть мап. Он как будто специально сделан для такой задачи.
Вот собственно и всё! Осталось только вывести количество каждого значения.
http://liveworkspace.org/code/2c2bee1993a4...69b3cb5bc84161c Это сообщение отредактировал(а) volatile - 21.6.2011, 01:16 |
||||
|
|||||
| fish9370 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 663 Регистрация: 15.4.2007 Где: Москва Репутация: 1 Всего: 1 |
да.. он для такой задачи.. вообще я этому научился еще на PHP, там это развито еще круче, я специально не стал этого приводить.. -------------------- undefined |
|||
|
||||
| 500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: 1 Всего: 14 |
volatile
да мы уже не о том спорим ))) если максимальный элемент массива dword 0xffffffff то памяти может не хватить -------------------- |
|||
|
||||
| asmdzen |
|
||||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 345 Регистрация: 28.11.2010 Репутация: 3 Всего: 5 |
500mhz, вообще то если просто перевести код fish9370 на асм то получится что он просто будет жрать много памяти особенно при отрицательных значениях в массиве.
разве не правильней будет
вроде это то что нужно автору Это сообщение отредактировал(а) asmdzen - 21.6.2011, 09:51 |
||||
|
|||||
| Teleport |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 557 Регистрация: 5.7.2008 Где: Прибалтика Репутация: нет Всего: 6 |
asmdzen, а что по-твоему является различными элементами массива?
На мою логику так: 10, 8, 9, 2. Т. е. всего 4 различных элемента. А твоя программа выводит 6. И второй цикл ты начинаешь с i + 1, а я все же думаю, что нужно сравнивать со всеми элементами массива, кроме самого себя. Например, так - дошел ты до последней единички в массиве и сравниваешь ее с 8, 9, 2. И получается, что она различный элемент? Не думаю. Это сообщение отредактировал(а) Teleport - 21.6.2011, 11:54 |
|||
|
||||
| asmdzen |
|
|||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 345 Регистрация: 28.11.2010 Репутация: 3 Всего: 5 |
Teleport, различные элементы я понимаю 10, 8, 9, 3, 2, 1, то есть все элементы без повторов
ведь не сказано же "не повторяющихся" элементов. может я неправильно понял условие. покажите как будет правильно по вашему. |
|||
|
||||
| Teleport |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 557 Регистрация: 5.7.2008 Где: Прибалтика Репутация: нет Всего: 6 |
В условии сказано
По-моей логике элементы различные - это 10, 8, 9, 2. А элементы 3 и 1 повторяются и не являются различными. |
|||
|
||||
| asmdzen |
|
|||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 345 Регистрация: 28.11.2010 Репутация: 3 Всего: 5 |
Teleport, т.е. различных != уникальных?
по моей логике 10, 8, 9, 3, 2, 1 все различные между собой, остальные уже повторы )) |
|||
|
||||
| Teleport |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 557 Регистрация: 5.7.2008 Где: Прибалтика Репутация: нет Всего: 6 |
asmdzen, не знаю кто из нас прав
Твою логику понял. |
|||
|
||||
| ShadowC |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 96 Регистрация: 23.6.2011 Репутация: нет Всего: нет |
извеняюсь за некропостинг,но заинтерисовала задача,решил попробовать решить,вот что пришло на ум
что скажите по поводу такого алгаритма решения алгоритм построен на том,что программа берет массив и проверяет все элементы массива предшествующие этому массива и если не находит такого-же то инкрементирует счетчик,наверное можно было решить более красиво с таким же алгаритмом,у меня вышло весьма неуклюже Это сообщение отредактировал(а) ShadowC - 3.10.2011, 00:43 |
|||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
ShadowC, время выполнения вашего алгоритма N^2. Чтобы почувствовать нужно взять большой массив. Если в массиве миллион элементов, то понадобится порядка 10^12 итераций. Другими словами программа будет работать целый день, тогда как можно все сделать за 1 минуту. |
|||
|
||||
| ShadowC |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 96 Регистрация: 23.6.2011 Репутация: нет Всего: нет |
ну наверное можно даже с моими знаниями(8-ая глава книги дейтлов),но я сам обучаюсь без учителя,поэтому у меня сейчас не стоит вопрос об эффективности программ,а все силы направлены на то что бы решить задачу,думаю когда поднатаскаюсь до нормального уровня там можно будет и быстродействие подумать... P.S. а вообще есть такая идея,не знаю поможет ли - вначале отсортировать массив и в отсортированном массиве такой алгоритм пойдет просто мгновенно,потому что повторяющиеся элементы будут стоять рядом и шаг для проверки любого элемента массива будет равен одному Это сообщение отредактировал(а) ShadowC - 3.10.2011, 15:07 |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Этот вариант был давно уже предложен. Правда, он тоже не особо оптимален из-за использования двусвязного списка.
Это сообщение отредактировал(а) bsa - 3.10.2011, 15:42 |
|||
|
||||
| ShadowC |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 96 Регистрация: 23.6.2011 Репутация: нет Всего: нет |
я пренципиально не читал тему и думал сам,а то так не интересно... кстате bsa ты опытный в этом деле у меня к тебе вопрос ну и ко всем кто на него может ответить,какой самый быстрый алгоритм сортировки? Это сообщение отредактировал(а) ShadowC - 3.10.2011, 15:52 |
|||
|
||||
| SolRus |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 6.8.2011 Репутация: нет Всего: нет |
хоть вопрос не мне, все равно кой чего отпишу:
если сильно интересует эта тема читай книгу "Искусство_программирования" Дональда Кнута, том3 если побыстрому то на вики есть кое-что я точно незнаю какой, оно вроде зависит от того сколько элементов |
|||
|
||||
![]()
|
| Правила форума "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. |