![]() |
|
|
![]()
|
|
| КунгФуЧайник |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 10.8.2011 Репутация: нет Всего: нет |
Мышление, наверное, больше гуманитарное. Знаю концепции ООП, "программировал" в С++ Builder, работа связана с отчетами для бух.программы - тупо вытащить такую-то инфу из такой-то таблицы. Хочется прочно связать себя с серьезным программированием (ИИ, моделирование, поиск), но алгоритмическое мышление слабое. Например: дана задача, нужно решить - написать алгоритм. Т.е., как я понимаю, понять, что за шаги должны быть и почему именно такие шаги, а не какие-то другие.
Начинаю погружаться в задачу и практически сразу мозг отказывается работать, будто упираюсь в стену. Начинается что-то вроде "проскальзываний" - не могу четко сформулировать эти "что" и "почему", в голову всякий мусор лезет. Про формирование алгоритмов с помощью рекурсий я вообще молчу, хотя этот способ мне нравится много больше циклов. Получается, либо мне вообще уходить из программирования, либо перестроить мышление с гуманитарного на алгоритмическое. Уходить не хочу, поэтому на полном серьезе прошу помочь - посоветовать литературу, доступную для нулевого уровня. И вообще, можно ли перестроить так мышление в зрелом возрасте или это врожденная способность? Это сообщение отредактировал(а) КунгФуЧайник - 23.11.2011, 14:18 |
|||
|
||||
| VictorTsaregorodtsev |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 274 Регистрация: 28.7.2006 Репутация: 3 Всего: 8 |
Вот это
я не рекомендую вязать с ИИ, моделирование, поиск я формулирую в виде алгоритмов над векторами и матрицами (причём не над классами-векторами, как, допустим, в STL - а над обычными массивами, т.е. с минимумом ООП), или в виде алгоритмов над разреженными матрицами. С рекурсией или ООПом вдоль и поперёк - будут тормоза уже на средних объемах данных, а гигабайты вообще будет не потянуть. На сайте в подписи - есть заметка, где я издеваюсь над тормозами чужих программ (моя прога работает в 10-100 раз быстрее пяти других прог разных авторов, хотя алгоритм мы все реализовывали один и тот же). |
|||
|
||||
| КунгФуЧайник |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 10.8.2011 Репутация: нет Всего: нет |
Про ООП написал, чтобы показать, что хоть какой-то опыт в программировании есть. Алгоритм же воспринимаю как цикл с простыми переменными, без всяких объектов. Про рекурсию - жаль. Могу формулировать простенькие алгоритмы, но хочется решать сложные задачи, а не только формочки шлепать. Только шлепать формочки - тупиковый путь, низкий карьерный потолок. Может есть какие-нибудь упражнения? Напрягаю мозг разгадыванием судоку, но это к развитию алгоритмического мышления отношения не имеет. |
|||
|
||||
| kemiisto |
|
|||
![]() Дикий Кот. =^.^= ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: нет Всего: 160 |
tail call elimination & link-time optimization вам в руки! Если рекурсия хвостовая, то многие компиляторы умеют сами заменять на итерацию. И есть задачи, где рекурсивное решение - единственное из разумных. В общем согласен, что в 99% рекурсию пихают куда не надо, и что она таки может быть причной тормозов, но не надо так катигорично. С ООП тут ещё проще ситуация - если у вас язык подразумевает статическую компановку, а используемый компилятор не умеет оптимизацию во время компановки, то... То используйте компилятор, который умеет. КунгФуЧайник, мышление перестроить может и нельзя, но кто сказал, что это необходимо? Посоветую для начала классику: Вирт Н., Алгоритмы и структуры данных, Дал У., Дейкстра Э., Хоор К. Структурное программирование. А почему так считаете? Образование гуманитарное? -------------------- |
|||
|
||||
| КунгФуЧайник |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 10.8.2011 Репутация: нет Всего: нет |
kemiisto, спасибо за названия. Но Вирт, кажется, на паскале все это показывает. Может быть в паскале структуры данных другие или они в любом языке одинаковые? В пайтоне, например, который я немного изучаю, есть тип dict. Я думал его структура такая же, как в описании типа (ключ-значение), а он, оказывается, на самом деле реализован то ли хэш-структурой, то ли еще чем-то.
Нет пожалуй. Средне-специальное - техническое, но с программированием связано косвенно. В художке параллельно старшим классам учится, правда год. С детства лепил, рисовал. А вот с математикой плохо - только сейчас ее абстракцию начинаю понимать. Особенно убивает то, что вроде чувствую из каких операций состоит алгоритм, а четко сформулировать их не могу - понимание ускользает. Это сообщение отредактировал(а) КунгФуЧайник - 24.11.2011, 12:43 |
|||
|
||||
| VictorTsaregorodtsev |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 274 Регистрация: 28.7.2006 Репутация: 3 Всего: 8 |
kemiisto, я примером использования векторно-матричных операций просто сделал первый шаг к указанию на то, что существуют хорошо оптимизированные библиотеки (MKL, BLAS, LAPACK,...), которые эффективно доработаны и до многопоточного распараллеливания и/или распараллеливания на кластер.
Но раз ТС пишет, что ему трудно записывать/переписывать алгоритм на уровне матем.абстракций, то мой совет по либам пока неактуален. |
|||
|
||||
| Metalex |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 635 Регистрация: 22.10.2008 Где: Украина-ZPсity Репутация: нет Всего: нет |
Жаль, не могу вспомнить книгу, но что-то из раздела "Все в примерах на С++". Приятно удивило, что там рассматривались задачки не только на стандартную рекурсию, а и простенькое консольное рисование всяких узоров с помощью рекурсии, при чем не самой легкой. Если освоите это, да еще и закрепите - с рекурсией не должно вообще возникать проблем.
Очень хорошо развивает "рекурсивное" мышление работа с деревьями. -------------------- Don't let the system get you down. |
|||
|
||||
| VictorTsaregorodtsev |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 274 Регистрация: 28.7.2006 Репутация: 3 Всего: 8 |
||||
|
||||
| esperanto |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 194 Регистрация: 31.5.2003 Репутация: 2 Всего: 4 |
А вы ее прочитали и поняли всю до конца? Или хотя бы процентов 70? Добавлено через 3 минуты и 4 секунды Вы читаете на английском? А вообще вам надо изучить алгоритмы и смежные специальности 1) дискретную математику 2) теорию вероятностей 3) теорию вычислимости 4) структуры данных 5) алгоритмы курс или два 6) графы и их применения 7) теория чисел. 8) мат. анализ 9) логика 10) исскуственный интелект 11) теория информации +- и тогда вы будете неплохо разбираться может быть --------------------
B.Sc ->M.Sc.->Microsoft SDE-> (Ph.D. student + Intel SDE + psyсhology B.A) - > Skype SDET |
|||
|
||||
| _Y_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 8 Всего: 34 |
Мне почему-то кажется что советы "что изучать" здесь не совсем в тему. Скорее надо "как изучать". Ведь разговор не о том "что надо знать", а о том как-бы мозги подрегулировать.
ИМХО может помочь подход от простого к сложному. Разбираетесь с алгоритмами столь простыми, что в процессе разбора заснуть не успеваете -------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
| esperanto |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 194 Регистрация: 31.5.2003 Репутация: 2 Всего: 4 |
Именно что вам кажется. Что знать как изучать, надо знать что изучать. Невозможно изучать КАК неизвестно что. И человек должен иметь представление о масштабах задаче, прежде чем каковать, как же ему изучить. Но это мое личное мнение, основанное на 8 годах преподавания в университете и двух институтах на различных факультетах. И оно может и не верное. --------------------
B.Sc ->M.Sc.->Microsoft SDE-> (Ph.D. student + Intel SDE + psyсhology B.A) - > Skype SDET |
|||
|
||||
| baldina |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 4 Всего: 101 |
серьезное программирование означает профессиональное. неважно что, важно как какая разница? алгоритмы и структуры те же. алгоритмы часто на псевдоязыке записывают, что бы не привязываться к языку. правда, с реализацией так записанных алгоритмов у новичков могут быть проблемы. один простенький оператор yeld чего стоит))) esperanto, конечно дискретная математика и иже с ими важны, конечно нужно изучать. но вопрос то не в этом, точнее не столько в этом, а в алгоритмическом мышлении, в подходе. КунгФуЧайник, Вам нужно поизучать методологию разработки алгоритмов. Метода, способа разработки алгоритмов не существует. Это всегда творческий процесс, связанный с догадкой, озарением. Однако подходы есть, они довольно неплохо классифицированы и описаны. Здесь есть некоторая аналогия с дифференцированием и интегрированием: первое можно уметь или не уметь, второе можно не уметь, уметь, а можно уметь здорово; мучаясь над очередным интегралом мы пробуем различные способы, единственного верного пути нет. попробуйте эти книги: С.Скиена Алгоритмы. Руководство по разработке А.Левитин. Алгоритмы. Введение в разработку и анализ Лучше, наверно, начать со второй, она сосредоточена на методологии. Добавлено через 4 минуты и 28 секунд да, кстати. есть классика жанра - Д. Пойа Как решать задачу для общего развития и приведения мышления в порядок очень хорошо Добавлено через 14 минут и 55 секунд
тогда Кнут и Грэхем, возможно для Вас. Она не настолько сложна, как Вас пугают это ключевое, это причина. начните с четкой формулировки задачи. вслух (очень важно, что бы не просто промелькнула мысль, а была сформулирована конкретно, словами). если Вы что-то изучили, пробуйте это выразить своими словами, причем так, что бы они были понятны первокласснику, но при этом отражали суть. Это сообщение отредактировал(а) baldina - 27.11.2011, 03:01 |
||||
|
|||||
| _Y_ |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 8 Всего: 34 |
Мы с Вами по-разному понимаем вопрос автора темы. Мне кажется что у него ключевая проблема именно в том, что мозг "самоотключается" на данной тематике. У меня то же самое бывает когда сижу на каких-нибудь административных собраниях, семинарах о значимости науки/техники для общества, и обсуждениях "как бы нам раздобыть побольше денег". Отрубаюсь и засыпаю прямо на глазах у публики как бы мне самому результаты этого заседания ни были важны. Автор темы знаком с тем что такое алгоритмы и зачем они ему нужны. И масштабы задачи вроде бы представляет. Вот я и предложил ему что-то, что для него должно быть достаточно просто: метод попарной перестановки, например. Можно даже "расширить" - потратить пару недель на разборку различных методов сортировки. Среди них много очень простых, кстати. Потренировать мозги (что и требуется, сколь я понимаю). ОФФ: кстати, как-то мы выяснили, что большинство выпускников факультета прикладной математики к моменту выпуска уже не помнят никаких методов сортировки, кроме попарной перестановки
Письками будем меряться? Но это мое личное мнение, основанное на 8 26 годах преподавания в университете и двух институтах трех разных стран на пяти различных факультетах. И оно может и не верное. -------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
||||
|
|||||
| КунгФуЧайник |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 10.8.2011 Репутация: нет Всего: нет |
Ответ длинный. Короче не получилось, извините.
Именно. Не знал, что есть методология разработки алгоритмов. Спасибо за названия. Да. Причина, как мне кажется после субъективной "самодиагностики", в отсутствии умения разложить задачу на четкую, "атомарную", последовательность шагов. Бывает, "определил" шаг, вроде все понятно - смотрю на этот шаг и в упор не понимаю, что это на самом деле не шаг, а еще не четкий клубок, который еще распутывать, чтобы получить последовательность (либо вообще понять, что определил неправильно). Чего-то в логике не хватает. esperanto, тот список, что вы привели - пока только облизываюсь, ближе подступиться не получается, хотя много раз пробовал. Это уже для "второго приближения". Хотя из списка можно, наверное, уже сейчас взять на проработку пункт про логику. Из всех советов попробую сформулировать план на "первое приближение": 1. Тренировка мозга на формулирование алгоритмов от простых к сложным. 2. Изучение литературы по методологии алгоритмов. Хоть процесс творческий, но приемы как подходить к анализу задач наверняка есть. Чтобы не было такого состояния, когда не знаешь, с какой стороны поступиться, за что взяться. 3. Тренировка логики. Посылки, выводы. 4. Какие-нибудь упражнения, чтобы научить мозг отвлекаться от конкретики. А то математика мне не дается со школы именно потому, что не понимаю, что там прячется за всякими буквами, обязательно нужны какие-нибудь конкретные примеры. Цель - сформировать навык анализа алгоритмических задач, и их формулирования в алгоритмы. После этого, думаю, можно приступать к списку esperanto. Что скажете? Плохо, сейчас усиленно тренирую. Нашел Alan Graham "Базовая Математика" ("Teach Yourself Basic Mathematics"). Другого Грехема тоже нашел. |
|||
|
||||
| _Y_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 8 Всего: 34 |
КунгФуЧайник, ИМХО алгоритм борьбы со своей проблемой Вы составили вполне правильно
-------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
![]()
|
| Правила форума "Алгоритмы" | |
|
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Алгоритмы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |