SlideShare une entreprise Scribd logo
1  sur  10
Основы анализа
алгоритмов
1. Неформальное введение в
анализ алгоритмов
Говоря неформально, алгоритм – это любая
корректно определенная вычислительная
процедура, на вход которой подается некоторая
величина или набор величин, и результатом
выполнения которой является выходная
величина или набор значений. Таким образом,
алгоритм представляет собой
последовательность вычислительных шагов,
преобразующих входные величины в выходные.
Алгоритм также можно рассматривать как
инструмент, предназначенный для решения
корректно поставленной вычислительной
задачи. В постановке задачи в общих чертах
задаются отношения между входом и выходом.
В алгоритме описывается конкретная
вычислительная процедура, с помощью которой
удается добиться выполнения указанных
отношений.
Говорят, что алгоритм корректен, если для каждого
ввода результатом его работы является
корректный вывод. Мы говорим, что корректный
алгоритм решает данную вычислительную
задачу. Если алгоритм некорректный, то для
некоторых вводов он может вообще не
завершить свою работу или выдать ответ,
отличный от ожидаемого. Алгоритм может быть
задан на естественном языке, в виде
компьютерной программы или даже воплощен в
аппаратном обеспечении. Единственное
требование – его спецификация должна
предоставлять точное описание вычислительной
процедуры, которую требуется выполнить.
Примеры практического применения алгоритмов
• Целью проекта по расшифровке генома человека
является идентификация всех 100000 генов,
входящих в состав ДНК человека, определение
последовательностей, образуемых 3
миллиардами базовых пар, из которых состоит
ДНК, сортировка этой информации в базах
данных и разработка инструментов для ее
анализа. Для реализации всех перечисленных
этапов нужны сложные алгоритмы. Применение
эффективных реализаций этих алгоритмов
помогает ученым достигать поставленных
целей, эффективно используя вычислительные
ресурсы. При этом экономится время (как
машинное, так и затрачиваемое сотрудниками) и
деньги, а также повышается эффективность
использования лабораторного оборудования.
• Internet позволяет пользователям в любой точке
мира быстро получать доступ к информации и
извлекать ее в больших объемах. При этом
необходимо решить такие задачи, как определение
оптимальных маршрутов, по которым
перемещаются данные, и быстрый поиск страниц, на
которых находится требуемая информация.
• Электронная коммерция позволяет заключать
сделки и предоставлять товары и услуги с помощью
электронных технических средств. Для того чтобы
она получила широкое распространение, важно
иметь возможность защищать такую информацию,
как номера кредитных карт, пароли и банковские
счета. В число базовых технологий в этой области
входят криптография с открытым ключом и
цифровые подписи, основанные на численных
алгоритмах и теории чисел.
• В производстве и коммерции очень важно
распорядиться ограниченными ресурсами так,
чтобы получить максимальную выгоду. Нефтяной
компании может понадобиться информация о том,
где пробурить скважины, чтобы получить от них как
можно более высокую прибыль. Кандидат в
президенты может задаться вопросом, как
потратить деньги, чтобы максимально повысить
свои шансы победить на выборах. Авиакомпаниям
важно знать, какую минимальную цену можно
назначить за билеты на тот или иной рейс, чтобы
уменьшить количество свободных мест и не
нарушить при этом законы, регулирующие
авиаперевозку пассажиров. Поставщик услуг Internet
должен уметь так размещать дополнительные
ресурсы, чтобы повышался уровень обслуживания
клиентов. Все эти задачи можно решить с помощью
линейного программирования.
Обычной мерой эффективности алгоритма является
скорость и время, в течение которого он выдает
результат. Однако существуют задачи, для которых
неизвестны эффективные методы их решения.
Подобные задачи известны как NP-полные. Они
представляют интерес вследствие того, что
1) несмотря на то, что до сих пор не найден эффективный
алгоритм их решения, также не доказано, что такого
алгоритма не существует,
2) набор NP-полных задач обладает замечательным
свойством: если эффективный алгоритм существует
хотя бы для одной из этих задач, то его можно
сформулировать и для всех остальных,
3) некоторые NP-полные задачи похожи (но не идентичны)
на задачи, для которых известны эффективные
алгоритмы, т.е. небольшое изменение формулировки
задачи может значительно ухудшить эффективность
самого лучшего из всех известных алгоритмов.
Алгоритмы, разработанные для решения одной и то же
задачи, часто очень сильно различаются по
эффективности. Эти различия могут быть намного
значительнее, чем те, что вызваны применением
неодинакового аппаратного и программного
обеспечения.
В качестве примера можно рассмотрим два алгоритма.
Допустим, что для выполнения первого из них требуется
время, которое оценивается как c1n2, где n – количество
входных элементов, а c1 – константа, не зависящая от n.
Таким образом, время работы этого алгоритма
приблизительно пропорционально n2. Пусть для
выполнения второго алгоритма требуется время,
приблизительно равное c2nlog2n, где c2 – некоторая другая
константа, не зависящая от n. При этом c1 < c2. Можно
убедиться, что постоянные множители намного меньше
влияют на время работы алгоритма, чем множители,
зависящие от n, которые для двух приведенных методов
последние относятся как log2n к n.
В качестве примера рассмотрим два компьютера – A и B.
Компьютер A более быстрый, и на нем работает первый
алгоритм, а компьютер B более медленный, и на нем
работает второй алгоритм. Предположим, что компьютер A
выполняет миллиард инструкций в секунду, а компьютер B
– лишь десять миллионов. Таким образом, компьютер A
работает в 100 раз быстрее, чем компьютер B. Чтобы
различие стало еще большим, предположим, что
программа, реализующая первый алгоритм (т.е. для
компьютера A) написана самым лучшим в мире
программистом с использованием команд процессора, и
для обработки n входных элемента надо выполнить 2n2
команд (т.е. c1 = 2). Второй алгоритм же (на компьютере B)
реализован программистом-середнячком с помощью языка
высокого уровня. При этом компилятор оказался не
слишком эффективным, и в результате получился код,
требующий выполнения 50nlog2n команд (т.е. c2 = 50). Для
обработки миллиона значений компьютеру A понадобится
2 × (106)2 команд / 109 команд/с = 2000 с,
а компьютеру B –
50 × 106 log2106 команд / 107 команд/с ≈ 100 с.
Возникает вопрос, действительно ли так
важны алгоритмы, работающие на
современных компьютерах, если и так
достигнуты выдающиеся успехи в других
областях высоких технологий, таких как:
• аппаратное обеспечение с высокими
тактовыми частотами, конвейерной
обработкой и суперскалярной
архитектурой;
• легкодоступные, интуитивно понятные
графические интерфейсы;
• объектно-ориентированные системы;
• локальные и глобальные сети.

Contenu connexe

En vedette

презентация лекции №13
презентация лекции №13презентация лекции №13
презентация лекции №13student_kai
 
лабораторная работа № 5
лабораторная работа № 5лабораторная работа № 5
лабораторная работа № 5student_kai
 
лабораторная работа № 7
лабораторная работа № 7лабораторная работа № 7
лабораторная работа № 7student_kai
 
физика горения02
физика горения02физика горения02
физика горения02student_kai
 
слайды к лекции №25
слайды к лекции №25слайды к лекции №25
слайды к лекции №25student_kai
 
сети эвм и средства телекоммуникаций
сети эвм и средства телекоммуникацийсети эвм и средства телекоммуникаций
сети эвм и средства телекоммуникацийstudent_kai
 
лабораторная работа № 8
лабораторная работа № 8лабораторная работа № 8
лабораторная работа № 8student_kai
 
лабораторная работа №5
лабораторная работа №5лабораторная работа №5
лабораторная работа №5student_kai
 
слайд к лекции 18
слайд к лекции 18слайд к лекции 18
слайд к лекции 18student_kai
 
курсовая работа
курсовая работакурсовая работа
курсовая работаstudent_kai
 
лекция №9
лекция №9лекция №9
лекция №9student_kai
 
презентация
презентацияпрезентация
презентацияstudent_kai
 

En vedette (20)

презентация лекции №13
презентация лекции №13презентация лекции №13
презентация лекции №13
 
лекция 2
лекция 2лекция 2
лекция 2
 
п2 03
п2 03п2 03
п2 03
 
лекция 13
лекция 13лекция 13
лекция 13
 
лабораторная работа № 5
лабораторная работа № 5лабораторная работа № 5
лабораторная работа № 5
 
лабораторная работа № 7
лабораторная работа № 7лабораторная работа № 7
лабораторная работа № 7
 
физика горения02
физика горения02физика горения02
физика горения02
 
слайды к лекции №25
слайды к лекции №25слайды к лекции №25
слайды к лекции №25
 
сети эвм и средства телекоммуникаций
сети эвм и средства телекоммуникацийсети эвм и средства телекоммуникаций
сети эвм и средства телекоммуникаций
 
лекция2
лекция2лекция2
лекция2
 
лабораторная работа № 8
лабораторная работа № 8лабораторная работа № 8
лабораторная работа № 8
 
лабораторная работа №5
лабораторная работа №5лабораторная работа №5
лабораторная работа №5
 
слайд к лекции 18
слайд к лекции 18слайд к лекции 18
слайд к лекции 18
 
Eiep mod14
Eiep mod14Eiep mod14
Eiep mod14
 
курсовая работа
курсовая работакурсовая работа
курсовая работа
 
лекция 4
лекция 4лекция 4
лекция 4
 
лекция 4
лекция 4лекция 4
лекция 4
 
лек3
лек3лек3
лек3
 
лекция №9
лекция №9лекция №9
лекция №9
 
презентация
презентацияпрезентация
презентация
 

Similaire à лекция 4

Вечный вопрос измерения времени
Вечный вопрос измерения времениВечный вопрос измерения времени
Вечный вопрос измерения времениTatyanazaxarova
 
presentation Algoritm
presentation Algoritmpresentation Algoritm
presentation Algoritmklochkova
 
20090720 hpc exercise1
20090720 hpc exercise120090720 hpc exercise1
20090720 hpc exercise1Michael Karpov
 
практика 5
практика 5практика 5
практика 5student_kai
 
01 готовимся к экзамену по информатике. теория. задачи 2002
01  готовимся к экзамену по информатике. теория. задачи 200201  готовимся к экзамену по информатике. теория. задачи 2002
01 готовимся к экзамену по информатике. теория. задачи 2002dfdkfjs
 
Алгоритмы и исполнители
Алгоритмы и исполнителиАлгоритмы и исполнители
Алгоритмы и исполнителиAndrey Dolinin
 
Алгоритмизация
АлгоритмизацияАлгоритмизация
АлгоритмизацияLebedeva_Zoya
 
алг и прогр (11кл)
алг и прогр (11кл)алг и прогр (11кл)
алг и прогр (11кл)isva69
 
алг и прогр (11кл)
алг и прогр (11кл)алг и прогр (11кл)
алг и прогр (11кл)isva69
 
Урок 26. Оптимизация 64-битных программ
Урок 26. Оптимизация 64-битных программУрок 26. Оптимизация 64-битных программ
Урок 26. Оптимизация 64-битных программTatyanazaxarova
 
чмв лекция №8
чмв   лекция №8чмв   лекция №8
чмв лекция №8student_kai
 
Лекция 6: Многопоточное программирование: часть 2 (Speedup, Amdahl's law, POS...
Лекция 6: Многопоточное программирование: часть 2 (Speedup, Amdahl's law, POS...Лекция 6: Многопоточное программирование: часть 2 (Speedup, Amdahl's law, POS...
Лекция 6: Многопоточное программирование: часть 2 (Speedup, Amdahl's law, POS...Mikhail Kurnosov
 
Каким должен быть правильный руководитель проектов в аутсорсинговом контактно...
Каким должен быть правильный руководитель проектов в аутсорсинговом контактно...Каким должен быть правильный руководитель проектов в аутсорсинговом контактно...
Каким должен быть правильный руководитель проектов в аутсорсинговом контактно...Dmitry Galkin
 
Отладка и оптимизация многопоточных OpenMP-программ
Отладка и оптимизация многопоточных OpenMP-программОтладка и оптимизация многопоточных OpenMP-программ
Отладка и оптимизация многопоточных OpenMP-программTatyanazaxarova
 
C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...
C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...
C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...corehard_by
 

Similaire à лекция 4 (20)

Вечный вопрос измерения времени
Вечный вопрос измерения времениВечный вопрос измерения времени
Вечный вопрос измерения времени
 
presentation Algoritm
presentation Algoritmpresentation Algoritm
presentation Algoritm
 
20090720 hpc exercise1
20090720 hpc exercise120090720 hpc exercise1
20090720 hpc exercise1
 
практика 5
практика 5практика 5
практика 5
 
01 готовимся к экзамену по информатике. теория. задачи 2002
01  готовимся к экзамену по информатике. теория. задачи 200201  готовимся к экзамену по информатике. теория. задачи 2002
01 готовимся к экзамену по информатике. теория. задачи 2002
 
информатика лекции 4
информатика лекции 4информатика лекции 4
информатика лекции 4
 
Алгоритмы и исполнители
Алгоритмы и исполнителиАлгоритмы и исполнители
Алгоритмы и исполнители
 
прак 15.docx
прак 15.docxпрак 15.docx
прак 15.docx
 
пр 15.docx
пр 15.docxпр 15.docx
пр 15.docx
 
Алгоритмизация
АлгоритмизацияАлгоритмизация
Алгоритмизация
 
алг и прогр (11кл)
алг и прогр (11кл)алг и прогр (11кл)
алг и прогр (11кл)
 
алг и прогр (11кл)
алг и прогр (11кл)алг и прогр (11кл)
алг и прогр (11кл)
 
11
1111
11
 
Урок 26. Оптимизация 64-битных программ
Урок 26. Оптимизация 64-битных программУрок 26. Оптимизация 64-битных программ
Урок 26. Оптимизация 64-битных программ
 
чмв лекция №8
чмв   лекция №8чмв   лекция №8
чмв лекция №8
 
Лекция 6: Многопоточное программирование: часть 2 (Speedup, Amdahl's law, POS...
Лекция 6: Многопоточное программирование: часть 2 (Speedup, Amdahl's law, POS...Лекция 6: Многопоточное программирование: часть 2 (Speedup, Amdahl's law, POS...
Лекция 6: Многопоточное программирование: часть 2 (Speedup, Amdahl's law, POS...
 
Каким должен быть правильный руководитель проектов в аутсорсинговом контактно...
Каким должен быть правильный руководитель проектов в аутсорсинговом контактно...Каким должен быть правильный руководитель проектов в аутсорсинговом контактно...
Каким должен быть правильный руководитель проектов в аутсорсинговом контактно...
 
Отладка и оптимизация многопоточных OpenMP-программ
Отладка и оптимизация многопоточных OpenMP-программОтладка и оптимизация многопоточных OpenMP-программ
Отладка и оптимизация многопоточных OpenMP-программ
 
C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...
C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...
C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...
 
презентация1
презентация1презентация1
презентация1
 

Plus de student_kai

презентация
презентацияпрезентация
презентацияstudent_kai
 
презентации продолжение банкета
презентации продолжение банкетапрезентации продолжение банкета
презентации продолжение банкетаstudent_kai
 
основы программирования на языке C
основы программирования на языке Cосновы программирования на языке C
основы программирования на языке Cstudent_kai
 
презентация курсовой работы
презентация курсовой работыпрезентация курсовой работы
презентация курсовой работыstudent_kai
 
лекция№34
лекция№34лекция№34
лекция№34student_kai
 
лекция№32
лекция№32лекция№32
лекция№32student_kai
 
лекция№33
лекция№33лекция№33
лекция№33student_kai
 
лекция№31
лекция№31лекция№31
лекция№31student_kai
 
лекция№30
лекция№30лекция№30
лекция№30student_kai
 
лекция№29
лекция№29лекция№29
лекция№29student_kai
 
лекция№28
лекция№28лекция№28
лекция№28student_kai
 
лекция№27
лекция№27лекция№27
лекция№27student_kai
 
лекция№26
лекция№26лекция№26
лекция№26student_kai
 
лекция№25
лекция№25лекция№25
лекция№25student_kai
 
лекция№25
лекция№25лекция№25
лекция№25student_kai
 
лекция№24
лекция№24лекция№24
лекция№24student_kai
 
лекция№23
лекция№23лекция№23
лекция№23student_kai
 
лекция№22
лекция№22лекция№22
лекция№22student_kai
 
лекция№21
лекция№21лекция№21
лекция№21student_kai
 
лекция№20
лекция№20лекция№20
лекция№20student_kai
 

Plus de student_kai (20)

презентация
презентацияпрезентация
презентация
 
презентации продолжение банкета
презентации продолжение банкетапрезентации продолжение банкета
презентации продолжение банкета
 
основы программирования на языке C
основы программирования на языке Cосновы программирования на языке C
основы программирования на языке C
 
презентация курсовой работы
презентация курсовой работыпрезентация курсовой работы
презентация курсовой работы
 
лекция№34
лекция№34лекция№34
лекция№34
 
лекция№32
лекция№32лекция№32
лекция№32
 
лекция№33
лекция№33лекция№33
лекция№33
 
лекция№31
лекция№31лекция№31
лекция№31
 
лекция№30
лекция№30лекция№30
лекция№30
 
лекция№29
лекция№29лекция№29
лекция№29
 
лекция№28
лекция№28лекция№28
лекция№28
 
лекция№27
лекция№27лекция№27
лекция№27
 
лекция№26
лекция№26лекция№26
лекция№26
 
лекция№25
лекция№25лекция№25
лекция№25
 
лекция№25
лекция№25лекция№25
лекция№25
 
лекция№24
лекция№24лекция№24
лекция№24
 
лекция№23
лекция№23лекция№23
лекция№23
 
лекция№22
лекция№22лекция№22
лекция№22
 
лекция№21
лекция№21лекция№21
лекция№21
 
лекция№20
лекция№20лекция№20
лекция№20
 

лекция 4

  • 1. Основы анализа алгоритмов 1. Неформальное введение в анализ алгоритмов
  • 2. Говоря неформально, алгоритм – это любая корректно определенная вычислительная процедура, на вход которой подается некоторая величина или набор величин, и результатом выполнения которой является выходная величина или набор значений. Таким образом, алгоритм представляет собой последовательность вычислительных шагов, преобразующих входные величины в выходные. Алгоритм также можно рассматривать как инструмент, предназначенный для решения корректно поставленной вычислительной задачи. В постановке задачи в общих чертах задаются отношения между входом и выходом. В алгоритме описывается конкретная вычислительная процедура, с помощью которой удается добиться выполнения указанных отношений.
  • 3. Говорят, что алгоритм корректен, если для каждого ввода результатом его работы является корректный вывод. Мы говорим, что корректный алгоритм решает данную вычислительную задачу. Если алгоритм некорректный, то для некоторых вводов он может вообще не завершить свою работу или выдать ответ, отличный от ожидаемого. Алгоритм может быть задан на естественном языке, в виде компьютерной программы или даже воплощен в аппаратном обеспечении. Единственное требование – его спецификация должна предоставлять точное описание вычислительной процедуры, которую требуется выполнить.
  • 4. Примеры практического применения алгоритмов • Целью проекта по расшифровке генома человека является идентификация всех 100000 генов, входящих в состав ДНК человека, определение последовательностей, образуемых 3 миллиардами базовых пар, из которых состоит ДНК, сортировка этой информации в базах данных и разработка инструментов для ее анализа. Для реализации всех перечисленных этапов нужны сложные алгоритмы. Применение эффективных реализаций этих алгоритмов помогает ученым достигать поставленных целей, эффективно используя вычислительные ресурсы. При этом экономится время (как машинное, так и затрачиваемое сотрудниками) и деньги, а также повышается эффективность использования лабораторного оборудования.
  • 5. • Internet позволяет пользователям в любой точке мира быстро получать доступ к информации и извлекать ее в больших объемах. При этом необходимо решить такие задачи, как определение оптимальных маршрутов, по которым перемещаются данные, и быстрый поиск страниц, на которых находится требуемая информация. • Электронная коммерция позволяет заключать сделки и предоставлять товары и услуги с помощью электронных технических средств. Для того чтобы она получила широкое распространение, важно иметь возможность защищать такую информацию, как номера кредитных карт, пароли и банковские счета. В число базовых технологий в этой области входят криптография с открытым ключом и цифровые подписи, основанные на численных алгоритмах и теории чисел.
  • 6. • В производстве и коммерции очень важно распорядиться ограниченными ресурсами так, чтобы получить максимальную выгоду. Нефтяной компании может понадобиться информация о том, где пробурить скважины, чтобы получить от них как можно более высокую прибыль. Кандидат в президенты может задаться вопросом, как потратить деньги, чтобы максимально повысить свои шансы победить на выборах. Авиакомпаниям важно знать, какую минимальную цену можно назначить за билеты на тот или иной рейс, чтобы уменьшить количество свободных мест и не нарушить при этом законы, регулирующие авиаперевозку пассажиров. Поставщик услуг Internet должен уметь так размещать дополнительные ресурсы, чтобы повышался уровень обслуживания клиентов. Все эти задачи можно решить с помощью линейного программирования.
  • 7. Обычной мерой эффективности алгоритма является скорость и время, в течение которого он выдает результат. Однако существуют задачи, для которых неизвестны эффективные методы их решения. Подобные задачи известны как NP-полные. Они представляют интерес вследствие того, что 1) несмотря на то, что до сих пор не найден эффективный алгоритм их решения, также не доказано, что такого алгоритма не существует, 2) набор NP-полных задач обладает замечательным свойством: если эффективный алгоритм существует хотя бы для одной из этих задач, то его можно сформулировать и для всех остальных, 3) некоторые NP-полные задачи похожи (но не идентичны) на задачи, для которых известны эффективные алгоритмы, т.е. небольшое изменение формулировки задачи может значительно ухудшить эффективность самого лучшего из всех известных алгоритмов.
  • 8. Алгоритмы, разработанные для решения одной и то же задачи, часто очень сильно различаются по эффективности. Эти различия могут быть намного значительнее, чем те, что вызваны применением неодинакового аппаратного и программного обеспечения. В качестве примера можно рассмотрим два алгоритма. Допустим, что для выполнения первого из них требуется время, которое оценивается как c1n2, где n – количество входных элементов, а c1 – константа, не зависящая от n. Таким образом, время работы этого алгоритма приблизительно пропорционально n2. Пусть для выполнения второго алгоритма требуется время, приблизительно равное c2nlog2n, где c2 – некоторая другая константа, не зависящая от n. При этом c1 < c2. Можно убедиться, что постоянные множители намного меньше влияют на время работы алгоритма, чем множители, зависящие от n, которые для двух приведенных методов последние относятся как log2n к n.
  • 9. В качестве примера рассмотрим два компьютера – A и B. Компьютер A более быстрый, и на нем работает первый алгоритм, а компьютер B более медленный, и на нем работает второй алгоритм. Предположим, что компьютер A выполняет миллиард инструкций в секунду, а компьютер B – лишь десять миллионов. Таким образом, компьютер A работает в 100 раз быстрее, чем компьютер B. Чтобы различие стало еще большим, предположим, что программа, реализующая первый алгоритм (т.е. для компьютера A) написана самым лучшим в мире программистом с использованием команд процессора, и для обработки n входных элемента надо выполнить 2n2 команд (т.е. c1 = 2). Второй алгоритм же (на компьютере B) реализован программистом-середнячком с помощью языка высокого уровня. При этом компилятор оказался не слишком эффективным, и в результате получился код, требующий выполнения 50nlog2n команд (т.е. c2 = 50). Для обработки миллиона значений компьютеру A понадобится 2 × (106)2 команд / 109 команд/с = 2000 с, а компьютеру B – 50 × 106 log2106 команд / 107 команд/с ≈ 100 с.
  • 10. Возникает вопрос, действительно ли так важны алгоритмы, работающие на современных компьютерах, если и так достигнуты выдающиеся успехи в других областях высоких технологий, таких как: • аппаратное обеспечение с высокими тактовыми частотами, конвейерной обработкой и суперскалярной архитектурой; • легкодоступные, интуитивно понятные графические интерфейсы; • объектно-ориентированные системы; • локальные и глобальные сети.