Как научиться придумывать алгоритмы и решать задачи?
Коллеги, у меня есть реальный шанс увеличить з/п, если внутри компании переведусь в разработку на Java.
Собственно, сам синтаксис не вызывает сложности. У меня другая проблема: не умею решать задачи. Почти всегда, за исключением фигни типа "вывести массив/матрицу", "найти min и max число" и т.п.
Вот, сегодня попалась задача:
Написать программу, которая запрашивает число N и выводит первые N чисел последовательности
Фибоначчи (N первых чисел: 0, 1, 1, 2, 3, 5, 8, ...)
Я вообще только узнал, что такое число Фибоначчи. Но как с этим работать - без понятия. Смотрю на условие задачи и как идиот, ничего в голове родить не могу. И так всегда. Синтаксис языка Java, как инструмент, я освоил, но пользоваться этим инструментом не умею. Я не умею решать задачи... У меня проблемы с абстрактно-логическим и алгоритмическим мышлением.
Такое лечится? Решил изучать математику с 7 по 11 класс. Возможно, это поможет прокачать мозг... Также хотел приступить к алгоритмам и стр-рам данных Н. Вирта, но понял там очень мало. Не хватает пререквизитов - базовых знаний по математике и правильно настроенных мозгов.
Помогите советом! Премного благодарен!
Начни с учебников программирования для начинающих:
Вирт, "Алгоритмы и структуры данных"
Кормен, "Алгоритмы. Вводный курс".
И нет, школьная математика не поможет. Нужна дискретная математика. Целые числа, матлогика, множества, графы и т.д. - это всё подразделы дискретной математики.
Что касается чисел Фибоначчи, то тут удобнее всего использовать динамическое программирование: когда мы движемся от старта к финишу, на каждом шаге вычисляя новое значение:
F[0] = 0
F[1] = 1
F[2] = F[0] + F[1]
F[3] = F[1] + F[2]
F[4] = F[3] + F[4]
...
F[N] = F[N - 2] + F[N - 1] Благодарю Вас за совет! Но всё равно, чувствую что знаний школьной математики не хватает. Почитал, наверное, четверть книги Вирта. Понял не очень многое: он там уже оперирует математикой. Придётся подтягивать,
А по дискретке есть какие-нибудь годные книги, зарекомендовавшие себя в глазах специалистов?
Читать Кнута иногда перед сном. Но мне больше настоящая математика нравится, то есть - непрерывная
Решайте задачки по программированию. Начинайте с лёгких
Ну так это и есть изучение программирования. А язык программирования - всего лишь система условных обозначений для записи того, что в голове у программиста :) Читай книги по алгоритмам.
Да, согласен) Вот только проблемки с этим. Помимо Вирта есть что-нибудь годное? Чувствую, что базы не хватает. Он часто там оперирует математикой... Придётся уже для таких книг математику подтягивать.
Я считаю, что как-никак задача математическая, и чем лучше знаешь математику, тем легче будет её решить.
Когда будешь уже работать, задачи будут скорее всего нематематические, а в другой сфере. И вот в этой сфере будешь постепенно совершенствоваться.
Ну и, как мне видится, в программировании фактор интеллекта (текучего) очень важен. Желательно бросить курить, ограничить потребление алкоголя, хорошо высыпаться, ограничить плохой стресс и прочее.
Слышал точку зрения, что после определённого возраста (лет 50 вроде) уже очень трудно заниматься программированием из-за снижения уровня здоровья. Так же, как трудно в этом возрасте играть в шахматы.
Ну и ещё, когда у меня не получается решить такую задачу, когда я прекращаю пытаться решить, я смотрю ответ и не просто запоминаю шаблон, а думаю, КАК Я ДОЛЖЕН БЫЛ МЫСЛИТЬ, ЧТОБЫ ЕЁ РЕШИТЬ. В чём была моя недоработка в мышлении, под каким углом я не посмотрел на задачу, под которым мог бы посмотреть. Что мне учесть и как мыслить, чтобы лучше решать и другие задачи.
Не знаю, понятна ли мысль, наверно, лучше на конкретном примере объяснять)
Кстати, я тоже решал то ли эту задачу, то ли очень похожую. Тоже про Фибоначчи. Тоже испытал сложности. Да, сложны такие, объективно, не для всех они.
Если совсем 0, то Грокаем алгоритмы прочитай, очень хорошая книжка
Мозг "прокачать", увы, не получится, это не мышца. Что природа дала, с тем и придётся жизнь прожить.
Можно много времени потратить на те же источники, но и времени потребуется больше и результат окажется нулевым. Там, где одни пролистывают матчасть за час-другой, другим требуются дни
тут надо искать одно из концетрированных чисел и по коду упразднять фибоначчи, обычно это делается быстро не составляет труда, впрочем все как и делал Беслан Друид