Алгоритмы и структуры данных #1 — Оценка сложности алгоритмов |
||
МЕНЮ Искусственный интеллект Поиск Регистрация на сайте Помощь проекту ТЕМЫ Новости ИИ Искусственный интеллект Разработка ИИГолосовой помощник Городские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Слежка за людьми Угроза ИИ ИИ теория Внедрение ИИКомпьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Распознавание лиц Распознавание образов Распознавание речи Техническое зрение Чат-боты Авторизация |
2018-10-27 14:12 Сегодня мы начнем проходить новый цикл уроков, посвященных алгоритмам и структурам данных. Это невероятно важная область IT-технологий, которая часто используется в большинстве современных программ. Алгоритмы сейчас используются практически повсеместно: начиная от небольших программ и заканчивая гигантскими проектами. Алгоритмы сортировки, шифрования, сжатия, поисковые алгоритмы, а также алгоритмы обработки больших данных, поиска кратчайшего пути и многие другие — все они знакомы едва ли не каждому программисту и играют большую роль при написании проектов. Их все мы обязательно изучим. Также мы затронем структуры данных, без знания которых невозможно эффективно обрабатывать информацию. Будет очень интересно. Немного о самом курсе уроков. Он будет достаточно нерегулярным и выходить, когда у меня будет свободное время для его написания. Скорее всего он будет выходить раз в 1-2 недели, но здесь не могу ничего обещать. Изучение алгоритмов — это побочный курс, который пойдет в дополнение к изучению основных языков программирования, поэтому приоритет будет отдаваться именно им. Также у курса не будет определенного логического конца, так как новые уроки будут выходить, пока есть интересные алгоритмы, про которые стоит рассказать. Напоследок замечу, что для понимания всего материала, нужно на базовом уровне знать хотя бы один язык программирования. То есть понимать условия, циклы и массивы (в Python списки). Поскольку параллельно с этими уроками я дописываю курс по языку Python, большинство примеров будет именно на нем. Синтаксис у него легкий и будет понятен, даже если вы изучали какой-либо другой язык программирования. С лирическим отступлением мы закончили, а теперь давайте начнем изучать алгоритмы. И начнем мы с очень важной темы — оценки сложности алгоритмов. Понятие алгоритмической сложности Начать стоит с того, что различные алгоритмы имеют разную сложность и выполняются за разное количество времени. Какие-то алгоритмы будут выполняться дольше, какие-то медленнее. Чаще всего сложность алгоритмов оценивают по двум параметрам: по затраченному времени и по использованному объему памяти. Оптимальный алгоритм должен быстро выполняться и не потреблять много памяти, но об этом мы поговорим отдельно. В основном, программисты оценивают именно затраченное время, поэтому начнем с него. Сложность алгоритма всегда зависит от объема входных данных. Довольно очевидно, что если какому-то алгоритму дать на обработку 10 значений, то он справится быстрее, чем алгоритм со 100 значениями. Однако стоит иметь в виду, что в таком случае оценка сложности получится очень приблизительной, поскольку она зависит и от других факторов: мощности процессора, объема оперативной памяти, типа данных или языка программирования. Поэтому на практике всегда вычисляют асимптотическое значение сложности, то есть когда объем входных данных стремится к бесконечности. В таком случае легко дать универсальную оценку сложности для любого алгоритма. В общем случае сложность любого алгоритма определяется количеством операций, которое необходимо совершить, чтобы обработать Основные случаи оценки сложности
Существуют и другие варианты сложности алгоритмов. Приведу для этого небольшую сравнительную таблицу, где алгоритмы будут указаны по возрастанию сложности сверху вниз. Также я нашел очень наглядный график, на котором указано, к какой сложности стоит стремиться при разработке своих проектов. И советую сохранить себе еще одну картинку, которая может пригодиться вам в будущем. Здесь приведена большая таблица основных алгоритмов и их сложности. Многие из них могут быть вам незнакомы, но эта таблица, несомненно, окажется полезной при дальнейшем изучении. И напоследок вот еще одна любопытная таблица, из которой вы сразу поймете, почему не стоит злоупотреблять сложными алгоритмами. Если попытаться обработать даже небольшое число элементов сложным алгоритмом, на это могут уйти тысячелетия. Мораль такова, что такие алгоритмы можно использовать, но лишь с небольшим количеством входных данных. Источник: https://tproger.ru Отдельно хочу рассказать про различные виды программ и получение их сложности. Если в программе встречается некоторый цикл на n элементов, то сложность будет равна O(n). Если внутри этого цикла поместить еще один цикл на n элементов, то сложности перемножатся и мы получим Напоследок стоит упомянуть про баланс между временем выполнения и потребляемой памятью. При разработке и использовании алгоритма не стоит зацикливаться только на времени. На практике часто встречается ситуация, когда быстрый алгоритм потребляет много памяти, и наоборот — медленный алгоритм потребляет совсем немного памяти. Задача программиста нередко заключается в том, чтобы выбрать или составить алгоритм таким образом, чтобы программа не тратила много времени на выполнение, но и не потребляла большое количество памяти, то есть ему нужно найти баланс. На этом сегодня все. Надеюсь, вам понравился этот урок и сама идея курса по алгоритмам и структурам данных. Начиная со следующего урока, мы уже будем изучать реальные алгоритмы и смотреть на практические примеры. И для каждого из рассматриваемых алгоритмов я буду приводить их вычислительную сложность, чтобы вы понимали, насколько он будет эффективен при разработке. Спасибо за внимание :) Источник: m.vk.com Комментарии: |
|