Папка __pycache__
и файлы *.pyc
совершенно не нужны разработчику. Чтобы скрыть эти файлы от просмотра проводника, нам нужно отредактировать файл settings.json для VSCode. Добавьте папку и файлы, как показано ниже:
"files.exclude": {
...
...
"**/*.pyc": {"when": "$(basename).py"},
"**/__pycache__": true,
...
...
}
Алгоритмы не обязательно привязаны к конкретному языку, просто чтобы прояснить, поэтому любая книга алгоритмов будет работать отлично, если вы понимаете концепцию структуры данных / алгоритма.
Тем не менее, это кажется хорошим выбором: Алгоритмы на C . У меня есть эквивалент C ++ на моей полке.
Существует также книга, которая кажется независимой от языка (поправьте меня, если я ошибаюсь), под названием Структуры данных и алгоритмы , хотя я послушайте, что это немного устарело, так что вы пропустите более свежие структуры.
Не забывайте, что в Интернете имеется множество доступной для вас информации . Однако книги обычно лучше подходят для подобных задач. Это потому, что интернет-ресурсы имеют тенденцию сосредотачиваться на чем-то одном. Например,
Для получения разумной (хотя и далекой от совершенства) книги по реализации часто используемых алгоритмов на C, попробуйте алгоритмы Седжвика на C . Обратите внимание, что, как и по любой технической теме, бумажная книга, вероятно, намного превосходит любые веб-ресурсы.
Что касается того, как узнать, когда использовать конкретный алгоритм, я боюсь, что это зависит от опыта.
Как узнать, когда и где использовать реализация алгоритмов просто изучайте проблемы
Это называется «сопоставление с образцом», когда вы видите и решаете множество проблем, вы начинаете узнавать общие вещи и можете повторно использовать свои предыдущие знания.
Кстати, я бы порекомендовал вам перед хорошей книгой только по алгоритмам, прежде чем начинать с алгоритмов на C, которые сложнее реализовать и более подвержены ошибкам, чем на языке более высокого уровня, и как только вы будете очень уверены в общих процедурах, вы можете начать настраивать и оптимизировать их на C .
Алгоритмы на C Седжвика - отличное место для начала исследования. Когда вы узнаете, какие алгоритмы доступны и каковы рабочие характеристики каждого из них, вы сможете увидеть, где использовать каждый из них.
Это моя коллекция алгоритмов, в основном связанных с математикой:
FXT (связанных с математикой)
Список алгоритмов Википедии также очень удобен.
И, если вы хотите узнать больше - Искусство компьютерного программирования ( ссылка на википедию ).
Желательно после того, как книга Роберта Седжвика уже упоминалась в нескольких ответах.
Многие хорошие ресурсы имеют уже были названы, поэтому я не буду их здесь повторять.
Что касается того, как узнать, какой алгоритм использовать и когда?
У вас должен быть достаточно большой ящик для инструментов, который вы получите, сидя и усердно тряся через длинный список базовых (и более эзотерических) структур данных и алгоритмов. Вы должны попытаться получить все основы, но на самом деле вам нужен только образец из более специализированных.
Вам необходимо понимать, какие компромиссы доступны вам (время, сложность кода, память, одиночный или множественный проход, на месте или копирование, стабильные или нестабильные сортировки и т. Д. ad nauseum ), и как алгоритмы, которые вы изучаете, работают с каждым из них. Опять же, это просто случай длительного изучения. Big-O - это место, с которого можно начать, но это еще не конец.
Вам нужно почувствовать, чтобы понять, с какими настоящими ограничениями вы сталкиваетесь, когда сталкиваетесь с проблемой и как выразить это в терминах упомянутых выше компромиссов алгоритма. Это требует определенной степени интуиции и обычно усваивается практикой с течением времени.
По мере продвижения стоит реализовывать некоторые вещи более чем одним способом, чтобы узнать, что работает, а что нет.
Поддержка файлов .NET выполняется достаточно быстро (сравнимо с собственными функциями Win32). Несколько вариантов, которые могут помочь вам повысить производительность:
Для текста алгоритмов хорошее начало Кормена, Лейзерсона и Ривеста «Введение в алгоритмы» . Реализации псевдокода легко перевести на C. Два веб-ресурса со множеством ссылок на документацию об алгоритмах и примерах реализаций: