Pull to refresh

Comments 17

Дочка участвовала в олимпиадах по программированию, жаловалась, что пока напишешь портянку с решением на C++, люди на Python уже всё решили в несколько строчек.
P.S. Книжку заказал, спасибо.

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


1) Пожалуйста, простой найдите ответ (удобно Python)
2) Пожалуйста, реализуйте алгоритм так, чтобы он прошел тесты производительности (неудобно писать на C++, но проще уложиться в нагрузку)


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

Именно так и есть. Те, кто берут первые места на уровне страны, чаще всего быстро пишут первую (иногда вторую) задачи на Python, остальные на плюсах.

Лимиты ресурсов разные для разных языков? Ведь c++ всегда будет выиграть по памяти, да и по CPU то же.

Кстати, да, лимиты разные. Иначе глупо давать задачу на питоне, если она всё равно не укладывается в указанные лимиты.
С одной стороны согласен. С другой стороны, я уверен, что C++ полезней с точки зрения изучения алгоритмов и структур данных, чем Python. Одновременно два языка тянуть дочке тяжеловато (но, по мнению учителя, вроде справляется).

Заметил, что после решения задачи на C++, перенести решение на Python ей гораздо проще, чем с Python на C++. То есть хоть в C++ порог вхождения выше, но и понимания он даёт много больше. Стараюсь её убедить, что в перспективе упор на C++ принесёт свои плоды.

Советовал обратить ваше внимание и дочки на Rust. Возможности с++ с безопасность раст компилятора — хорошее сочетание, а разница достаточно не велика. И да, его тоже в олимпиадном используют, хотя и меньше.

Например, на крупнейшей студенческой олимпиаде — ICPC (International Collegiate Programming Contest), для северо-восточного региона, доступны следующие языки:

C++;
Java;
Python;
Kotlin.

При этом, не гарантируется, что все проблемы (problems) могут быть решены на Python.
The jury uses the following commands to run solutions: C++ = executable file


Если двоичный код проверяется в песочнице, то выбор С++ vs Rust может быть в пользу безопасного Rust. Хотя… я предлагал только обратить пристальное внимание на «плюшки», которые делают Раст компилятор уникальным, хотя и более «строгим» выдавая двоичный код под все основные платформы.
Если они должны компилировать только С++, тогда грусть.
Что касается Rust, то многое из того, что Вы написали справедливо. Сейчас, намечается интересная тенденция его развития.

В тексте прямо сказано: «доведение языка Rust до паритета с языком Си в области системного программирования».

На мой взгляд Rust обладает очень неприятной для олимпиад строгостью и ограничениями. Для промышленного применения это прекрасно, но для рамок в 30-90 минут на задачу, которая пишется один раз и мозг не теряет контекст это может быть фатальным. Тут борроу-чекер и принуждение к иммутабельности может сыграть весьма злую шутку. Посмотрите на ставший уже классикой разбор реализации связанных списков, особенно на моменты в двунаправленном связанном списке (это в конце). Хотя я не исключаю, что написав хотя бы 20-50 KLOC олимпиадных задач это всё становится достаточно незначимым (но это 50-100 не самых мелких задач, то есть порядка года интенсивной работы с учётом загрузки в учёбе).

Сейчас на олимпиадах хотя бы выбор есть. Раньше из выбора плюсы или паскаль были. Из собственного опыта, конечно.

Автор книги отмечает, что в настоящее время на соревнованиях по программированию наиболее популярны — С++, Python, Java. Он приводит статистику Google Code Jam 2017 (3000 лучших участников):

79% писали на C++;
16% — Python;
8% — Java.

По мнению автора, достоинства C++ — высокая эффективность, наличие в стандартной библиотеке большого количества «разнообразных структур данных и алгоритмов».

Итак, С++ — быстрый с большими возможностями.

Java чуть медленнее (виртуальная машина), программы длиннее.

Python медленне С++, и соответственно, Java. Сложности в задачах, в которых важно время выполнения программы. Компактные программы. Более подойдет для решения задач, в которых нет ограничения по времени.

Итак, как сказал Антти Лааксонен в книге «Олимпиадное программирование»: «Если вы еще не знаете С++, самое время начать его изучение.».

Если дочка уже умеет на С++, то она и на Python сможет без проблем после дня ознакомления с ним.

У издательства ДМК выходит очень много толковых книг, и эта одна из книг, которая должна быть в моей библиотеке

Спасибо за наводку, заказал. Не так уж много книг хороших на эту тему.

Купил книгу. Читаю — пока около 100 страниц, но впечатление уже сложилось.


Эх! Эту книгу бы мне 25 лет назад, я б за неё душу продал! Тогда, правда, С++ был… э… слегка другой, но это же мелочи :)
Что мне понравилось:


  • Акцент на типичных ошибках и пролётах в олимпиадах.
  • Акцент на типичных приёмах, экономящих силы и время на олимпиадах. Сюда же практичность приёмов: без размусоливаний всех возможностей того же vector на паре страниц всё, что про него надо знать в олимпиадных задачах.
  • Относительно доступное изложение. Ну то есть Дональда Кнута читать в разы сложнее.
  • Всё иллюстрируется кодом.

Что не понравилось:


  • Много неточных формулировок. Причём, судя по характеру неточностей — они таки пришли из оригинала. От изложения главы "3. Эффективность" и неаккуратного применения O-нотации в следующей главе меня вообще непрерывно бомбило. В той же главе ни слова про память, ни слова про системные вызовы (включая аллокацию/освобождение), а им там самое место.
  • В целом изложение доступно (я бы в старших классах осилил), но местами простую мысль закочерыжили в такие формулировки, что абзац надо по три раза перечитывать. Тут я не знаю, где источник кривизны — в оригинале или в переводе.
  • В этой книге органично бы смотрелось по 1-3 задачи в конце главы. А их нет.
  • Общее ощущение от книги, как от слайдов к крутому докладу. Ну то есть в ней процентов 10 от каждой темы. Классные 10% и самые важные, которые нужны в 80% случаев. Правда, как будто автор поставил следующий слайд и несколько минут рассказывал всё это, но ты, блин, видишь только слайд.

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


Про цены. Я не особо задумываясь купил книгу в "Лабиринте". Но там с моими большими скидками и с чёрнопятничной распродажей получилось около 1000 (а без них так вообще 1600+). А в самой книге написан адрес магазина издательства, где она по 800 рублей. Причём мне до их склада 10 минут пешком идти. Ну да ладно, не разорюсь, всё равно календарей с котом Саймона к новому году заказал :)

Sign up to leave a comment.