Улучшите алгоритмические [закрытые] взгляды

Я настоятельно рекомендую Разработка через тестирование Kent Beck (ISBN-10: 0321146530) . Это не было записано специально для PHP, но понятия там и должны быть легко переводимы к PHP.

41
задан py_script 29 September 2009 в 21:05
поделиться

11 ответов

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

Используйте проблемные базы данных и онлайн-судей, как этот сайт, http://uva.onlinejudge.org/ index.php , в котором есть сотни проблем, касающихся общих алгоритмов. И совсем не обязательно быть опытным программистом, чтобы решить любую из них. Что вам нужно, так это хорошие способности к логике и математике. Там вы можете найти задачи от самых простых до самых сложных. Большинство из них поступают с марафонов программирования.

Затем вы можете реализовать их на C, C ++, Java или Pascal и передать их онлайн-судье. Если у вас есть хороший алгоритм, он будет принят. В противном случае судья скажет, что ваш алгоритм дал неправильный ответ на проблему, или решение заняло слишком много времени.

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

Java или Pascal и отправьте их онлайн-судье. Если у вас есть хороший алгоритм, он будет принят. В противном случае судья скажет, что ваш алгоритм дал неправильный ответ на проблему или решение потребовалось слишком долго.

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

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

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

или на решение потребовалось слишком много времени.

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

или на решение потребовалось слишком много времени.

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

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

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

26
ответ дан 27 November 2019 в 00:15
поделиться

Решайте проблемы ежедневно. Посмотрите на светофоры и спросите себя: «Как их можно синхронизировать, чтобы оптимизировать поток трафика? Или чтобы оптимизировать поток пешеходов? Какое решение лучше всего подходит для обоих?». Посмотрите на лифты и спросите себя: «Почему эти лифты должны использовать другие правила, чем лифты в том другом здании, которое я посетил вчера? Как это на самом деле реализовано? Как это можно улучшить?».

Старайтесь видеть проблему везде, даже если она уже решена. Обдумайте решение. Спросите себя, почему ваше собственное превосходное решение, вероятно, не подходит? t так хорошо, как то, что вы видите - что вам не хватает?

И так далее. Каждый день. Всегда.

Идея состоит в том, что почти все можно рассматривать как алгоритм (цель, которая имеет какое-то значение для кого-то, и метод, с помощью которого ее можно достичь). Постарайтесь помнить об этом в следующий раз, когда будете смотреть игровое шоу по телевизору или когда будете читать новости о последнем ограблении банка. Спросите себя: «Какова цель?», «Чья это цель?» и «Какой метод?».

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

и способ его достижения). Постарайтесь помнить об этом в следующий раз, когда будете смотреть игровое шоу по телевизору или когда будете читать новости о последнем ограблении банка. Спросите себя: «Какова цель?», «Чья это цель?». и «Какой метод?».

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

и способ его достижения). Постарайтесь иметь это в виду в следующий раз, когда будете смотреть игровое шоу по телевизору или когда будете читать новости о последнем ограблении банка. Спросите себя: «Какова цель?», «Чья это цель?». и «Какой метод?».

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

49
ответ дан 27 November 2019 в 00:15
поделиться

«Как это решить» Поля - отличная книга для размышлений о том, как решать математические задачи и делать доказательства, и я бы рекомендовал ее всем, кто занимается решением задач.

Но ! На самом деле это не касается волнения, которое возникает, когда реальный мир предоставляет входные данные вашей системе через шум канала, странное поведение пользователя, другие программы, захватывающие ресурсы и т. Д. Для этого стоит взглянуть на алгоритмы, которые применяются к реальным входным данным. (обязательная и заслуженная дань уважения коллекции Кнута), и системы, которые довольно устойчивы перед лицом того же (TCP, внутреннее устройство ядра). Частью разработки хороших алгоритмических решений является знание того, что уже существует.

И наряду с прочтением всего этого, конечно, практика, практика, практика .

11
ответ дан 27 November 2019 в 00:15
поделиться

Вам следует ознакомиться с Математикой и правдоподобным рассуждением Г. Поля. Это редкая книга по математике, которая действительно имеет дело с мыслительным процессом, связанным с математическими открытиями. Я думаю, что при создании алгоритмов задействован тот же мыслительный процесс.

8
ответ дан 27 November 2019 в 00:15
поделиться

Поговорка «практика приводит к совершенству» определенно применима. Я обучаю своего друга программированию и напоминаю ему, что «если вы не умеете ездить на велосипеде, вы можете прочитать каждую книгу об этом, но это не значит, что вы будете лучше, чем Лэнс Армстронг. завтра - тебе нужно попрактиковаться ».

В твоем случае, как насчет решения задач в Project Euler? http://projecteuler.net

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

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

5
ответ дан 27 November 2019 в 00:15
поделиться

Проверьте некоторых онлайн-судей , TopCoder ( учебники по алгоритму ). Возьмите книгу по алгоритмам ( CLRS , Skiena ) и сделайте более сложные упражнения. Много тренируйтесь.

5
ответ дан 27 November 2019 в 00:15
поделиться

Изучение программирования игр, вероятно, приведет вас к хорошим алгоритмам программирования игр, но не обязательно к лучшим алгоритмам в целом.

Это хорошее начало, но я думаю, что это лучший способ изучать и применять алгоритмические знания

  1. Узнайте о хороших алгоритмах, которые в настоящее время существуют для вашей области интересов
  2. Расширьте свои знания, просматривая другие области; например, какие алгоритмы требуется при работе над генетическим анализом? Как лучше всего определить потенциал стока в связи с наводнением?
  3. Прочтите о проблемах в других областях и попытайтесь использовать алгоритмы, которые вы знакомы, чтобы увидеть, подходят ли они. Если они не попытаются разобрать проблему и посмотреть, вы можете придумать свой собственный алгоритм.
3
ответ дан 27 November 2019 в 00:15
поделиться

Еще несколько книг, которые стоит прочитать (в произвольном порядке):

  • Ага! Insight (Мартин Гарднер)
  • Любая из Жемчужины программирования книг (Джон Бентли)
  • Конкретная математика (Грэм, Кнут и Паташник)
  • Математическая теория Коммуникация (Клод Шеннон)

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

2
ответ дан 27 November 2019 в 00:15
поделиться

Прочтите SICP / Структура и интерпретация компьютерных программ и решите все проблемы; затем прочтите Искусство программирования (все тома), выполняя все упражнения по ходу; затем проработайте все проблемы в Project Euler .

Если после этого вы не будете чертовски хороши в алгоритмах, то, вероятно, для вас нет никакой надежды. LOL!

PS SICP доступен бесплатно в Интернете, но вы должны купить AoCP (получите международную версию, не предназначенную для выпуска в Северной Америке, за 30 долларов США). А сам еще не делал (пытаюсь, когда есть свободное время).

1
ответ дан 27 November 2019 в 00:15
поделиться

Я могу порекомендовать книгу Нимала Ниссанке «Введение в логику и наборы для компьютерных ученых» ( Аддисон Уэсли). Основное внимание уделяется теории множеств, логике предикатов и т. Д. В основном математике решения проблем в коде, если хотите. Хороший материал, и его не сложно проработать.

Удачи ... Кевин

1
ответ дан 27 November 2019 в 00:15
поделиться

Хорошо, подведем итоги предложений:

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

0
ответ дан 27 November 2019 в 00:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: