|
|
|
|
|
|
|
Вернуться
| 1 Странник, 28 января 2020 г. 11:48:17 | |
|
Хорошо, буду пробовать.
|
|
|
| 2 Егоров Илья Валерьевич, 26 января 2020 г. 2:32:34 | |
Имеет смысл задействовать все 3. Пусть верны следующие положения (Пi): 1) Потом равносильно никогда (прокрастинация); 2) Копипаста мозгом игнорируется; 3) Интервальное повторение эффективно; _) Применимы следующие "законы памяти": ~~ 4) закон повторения: воспроизведение информации без источника, даже мысленно, информацию в памяти укрепляет [проверено]; ~~ 5) законы ретроактивного и проективного торможения: последовательно запоминание разного рода информации пагубно [проверено]; ~~ 6) закон деятельности: обработка информации ведет к запоминанию [сомнительно]. Тогда можно предложить такую схему: 1) Берется определенная задача; 2) Если нужный для решения задачи алгоритм не изучен, то: 2.1) Алгоритм изучается: информация анализируется, осмысляется и, в силу П6, обрабатывается (алгоритм реализуется); 2.2) В силу П4, производится попытка сразу же воспроизвести алгоритм мысленно без источника; 3) Если с момента изучения алгоритма прошло, в силу П3, не менее 2X + 1 дней, где X — кол-во дней между моментом изучения и последнего повторения, то: 3.1) В силу П4, алгоритм реализуется с нуля самостоятельно (без подсказок); 3.2) Иначе, в силу П2, производится копипаста: по умственной деятельности это как библиотечную функцию вызвать; 4) Если в процессе оказывается, что требуется другой алгоритм, то: 4.1) В силу П5, делается короткий перерыв (~10 минут); 4.2) GOTO (2); 5) Решение проходит все тесты; 6) [опционально] В силу П1, производится сокращение кода решения, где как раз можно ограничиться библиотечными функциями: acmp — это про "меньший код = лучший код"; 7) [опционально] В силу П1, производится улучшение решения по времени и памяти: это можно считать отдельным контестом, я так уже 2 года из-за 224 на этом пункте сижу; 8) Делается короткий перерыв, в силу П5; 9) GOTO (1);
|
|
|
| 3 Странник, 25 января 2020 г. 23:31:54 | |
Спасибо вам за развернутый ответ, но у меня еще остались вопросы. Рассмотрим конкретный пример: Допустим я сейчал взял книжку по алгоритмам, и прочитал, понял и реализовал сортировку слиянием (например на си++). Решил я после этого потренироваться на задачах с acmp. Так вот, как мне их решать?: - Для каждой задачи прописывать сортировку самостоятельно и без подсказок? (чтобы запомнить и развить скорость написания) - Использовать copy&paste своей готовой реализации? (так проще фокусироваться на самих задачах + уйдет меньше времени на решение) - #include<algorithm> sort(array, array + n); ???
|
|
|
| 4 Егоров Илья Валерьевич, 25 января 2020 г. 21:58:50 | |
|
Иначе говоря, необходимость вытекает из условий. В тривиальных случаях необходимость стремится к нулю: кодер может обходиться без хорошего знания алгоритмов, но далеко так не уедет. Владеть не необходимо — программист все равно остается программистом. С другой стороны, если подразумевается конкретная вакансия, конкретное собеседование, то может возникнуть определенная планка, которую нужно перепрыгнуть. С началом работы она может как понизиться, так и снизиться. Увы, но степень владения человек определяет сам: если тема интересна, он может не останавливаться.
|
|
|
| 5 Егоров Илья Валерьевич, 25 января 2020 г. 21:48:43 | |
|
...вательно, нет нужды останавливаться.
|
|
|
| 6 Егоров Илья Валерьевич, 25 января 2020 г. 21:48:30 | |
Лично я считаю, что оно может быть верно в тривиальных случаях, но в случае профессионального выживания заключение не является верным. Противное — непрофессионализм. Есть множество таких примеров: - Отсутствие готовых реализаций: характерно для конкретного системного программирования, при котором и libc может отсутствовать; - Неприменимость существующих: можно радоваться библиотечным функциям до тех пор, пока не придется перейти на другой уровень абстракции; - Неудовлетворенность текущей реализацией: по выделению памяти, по скорости, по любым другим параметрам; - В учебных целях: чтоб научиться чему-то, полезно это самое реализовать и т.о. понять как оно работает; - И ряд других причин написать алгоритм с нуля. С другой стороны, не менее важным аспектом является выявление алгоритма: - Во время рефакторинга какого-нибудь проекта обнаруживается, что в 4 местах используется один и тот же алгоритм, для чего как раз надо понимать, что это за алгоритм: извилины должны быть натренированы. Если он уже реализован в какой-то библиотеке, применим к текущему коду, она не будет лишней +1 зависимостью, то можно заменить на использование соответствующей библиотеки, если оно также даст положительный эффект. В противном случае можно абстрагировать алгоритм, т.е. провести дедупликацию. - Во время написания кода реализация незаметно стремится к классическому алгоритму. Этому могут быть разные причины: недоразвитая архитектура, спешка, слабое владение предметной областью. Если этого не учесть, качество кода снизится, а также однажды может наступить предыдущий пункт. Степень же владения — это удел человека. Можно вечно вести спор о том, нужны ли определенные знания программисту, но факт в том, что знания никогда не бывают лишними. "Лишними" они могут быть у тех, кто их попросту не собирается применять. Кто-то думает, что одного высшего образования достаточно? — существует Московский центр непрерывного математического образования (МЦНМО), явно показывающий, что математики много не бывает. Знания бесконечны, а, следо
|
|
|
| 7 Странник, 23 января 2020 г. 23:53:45 | |
|
Изучив несколько решений олимпиадных задач, я пришел к выводу что умение реализовать классический алгоритм (или структуру данных) с нуля не важно, гораздо важнее знать как их импортировать. Верно ли такое заключение? Будет ли оно верным для работы программистом (например, в яндексе)? Если нет, то в какой степени нужно владеть этим умением?
|
|
|
Чтобы оставить сообщение необходимо зарегистрироваться и авторизоваться!
| | | |