Основы языка Питон: функции, элементы функционального программирования, списочные выражения, генераторы. Презентация к лекции курса "Технологии и языки программирования".
Основы языка Питон: функции, элементы функционального программирования, списочные выражения, генераторы. Презентация к лекции курса "Технологии и языки программирования".
Презентация для JuJa вебинара о том, как писать рекурсивные программы с примером о вычислении факториала и чисел Фибоначчи. Также рассказывается о поиске линейном, бинарном, в глубину и в ширину, как работает поисковая система.
Презентация сделана для новичков в деле программистов.
Контроль и постановка задач мобильным инженерам, работающим у клиентов на дому, посредством мобильных приложений на устройствах инженеров и веб-сервиса у операторов.
2. Сортировка. Общие понятия
Задача сортировки получает на входе
последовательность и в
результате выдает перестановку ,
такую что
Обычно сортируются не отдельные числа, а
целые записи. При этом поле, по которому
производится сортировка, называется ключом,
а остальные поля – дополнительными.
),,,,( 321 naaaa
naaaa ′≤≤′≤′≤′ 321
),,,,( 321 naaaa ′′′′
3. Сортировка. Общие понятия
Алгоритмы сортировки, которые не требуют
выделения дополнительного массива для
промежуточного хранения данных, часто
называют алгоритмами сортировки без
дополнительной памяти.
Если предполагается, что все данные
алгоритма помещаются в оперативной памяти,
то говорят о внутренней сортировке.
4. Сортировка. Общие понятия
При оценке качества алгоритма сортировки
рассматривают две основные величины:
среднее количество сравнений и среднее
количество перестановок.
5. Для алгоритма «пузырьковой» сортировки верно, что
как в худшем, так и в лучшем случае.
Алгоритм №1.
«Пузырьковая» сортировка.
Исходный
массив
d c a b
1-ый проход a d c b
2-ой проход a b d c
3-ий проход a b c d
void Buble_Sort(n, A)
{
for(i=1; i<n; i++){
for(j = n-1; j>=i; j--){
if (A[ j-1 ] > A[ j ]) {
key = A[ j-1];
A[ j-1] = A[ j ];
A[ j ] = key; }
}
)()( 2
nOnT =
6. Алгоритм №2.
Сортировка отбором.
Для алгоритма сортировки отбором верно, что
как в худшем, так и в лучшем случае. Однако число
перестановок для данного алгоритма пропорционально n log n.
Исходный
массив
d c a b
1-ый проход a c d b
2-ой проход a b d c
3-ий проход a b c d
)()( 2
nOnT =
7. Алгоритм №2.
Сортировка отбором.
void Select_Sort(n, A) {
for(i=0; i<n; i++){
c = i; t = A[ i ]; exchange=0;
for(j = i+1; j<n; j++){
if (A[ j ]<t) {
c = j;
t = A[ j ];
exchange = 1;}
}
if (exchange==1) {
A[ c ] =A[ i ];
A[ i ] = t; } }
}
8. Алгоритм №3.
Сортировка методом Шелла.
Исходный
массив
f d a c b e
1-ый проход c b a f d e
2-ой проход a b c d e f
Результат a b c d e f
9. Алгоритм №3.
Сортировка методом Шелла.
Сортировка Шелла более эффективна, чем
ранее рассмотренные методики, поскольку
сдвигаемые элементы быстро попадают на
свои места. Среднее время работы
В худшем случае время работы .
Последовательность изменения приращений
может меняться. Хорошо зарекомендовала
себя последовательность 9, 5, 3, 2, 1.
)()( 25.1
nOnT =
)()( 5.1
nOnT =
10. Алгоритм №3.
Сортировка методом Шелла.
st = { 9,5,3,2,1 }
void Shell_Sort(n, A) {
for(k=0; k<5; k++){
gap = st[ k ];
for( i=gap; i<n; i++){
x = A[ i ];
for ( j=I - gap; x<A[ j ] && j>=0; j = j - gap)
A[ j + gap] = A[ j ];
A[ j + gap ] = x;
}
}
}
11. Выбор метода сортировки.
Необходимый метод сортировки всегда
выбирается исходя из контекста задачи.
При сортировке массивов больших размеров
лучше использовать метод Шелла или
быструю сортировку. На небольших
массивах лучшие результаты могут показать
алгоритмы сортировки вставками, выбором
и даже пузырьковая сортировка.
12. Выбор метода сортировки.
Существует ряд методов сортировки,
позволяющих сортировать массивы за меньшее
время, при условии, что заранее известна
структура сортируемых объектов.
Для сортировки последовательности чисел
используются алгоритмы сортировки
подсчетом, вычерпыванием и цифровой
сортировки, обеспечивающих среднее время:
)()( nOnT =
13. Алгоритм №4.
Сортировка подсчетом.
Алгоритм применим, если каждый элемент
сортируемой последовательности – целое
положительное число, не превосходящее
заранее известное k.
Идея алгоритма в том, чтобы для каждого
элемента X подсчитать сколько элементов
входной последовательности больше него, а
затем вставить его в нужное место выходного
массива.
14. Алгоритм №4.
Сортировка подсчетом.
void Counting_Sort(n, A, B) {
for(i=0; i<k; i++){ C[ i ] = 0; }
for(i=0; i<n; i++){ C[ A[ i ] ] = C[ A[ i ]]+1 };
for(i=1; i<k; i++){ C[ i ] = C[ i ]+C[ i-1 ] };
for(i = n; i>=0; i--) {
B [ C[ A[ i ] ] ] = A[ i ];
C [ A[ i ] ] = C[ A[ i ] ] -1;
}
}
15. Поиск.
Нахождение информации в неотсортированном
массиве требует последовательного поиска,
начиная с первого элемента и завершая его при
нахождении совпадения или достижении конца
массива. Этот процесс также называют
линейным поиском.
Усовершенствовать алгоритм поиска можно,
если входная последовательность будет
отсортирована.
17. Порядковые статистики.
Если расположить элементы входной
последовательности по возрастанию, i-ый по
счету ее элемент называется i-той
порядковой статистикой.
Минимум последовательности – 1-ая
порядковая статистика.
Максимум последовательности – n-ая
порядковая статистика.
Медиана – элемент, находящийся посредине
между максимумом и минимумом.