Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Мышление слабо алгоритмическое, но очень хочется, создавать сложные алгоритмы. Прокачка? 
:(
    Опции темы
КунгФуЧайник
Дата 23.11.2011, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 10.8.2011

Репутация: нет
Всего: нет



Мышление, наверное, больше гуманитарное. Знаю концепции ООП, "программировал" в С++ Builder, работа связана с отчетами для бух.программы - тупо вытащить такую-то инфу из такой-то таблицы. Хочется прочно связать себя с серьезным программированием (ИИ, моделирование, поиск), но алгоритмическое мышление слабое. Например: дана задача, нужно решить - написать алгоритм. Т.е., как я понимаю, понять, что за шаги должны быть и почему именно такие шаги, а не какие-то другие. 
Начинаю погружаться в задачу и практически сразу мозг отказывается работать, будто упираюсь в стену. Начинается что-то вроде "проскальзываний" - не могу четко сформулировать эти "что" и "почему", в голову всякий мусор лезет. Про формирование алгоритмов с помощью рекурсий я вообще молчу, хотя этот способ мне нравится много больше циклов.
Получается, либо мне вообще уходить из программирования, либо перестроить мышление с гуманитарного на алгоритмическое. Уходить не хочу, поэтому на полном серьезе прошу помочь - посоветовать литературу, доступную для нулевого уровня.

И вообще, можно ли перестроить так мышление в зрелом возрасте или это врожденная способность?


Это сообщение отредактировал(а) КунгФуЧайник - 23.11.2011, 14:18
PM MAIL   Вверх
VictorTsaregorodtsev
Дата 23.11.2011, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 274
Регистрация: 28.7.2006

Репутация: 3
Всего: 8



Вот это

Цитата(КунгФуЧайник @  23.11.2011,  14:16 Найти цитируемый пост)
формирование алгоритмов с помощью рекурсий


я не рекомендую вязать с 

Цитата(КунгФуЧайник @  23.11.2011,  14:16 Найти цитируемый пост)
с серьезным программированием (ИИ, моделирование, поиск)


ИИ, моделирование, поиск я формулирую в виде алгоритмов над векторами и матрицами (причём не над классами-векторами, как, допустим, в STL - а над обычными массивами, т.е. с минимумом ООП), или в виде алгоритмов над разреженными матрицами.
С рекурсией или ООПом вдоль и поперёк - будут тормоза уже на средних объемах данных, а гигабайты вообще будет не потянуть. На сайте в подписи - есть заметка, где я издеваюсь над тормозами чужих программ (моя прога работает в 10-100 раз быстрее пяти других прог разных авторов, хотя алгоритм мы все реализовывали один и тот же).
PM MAIL WWW   Вверх
КунгФуЧайник
Дата 23.11.2011, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 10.8.2011

Репутация: нет
Всего: нет



Цитата(VictorTsaregorodtsev @  23.11.2011,  15:08 Найти цитируемый пост)
С рекурсией или ООПом вдоль и поперёк - будут тормоза

Про ООП написал, чтобы показать, что хоть какой-то опыт в программировании есть. Алгоритм же воспринимаю как цикл с простыми переменными, без всяких объектов. Про рекурсию - жаль. 
Могу формулировать простенькие алгоритмы, но хочется решать сложные задачи, а не только формочки шлепать. Только шлепать формочки - тупиковый путь, низкий карьерный потолок.
Может есть какие-нибудь упражнения? 
Напрягаю мозг разгадыванием судоку, но это к развитию алгоритмического мышления отношения не имеет.
PM MAIL   Вверх
kemiisto
Дата 23.11.2011, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: нет
Всего: 160



Цитата(VictorTsaregorodtsev @  23.11.2011,  14:08 Найти цитируемый пост)
С рекурсией или ООПом вдоль и поперёк - будут тормоза уже на средних объемах данных

tail call elimination & link-time optimization вам в руки! smile 

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

С ООП тут ещё проще ситуация - если у вас язык подразумевает статическую компановку, а используемый компилятор не умеет оптимизацию во время компановки, то... То используйте компилятор, который умеет. smile Хотя по сути тут тоже согласен. Если надо что-то посчитать быстро - классический структурный подход с АСД/АТД никто не отменял. 

КунгФуЧайник, мышление перестроить может и нельзя, но кто сказал, что это необходимо? Посоветую для начала классику: Вирт Н., Алгоритмы и структуры данных, Дал У., Дейкстра Э., Хоор К. Структурное программирование.

Цитата(КунгФуЧайник @  23.11.2011,  13:16 Найти цитируемый пост)
Мышление, наверное, больше гуманитарное. 

А почему так считаете? Образование гуманитарное?


--------------------
PM MAIL WWW GTalk Jabber   Вверх
КунгФуЧайник
Дата 24.11.2011, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 10.8.2011

Репутация: нет
Всего: нет



kemiisto, спасибо за названия. Но Вирт, кажется, на паскале все это показывает. Может быть в паскале структуры данных другие или они в любом языке одинаковые? В пайтоне, например, который я немного изучаю, есть тип dict. Я думал его структура такая же, как в описании типа (ключ-значение), а он, оказывается, на самом деле реализован то ли хэш-структурой, то ли еще чем-то. 

Цитата(kemiisto @  23.11.2011,  16:32 Найти цитируемый пост)
А почему так считаете? Образование гуманитарное? 

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

Это сообщение отредактировал(а) КунгФуЧайник - 24.11.2011, 12:43
PM MAIL   Вверх
VictorTsaregorodtsev
Дата 24.11.2011, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 274
Регистрация: 28.7.2006

Репутация: 3
Всего: 8



kemiisto, я примером использования векторно-матричных операций просто сделал первый шаг к указанию на то, что существуют хорошо оптимизированные библиотеки (MKL, BLAS, LAPACK,...), которые эффективно доработаны и до многопоточного распараллеливания и/или распараллеливания на кластер.

Но раз ТС пишет, что ему трудно записывать/переписывать алгоритм на уровне матем.абстракций, то мой совет по либам пока неактуален.
PM MAIL WWW   Вверх
Metalex
Дата 25.11.2011, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 635
Регистрация: 22.10.2008
Где: Украина-ZPсity

Репутация: нет
Всего: нет



Жаль, не могу вспомнить книгу, но что-то из раздела "Все в примерах на С++". Приятно удивило, что там рассматривались задачки не только на стандартную рекурсию, а и простенькое консольное рисование всяких узоров с помощью рекурсии, при чем не самой легкой. Если освоите это, да еще и закрепите - с рекурсией не должно вообще возникать проблем.
Очень хорошо развивает "рекурсивное" мышление работа с деревьями.


--------------------
Don't let the system get you down.
PM WWW ICQ Skype   Вверх
VictorTsaregorodtsev
Дата 25.11.2011, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 274
Регистрация: 28.7.2006

Репутация: 3
Всего: 8



Цитата(Metalex @  25.11.2011,  13:58 Найти цитируемый пост)
Очень хорошо развивает "рекурсивное" мышление 

книга Грэхем, Кнут, Паташник "(чиста) Конкретная математика. Основание информатики" smile
PM MAIL WWW   Вверх
esperanto
Дата 26.11.2011, 00:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 194
Регистрация: 31.5.2003

Репутация: 2
Всего: 4



Цитата(VictorTsaregorodtsev @ 25.11.2011,  15:17)
Цитата(Metalex @  25.11.2011,  13:58 Найти цитируемый пост)
Очень хорошо развивает "рекурсивное" мышление 

книга Грэхем, Кнут, Паташник "(чиста) Конкретная математика. Основание информатики" smile

А вы ее прочитали и поняли всю до конца?  Или хотя бы процентов 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
PM MAIL   Вверх
_Y_
Дата 26.11.2011, 23:31 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 8
Всего: 34



Мне почему-то кажется что советы "что изучать" здесь не совсем в тему. Скорее надо "как изучать". Ведь разговор не о том "что надо знать", а о том как-бы мозги подрегулировать.

ИМХО может помочь подход от простого к сложному. Разбираетесь с алгоритмами столь простыми, что в процессе разбора заснуть не успеваете smile Ну типа алгоритма сортировки попарными перестановками, а то и что-то еще проще - по вкусу. И возитесь на этом уровне пока мозг к таким задачам не привыкнет. Когда они кажутся уже совсем простыми - движетесь к чуть-чуть более сложным. И так далее. Собственно, принцип постепенной тренировки.


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
esperanto
Дата 27.11.2011, 00:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 194
Регистрация: 31.5.2003

Репутация: 2
Всего: 4



Цитата(_Y_ @ 26.11.2011,  23:31)
Мне почему-то кажется что советы "что изучать" здесь не совсем в тему. Скорее надо "как изучать". Ведь разговор не о том "что надо знать", а о том как-бы мозги подрегулировать.

ИМХО может помочь подход от простого к сложному. Разбираетесь с алгоритмами столь простыми, что в процессе разбора заснуть не успеваете smile Ну типа алгоритма сортировки попарными перестановками, а то и что-то еще проще - по вкусу. И возитесь на этом уровне пока мозг к таким задачам не привыкнет. Когда они кажутся уже совсем простыми - движетесь к чуть-чуть более сложным. И так далее. Собственно, принцип постепенной тренировки.

Именно что вам кажется. 

Что знать как изучать, надо знать что изучать. Невозможно изучать КАК неизвестно что. И человек должен иметь представление о масштабах задаче, прежде чем каковать, как же ему изучить.

Но это мое личное мнение, основанное на 8 годах преподавания в университете и двух институтах на различных факультетах. И оно может и не верное.
--------------------
B.Sc ->M.Sc.->Microsoft SDE-> (Ph.D. student + Intel SDE + psyсhology B.A) - > Skype SDET
PM MAIL   Вверх
baldina
Дата 27.11.2011, 02:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 4
Всего: 101



Цитата(КунгФуЧайник @  23.11.2011,  14:16 Найти цитируемый пост)
связать себя с серьезным программированием (ИИ, моделирование, поиск)

серьезное программирование означает профессиональное. неважно что, важно как

Цитата(КунгФуЧайник @  24.11.2011,  12:41 Найти цитируемый пост)
 Вирт, кажется, на паскале все это показывает

какая разница? алгоритмы и структуры те же. алгоритмы часто на псевдоязыке записывают, что бы не привязываться к языку. правда, с реализацией так записанных алгоритмов у новичков могут быть проблемы. один простенький оператор yeld чего стоит)))

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

КунгФуЧайник, Вам нужно поизучать методологию разработки алгоритмов. Метода, способа разработки алгоритмов не существует. Это всегда творческий процесс, связанный с догадкой, озарением. Однако подходы есть, они довольно неплохо классифицированы и описаны.
Здесь есть некоторая аналогия с дифференцированием и интегрированием: первое можно уметь или не уметь, второе можно не уметь, уметь, а можно уметь здорово; мучаясь над очередным интегралом мы пробуем различные способы, единственного верного пути нет.
попробуйте эти книги:
С.Скиена Алгоритмы. Руководство по разработке
А.Левитин. Алгоритмы. Введение в разработку и анализ

Лучше, наверно, начать со второй, она сосредоточена на методологии.

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

Добавлено через 14 минут и 55 секунд
Цитата(КунгФуЧайник @  24.11.2011,  12:41 Найти цитируемый пост)
А вот с математикой плохо - только сейчас ее абстракцию начинаю понимать.

тогда Кнут и Грэхем, возможно для Вас. Она не настолько сложна, как Вас пугают smile

Цитата(КунгФуЧайник @  24.11.2011,  12:41 Найти цитируемый пост)
четко сформулировать их не могу

это ключевое, это причина. начните с четкой формулировки задачи. вслух (очень важно, что бы не просто промелькнула мысль, а была сформулирована конкретно, словами). если Вы что-то изучили, пробуйте это выразить своими словами, причем так, что бы они были понятны первокласснику, но при этом отражали суть.

Это сообщение отредактировал(а) baldina - 27.11.2011, 03:01
PM MAIL   Вверх
_Y_
Дата 27.11.2011, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 8
Всего: 34



Цитата(esperanto @ 27.11.2011,  00:05)
Именно что вам кажется. 

Что знать как изучать, надо знать что изучать. Невозможно изучать КАК неизвестно что. И человек должен иметь представление о масштабах задаче, прежде чем каковать, как же ему изучить

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

Автор темы знаком с тем что такое алгоритмы и зачем они ему нужны. И масштабы задачи вроде бы представляет. Вот я и предложил ему что-то, что для него должно быть достаточно просто: метод попарной перестановки, например. Можно даже "расширить" - потратить пару недель на разборку различных методов сортировки. Среди них много очень простых, кстати. Потренировать мозги (что и требуется, сколь я понимаю). ОФФ: кстати, как-то мы выяснили, что большинство выпускников факультета прикладной математики к моменту выпуска уже не помнят никаких методов сортировки, кроме попарной перестановки smile 

Цитата(esperanto @ 27.11.2011,  00:05)
Но это мое личное мнение, основанное на 8 годах преподавания в университете и двух институтах на различных факультетах. И оно может и не верное.


Письками будем меряться? smile Если да, то честно напишу
Но это мое личное мнение, основанное на 8 26 годах преподавания в университете и двух институтах трех разных стран на пяти различных факультетах. И оно может и не верное. smile 


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
КунгФуЧайник
Дата 27.11.2011, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 10.8.2011

Репутация: нет
Всего: нет



Ответ длинный. Короче не получилось, извините.
Цитата(baldina @  27.11.2011,  02:58 Найти цитируемый пост)
вопрос то не в этом, точнее не столько в этом, а в алгоритмическом мышлении, в подходе.

Именно. Не знал, что есть методология разработки алгоритмов. Спасибо за названия. 

Цитата(_Y_ @  27.11.2011,  10:53 Найти цитируемый пост)
мозг "самоотключается" на данной тематике

Да. Причина, как мне кажется после субъективной "самодиагностики", в отсутствии умения разложить задачу на четкую, "атомарную", последовательность шагов. Бывает, "определил" шаг, вроде все понятно - смотрю на этот шаг и в упор не понимаю, что это на самом деле не шаг, а еще не четкий клубок, который еще распутывать, чтобы получить последовательность (либо вообще понять, что определил неправильно). Чего-то в логике не хватает.

esperanto, тот список, что вы привели - пока только облизываюсь, ближе подступиться не получается, хотя много раз пробовал. Это уже для "второго приближения". Хотя из списка можно, наверное, уже сейчас взять на проработку пункт про логику.
Из всех советов попробую сформулировать план на "первое приближение":
1. Тренировка мозга на формулирование алгоритмов от простых к сложным.
2. Изучение литературы по методологии алгоритмов. Хоть процесс творческий, но приемы как подходить к анализу задач наверняка есть. Чтобы не было такого состояния, когда не знаешь, с какой стороны поступиться, за что взяться.
3. Тренировка логики. Посылки, выводы.
4. Какие-нибудь упражнения, чтобы научить мозг отвлекаться от конкретики. А то математика мне не дается со школы именно потому, что не понимаю, что там прячется за всякими буквами, обязательно нужны какие-нибудь конкретные примеры. 
Цель - сформировать навык анализа алгоритмических задач, и их формулирования в алгоритмы.
После этого, думаю, можно приступать к списку esperanto. Что скажете?

Цитата(esperanto @  26.11.2011,  00:27 Найти цитируемый пост)
Вы читаете на английском?

Плохо, сейчас усиленно тренирую. Нашел Alan Graham "Базовая Математика" ("Teach Yourself Basic Mathematics"). Другого Грехема тоже нашел.
PM MAIL   Вверх
_Y_
Дата 27.11.2011, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 8
Всего: 34



КунгФуЧайник, ИМХО алгоритм борьбы со своей проблемой Вы составили вполне правильно smile 


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0627 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.