Открыть Электронные книги
Категории
Открыть Аудиокниги
Категории
Открыть Журналы
Категории
Открыть Документы
Категории
алгоритмизации
Лекция № 1
Литература
Литература
Литература
Зачем изучать алгоритмы
и структуры данных?
Алгоритмы лежат в основе компьютерных
наук и разработки программного обеспечения.
Реальная производительность любой
программной системы зависит только от двух
вещей:
• выбранного алгоритма
• эффективности его реализации.
Поэтому разработка хорошего алгоритма
критична для производительности всех
программных систем. Более того, изучение
алгоритмов способствует решению проблем
независимо от языка/парадигмы
программирования, аппаратного обеспечения и
других аспектов реализации
Computing Curriculum
Algorithms + Data Structures =
Programs
Алгоритмы + Структуры
данных = Программы
Никлаус Вирт — швейцарский учёный, специалист
в области информатики, один из известнейших
теоретиков в области разработки языков
программирования, профессор компьютерных наук .
Если вы считаете себя действительно хорошим
программистом..., прочитайте "Искусство
программирования" (Кнута)...
Если вы сможете прочесть весь этот труд, то вам
определенно следует отправить мне резюме.
Билл Гейтс.
И вот аспирант Джин МакКенна приходит
на собеседование со специалистом по
подбору персонала корпорации Microsoft .
Предположим, у вас есть восемь
бильярдных шаров, — начинает тот. —
Один из шаров немного тяжелее, чем
остальные, но это можно определить
только при помощи взвешивания. За какое
минимальное количество взвешиваний на
весах без гирь вы можете определить
более тяжелый шар?
Сколько взвешиваний?
В теннисном турнире сто двадцать семь
участников. В первом туре сто двадцать шесть
игроков составят шестьдесят три пары,
победители которых выйдут в следующий тур, и
еще один игрок выходит во второй тур без игры.
В следующем туре — шестьдесят четыре
игрока сыграют тридцать два матча. Сколько
всего матчей понадобится, чтобы определить
победителя?
Почему канализационный люк
имеет форму круга ?
Что такое
алгоритм?
«Алгоритм — это конечный набор правил, который определяет
последовательность операций для решения конкретного множества задач и
обладает пятью важными чертами: конечность, определённость, ввод, вывод,
эффективность». (Д. Э. Кнут)
СЛОЖНОСТЬ
Оценка сложности алгоритмов
Виды сложностей:
• Временная сложность
• Пространственная сложность
• Асимптотическая сложность
О-нотация
Определение. Говорят, что функция f(n)
является O(g(n)), если существуют
такие постоянные с0 и n0, что
f(n) < c0g(n)
для всех n > n0.
Классы оценок сложности
- множества вычислительных проблем, для
решения которых известны алгоритмы,
схожие по сложности
O(1) – постоянное время
O(log(n)) – логарифмическое время
O(n) – линейное время
O(n log(n)) – "n-log-n" время
O(n2) – квадратичное время
O(n3) – кубическое время
O(2n) – экспоненциальное время
19
Время выполнения алгоритма
для небольших n
20
Время выполнения алгоритма
для больших n
21
Пример
int max=a[0]; t1 – присваивание
for(int i=1;i<n;i++) t2 – итерация
if (max<a[i]) t3 – сравнение
max=a[i]; t4 - присваивание