Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Философия программирования > Алгоритмы. Учебники


Автор: webz 3.1.2010, 18:43
Добрый день. 

Не знаю, правильно ли выбрал раздел для вопроса. У меня несколько вопросов:

Начал изучать программирование (около 2 месяцев PHP, если точно)
Столкнулся с тем, что сам синтаксис языка выучить, найти нужную функцию в документации относительно просто. Но никак не получается начать "думать" как программист. 
Видеть как-то решение задачи.. 
Дальнейшие поиски повернули в сторону алгоритмов. Видимо это самое важное, 
а как написать на языке уже второй вопрос. Учебники, которые находил (книги Кнута, книга Кормена "Алгоритмы. Построение и анализ") - все требует знания математики. У меня эти знания со школы уже подвыветрились. 

Может есть что-то более доступное для понимания? 
Если заниматься с преподавателем математики - на чем акцентировать внимание? 
Рад услышать любые советы. 

Автор: kemiisto 3.1.2010, 19:14
Цитата(webz @  3.1.2010,  19:43 Найти цитируемый пост)
Может есть что-то более доступное для понимания?

Есть. Например, http://www.williamspublishing.com/Books/5-8459-0987-2.html. Или недавно вышедшая http://findbook.ru/search/d1?isbn=978-5-94074-584-6&r=0&s=1&viewsize=15&startidx=0.

Но без математики всё же никак. Надо знать многие разделы математического анализа. Можно воспользоваться классическим учебником В. А. Ильин, В. А. Садовничий, Бл. Х. Сендов, Математический анализ. В 2 частях. В продаже сам найти не смог, но по сети ходит электронная версия середины 80-х.

Ну и без дискретной математики далеко не уедешь. Тут могу рекомендовать два труда с одинаковым названием "Дискретная математика для программистов" за авторством Ф. А. Новикова и Р. Хаггарти.

Автор: webz 3.1.2010, 21:16
kemiisto, спасибо!

Автор: maxdiver 4.1.2010, 00:39
По моему скромному мнению, математика не настолько уж необходима, чтобы начинать с неё. Хотя я сам как раз таки алгоритмами достаточно плотно занимаюсь, но всё же, на мой взгляд, чтобы стать хорошим программистом, не обязательно начинать с всяких графов, теории сложности, и прочего.

Конкретную книгу я советовать не буду, тем более тут всё от языка сильно зависит. Только PHP на эту роль никак не тянет smile Выберите какой-нибудь нормальный язык, тогда можно будет более конкретно о книгах поговорить, впрочем тогда и на этом же форуме можно будет найти тему с соответствующим языком.

Лично я поступал следующим образом: сначала я некоторое время тратил на хорошее изучение синтаксиса языка. Несколько месяцев я читал различные книги, начиная с самых азов, и постепенно переходя ко всё более углубленным книгам. За это время помимо самого языка впитывается и его "философия", ведь в этих книгах даются рекомендации опытных людей, обобщающие в себе огромный накопленный опыт. И только потом я устанавливаю среду программирования себе на компьютер. Затем я ставлю себе какую-нибудь учебную задачу, поначалу простую, но и чтобы ей было интересно заниматься, и долблю-долблю её, пока всё не выйдет так, как я и хотел, и чтобы при этом и код был достаточно красивым и отвечал требованиям профессионалов smile Ну и вот так, за несколько таких задач, вполне можно получить достаточно практики, к уже имеющимся теоретическим знаниям.

И математика при этом редко оказывается нужна, точнее, когда оказывалось необходимым решить конкретную задачу, я искал книги/статьи по теме и разбирался в решении. Изучать все подряд алгоритмы, пусть даже и совсем базовые и простые, в такой ситуации мне кажется неразумным. Дискретная математика, комбинаторика, теория чисел - во всё это я углубился позже, когда вплотную занялся олимпиадами (опомнился вдруг, в универе, поиграться решил smile хотя сейчас, похоже, это кое-какие дивиденды мне даст... smile )

Автор: Pavia 4.1.2010, 14:28
Математика в алгоритмах не так важна. Важно абстрактное мышление которому как раз и учит математика. А также математика это язык на котором приходится разговаривать чтобы понимать некоторые вещи.

Предлагаю начать с "С. Окулов Программирование в алгоритмах". Алгоритмы можно писать на любом языке. Даже на бэсике.
В книжке достаточно теории для реализации и есть задачи.  И минимум математике. А если захочется задач по интересней то можно найти много сборников. К примеру  "Особенности национальных задач по информатике".

Можно найти также много книг с математикой.  Сам я увлекся распознаванием образов и обработкой сигналов. Вот тут мне встретилась вся высшая математика и не только. 

Автор: webz 5.1.2010, 15:14
maxdiver
Pavia,
спасибо большое за ответы! 

Автор: _Y_ 8.1.2010, 19:55
Не знаю, подойдет ли это Вам, но сам я большой поклонник http://ru.wikipedia.org/wiki/%D0%91%D0%BB%D0%BE%D0%BA-%D1%81%D1%85%D0%B5%D0%BC%D0%B0. Алгоритм расписывается в виде схемы и, таким образом, становится ясным и наглядным.

Может стОит взять пару-тройку несложных общеизвестных алгоритмов (например сортировку перестановкой, сортировку пузырьком, еще что-нибудь) и попробовать самому расписать их в виде блок-схем по всем правилам? Потом взяться за собственную задачу, не намного более сложную, и нарисовать до того, как начать программировать. Понятно, что когда пойдут сложные задачи, придется составлять отдельные схемы для подпрограмм (методов, функций).

Когда втянетесь, уже не будете, конечно, рисовать блок-схемы для всего, что понадобилось. Просто представлять будете себе ясно шаги алгоритма, а уж разрисовывать - только самые сложные и запутанные структуры. 

Автор: Vad118 10.1.2010, 02:01
Цитата(_Y_ @ 8.1.2010,  19:55)
Не знаю, подойдет ли это Вам, но сам я большой поклонник http://ru.wikipedia.org/wiki/%D0%91%D0%BB%D0%BE%D0%BA-%D1%81%D1%85%D0%B5%D0%BC%D0%B0. Алгоритм расписывается в виде схемы и, таким образом, становится ясным и наглядным.

Может стОит взять пару-тройку несложных общеизвестных алгоритмов (например сортировку перестановкой, сортировку пузырьком, еще что-нибудь) и попробовать самому расписать их в виде блок-схем по всем правилам? Потом взяться за собственную задачу, не намного более сложную, и нарисовать до того, как начать программировать. Понятно, что когда пойдут сложные задачи, придется составлять отдельные схемы для подпрограмм (методов, функций).

Когда втянетесь, уже не будете, конечно, рисовать блок-схемы для всего, что понадобилось. Просто представлять будете себе ясно шаги алгоритма, а уж разрисовывать - только самые сложные и запутанные структуры.

Кстати говоря ведь именно так и проходит обучение программированию в учебных заведениях. Берите учебник по программированию, по любому языку(можно и по php главное чтоб там были как-раз задачки подобного типа - сортировка пузырьком, поиск в массиве, и прочие элементарные, если таковых нет, ищите другой учебник smile Например Н. Культин c\c++ в задачах и примерах. - т.е. фактически вам нужен задачник по программированию), и расписывайте их в виде блок-схем. Если не владеете блок схемами, то посмотрите где-нить примеры (к сожалению сейчас нет под рукой ничего чтобы конкретно посоветовать), и начинайте рисовать свои блок схемы к тем самым простым задачкам. 

Никакая высшая математика, и проч. не понадобится, всё что вам нужно - алгебра логики - это школьникам ещё дают - элементарщина, если пороетесь в инете найдёте. В принципе дискретная математика тоже в эту сторону. Но основой этих простых алгоритмов будет только ваше собственное логическое мышление, а когда набьёте руку на этих простых задачах, сами поймёте что вам нужно дальше.

Автор: esperanto 13.1.2010, 00:31
Цитата(Vad118 @ 10.1.2010,  02:01)
1)Кстати говоря ведь именно так и проходит обучение программированию в учебных заведениях. 

Берите учебник по программированию, по любому языку(можно и по php главное чтоб там были как-раз задачки подобного типа - сортировка пузырьком, поиск в массиве, и прочие элементарные, если таковых нет, ищите другой учебник smile Например Н. Культин c\c++ в задачах и примерах. - т.е. фактически вам нужен задачник по программированию), и расписывайте их в виде блок-схем. Если не владеете блок схемами, то посмотрите где-нить примеры (к сожалению сейчас нет под рукой ничего чтобы конкретно посоветовать), и начинайте рисовать свои блок схемы к тем самым простым задачкам. 

2)Никакая высшая математика, и проч. не понадобится, всё что вам нужно - алгебра логики - это школьникам ещё дают - элементарщина, если пороетесь в инете найдёте. В принципе дискретная математика тоже в эту сторону. Но основой этих простых алгоритмов будет только ваше собственное логическое мышление, а когда набьёте руку на этих простых задачах, сами поймёте что вам нужно дальше.

1) Нет. Не так.


2) Вы заблужаетесь, мало выдумать алгоритм. Наде уметь доказать что он работает правильно. Уметь посчитать его сложность и оценить эффективность.


Автор: bilbobagginz 13.1.2010, 08:31
Цитата(Pavia @  4.1.2010,  13:28 Найти цитируемый пост)
Математика в алгоритмах не так важна. Важно абстрактное мышление которому как раз и учит математика. 

КСТАТИ, ДА.
Важно абстрактное мышление, а путей натренировать это абстрактное мышление лучше математики - на настоящий момент нету.

Добавлено через 14 секунд
esperanto, +1

Автор: hkdkest 14.1.2010, 14:24
без азов математики никуда (то что в школе проходят)

Автор: bumbastic 15.1.2010, 14:40
Цитата(kemiisto @  3.1.2010,  19:14 Найти цитируемый пост)
Есть. Например, Ананий В. Левитин, Алгоритмы: введение в разработку и анализ. 


kemiisto, не подскажете где ее можно скачать в электронном виде? очень нужно! 

сам не нашел

Автор: bumbastic 18.1.2010, 15:21
нет значит в электронном виде? так понимать "молчание НЕягнят"?  smile 

Альфред В.Ахо, Джон Э.Хопкрофт, Джеффри Д.Уильман "Структуры данных и алгоритмы"
очень доступно написано. даже я понял  smile 

Автор: jijidesign 31.8.2010, 17:10
ох, ох. Да, да абстракция это хорошо, НО мы забываем что программисты люди конкретные, и им много приходится думать, рассуждать, связывать цепочки и анализировать это. Логическое мышление - это наше все. Как говорят люди играющие на профессиональном уровне в шахматы, бридж могут стать хорошими программистами. А математика, не вся нужна программистам, ну конечно программисткую математику не надо запрещать, а вот мат анализ бывает лишний, просто у нас в РОССИИ всей же обучают по Советской программе, когда все 5 курсов долбят матаном. Да это полезно, но не всегда. Вид может человеку некогда не пригодится векторная алгебра, линейная алгебра, аналит. геометрия - он просто не хочет писать свой 3D движок. 
Так что, надо определится чем хочешь заниматься, какими отраслями, и с этого пункта уже ориентироваться на какие в первую очередь нужны знания. ;)
Например я стал изучать математику, не потому что мне нужно, а потому что нравится, и охота научится решать самому сложные примеры, и искать свои методы решения. - Нравится, и все. Хотя, лень убивает бывает.
Так что удачи в свои начинаниях, помни всегда правило дедушки "Учись, учист и еще раз учись". Надеюсь чью то самооценку не задел.

Автор: kemiisto 31.8.2010, 17:19
Цитата(kemiisto @  3.1.2010,  20:14 Найти цитируемый пост)
Можно воспользоваться классическим учебником В. А. Ильин, В. А. Садовничий, Бл. Х. Сендов, Математический анализ. В 2 частях.

Хороший двухтомник. Удалось купить у букинистов.

Кстати говоря, вышла новая версия классичсекого труда Н. Вирта. http://findbook.ru/search/d1?isbn=9785940745846&r=0&s=1&viewsize=15&startidx=0. Хорошая книга.

Автор: jijidesign 1.9.2010, 10:45
А я в данный момент читаю книгу, Кнут'а "Конкретная математика", можно еще почитать "Искусство программирование" тоже кнута, но там это, много математики - нужна база. 

Автор: ValeryLaptev 6.9.2010, 08:11
Цитата(kemiisto @  31.8.2010,  17:19 Найти цитируемый пост)
Кстати говоря, вышла новая версия классичсекого труда Н. Вирта. Алгоритмы и структуры данных. Хорошая книга. 


Не просто хорошая, а ОЧЕНЬ ХОРОШАЯ. Там еще к ней сидюк с системой BlackBox прилагается. И все примеры книги в этой системе расписаны и представлены. И доки по самой системе тоже есть. Переводчик ОЧЕНЬ грамотный, сам преподает программирование - перевел просто отлично! Да еще и непосредственно с Виртом согласовывал весь текст. 
Рекомендую. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)