51
Чернякова Ганна Валентинівна

чернякова г.в

Embed Size (px)

Citation preview

Page 1: чернякова г.в

Чернякова Ганна

Валентинівна

Page 2: чернякова г.в

Дата народження: 10 грудня 1950 року. Кредо: “ Понимать , что справедливо ,чувствовать.” Освіта: вища. Дніпропетровський державний університет. 1973 рік

випуску. Спеціальність: математик,математик-обчислювач. Посада:вчитель інформатики, вища категорія, старший вчитель. Педагогічний стаж:20 років. Нагороди:знак -” Відмінник освіти України ”,ПОЧЕСНА ГРАМОТА-

управління освіти та науки Дніпропетровської міської ради 2002рік, ПОДЯКА - Самарська района у м. Дніпропетровську Рада-№61 від 26.06.2006р.,ГРАМОТА-головне управління освіти і науки Дніпропетровської обласної державної адміністрації-жовтень 2008року.

Сертифікат №38/Д4РТ . Курс-Intel навчання для майбутнбого

Кваліфікаційне посвідчення: №2502 від 21.06.2003 р.   

Page 3: чернякова г.в

Тема самоосвіти:”Розвиток та формування логічного мислення учнів, розкриття творчого потенціалу учнів.”

Використання сучасних методик та технологій навчання:метод проектів, інтерактивні методи, диференційовано-індивідуальну систему завдань, пошукові. Результативність роботи: Хащин Андрій - 2008 р. переможець в олімпіаді з програмування.

Форми узагальнення досвіду роботи:розробки практичних робіт для 10класів, розробки лекцій та практичних робіт для 11 класів

Page 4: чернякова г.в
Page 5: чернякова г.в

Классификация алгоритмов по структуре:Линейный (следование)Разветвленный (ветвление, выбор,

альтернатива)Циклический (повтор)ВспомогательныйКомбинированный

Page 6: чернякова г.в

Алгоритм – это строго определенная последовательность действий при решении задачи.

Алгоритм содержит несколько шагов.

Шаг  алгоритма – это каждое отдельное действие алгоритма.

Page 7: чернякова г.в

Исполнитель – это объект, умеющий выполнять определенный набор действий. Исполнителем может быть человек, робот, животное, компьютер.

Система команд исполнителя (СКИ) – это все команды, которые исполнитель умеет выполнять.

Среда исполнителя – обстановка, в которой функционирует исполнитель.

Page 8: чернякова г.в

Задание: Назови исполнителей следующих видов работы:

Уборка мусора во двореОбучение детей в школеВождение автомобиляОтвет у доскиПриготовление пищиПечатание документа на принтере

Page 9: чернякова г.в

АЛГОРИТМ

Результативность

Детерминированность

Дискретность

Конечность

Массовость

Свойства алгоритмаСвойства алгоритма

Дискретность Дискретность (прерывность, раздельность) – разбиение алгоритма на шаги

Результативность Результативность – получение результата за конечное количество шагов

Массовость Массовость – использование алгоритма для решения однотипных задач

Детерминированность Детерминированность (определенность, точность) – каждое действие должно строго и недвусмысленно определено

Конечность Конечность – каждое действие в отдельности и алгоритм в целом должны иметь возможность завершения

Page 10: чернякова г.в

Классификация алгоритмов по форме представления:

СловесныеТабличныеГрафические (блок-схемы)Программные

Page 11: чернякова г.в

Таблица основных условных обозначений в блок-схемах

Условное обозначение

Назначение блока

Начало или конец алгоритма

Ввод или вывод данных.

Внутри блока перечисляются данные через запятую.

Процесс.Внутри блока записываются

матем. формулы и операции для обработки данных.

Проверка условия.Внутри блока записываются

логические условия. Имеет два выхода Да(+) и Нет(-).

Направление.

Page 12: чернякова г.в

Линейный алгоритм – это алгоритм, шаги которого выполняются последовательно друг за другом. (Пример: алгоритм сбора портфеля).

Page 13: чернякова г.в

Задача

Вычислить периметр произвольного треугольника по его трем сторонам.

Решение:

1 этап: Постановка задачи.

Исходные данные: А, B, C – стороны произвольного треугольника

Выходные данные: P – периметр треугольника.

2 этап: Математическая модель.

P=A+B+С

Page 14: чернякова г.в

3 этап: Алгоритм.Начало

Ввод A, B, C

P=A+B+C

ВыводP

Конец

3 этап: Составление алгоритма

Page 15: чернякова г.в

Базовая структура линейного алгоритма:

Начало

Серия команд 1

Серия команд N

Серия команд 2

Конец

Page 16: чернякова г.в

Задание:

Нарисовать в Приложении PAINT ракету и описать алгоритм построения (словесно).

Page 17: чернякова г.в

Вспомните:Что такое алгоритм?Приведите примеры алгоритмов.Что такое исполнитель?Приведите примеры исполнителей.

Page 18: чернякова г.в

Формы записи алгоритмов

Page 19: чернякова г.в

Будем рассматривать алгоритмы, исполнителем которых является человек.

Page 20: чернякова г.в

Запись алгоритмов при решении задачи

Нумерованныйсписок

Блок -схема

Таблица

Page 21: чернякова г.в

Блок - схема

Геометрические фигуры,обозначающие шаги

алгоритма:

Page 22: чернякова г.в

Овал

Начало или конец

ИзображениеОбозначаемый шаг алгоритма

Page 23: чернякова г.в

Параллелограмм

Ввод или вывод

ИзображениеОбозначаемый шаг алгоритма

Page 24: чернякова г.в

Ромб

Принятие решения

ИзображениеОбозначаемый шаг алгоритма

Да

Нет

Page 25: чернякова г.в

Прямоугольник

Выполнение действия

ИзображениеОбозначаемый шаг алгоритма

Page 26: чернякова г.в

Стрелки

Связывают фигуры, задают порядок выполнения соответствующих шагов

Page 27: чернякова г.в

Пример алгоритма:действия человека при переходе улицы

Начало

Подойти к переходу

Дождаться зеленого света

Перейти улицу

Конец

Page 28: чернякова г.в
Page 29: чернякова г.в
Page 30: чернякова г.в

Правильный алгоритм:

1.Налить в чайник воду. 2. Зажечь спичку. 3. Открыть кран газовой горелки. 4. Поднести спичку к горелке. 5. Поставить чайник на плиту. 6. Ждать, пока вода закипит. 7. Выключить газ.

Page 31: чернякова г.в

1. Алгоритм Евклида2. Решето Эратосфена3. Длинные числа4. Целочисленная оптимизация

Page 32: чернякова г.в

Тема 1. Алгоритм Евклида

Page 33: чернякова г.в

33

Вычисление НОД

НОД = наибольший общий делитель двух натуральных чисел – это наибольшее число, на которое оба исходных числа делятся без остатка.

Перебор:k = a; // или k = b;while ( a % k != 0 || b % k != 0 ) k --;printf ("НОД(%d,%d)=%d", a, b, k);

k = a; // или k = b;while ( a % k != 0 || b % k != 0 ) k --;printf ("НОД(%d,%d)=%d", a, b, k);

много операций для больших чисел

ИЛИИЛИ

Page 34: чернякова г.в

34

Алгоритм Евклида

Евклид(365-300 до. н. э.)

НОД(a,b)= НОД(a-b, b) = НОД(a, b-a)НОД(a,b)= НОД(a-b, b) = НОД(a, b-a)

Заменяем большее из двух чисел разностью большего и меньшего до тех пор, пока они не станут равны. Это и есть НОД.

НОД (14, 21) = НОД (14, 21-14) = НОД (14, 7)

НОД (1998, 2) = НОД (1996, 2) = … = 2

Пример:

много шагов при большой разнице чисел:

= НОД (7, 7) = 7

Page 35: чернякова г.в

35

Модифицированный алгоритм Евклида

НОД(a,b)= НОД(a%b, b) = НОД(a, b%a)НОД(a,b)= НОД(a%b, b) = НОД(a, b%a)

Заменяем большее из двух чисел остатком от деления большего на меньшее до тех пор, пока меньшее не станет равно нулю. Тогда большее — это НОД.

НОД (14, 21) = НОД (14, 7) = НОД (0, 7) = 7Пример:

Еще один вариант:

НОД(2·a,2·b)= 2·НОД(a, b) НОД(2·a,b)= НОД(a, b) // при нечетном bНОД(2·a,2·b)= 2·НОД(a, b) НОД(2·a,b)= НОД(a, b) // при нечетном b

Page 36: чернякова г.в

36

Реализация алгоритма Евклида

Рекурсивный вариант: Без рекурсии:

int NOD ( int a, int b ){ if ( a == b ) return a; if ( a < b ) return NOD ( a, b-a ); else return NOD ( a-b, b );}

int NOD ( int a, int b ){ if ( a == b ) return a; if ( a < b ) return NOD ( a, b-a ); else return NOD ( a-b, b );}

int NOD ( int a, int b ){ while ( a != b ) if ( a > b ) a -= b; else b -= a;return a;}

int NOD ( int a, int b ){ while ( a != b ) if ( a > b ) a -= b; else b -= a;return a;}

int NOD ( int a, int b ){ if ( a*b == 0 ) return a + b; if ( a < b ) return NOD ( a, b%a ); else return NOD ( a%b, b );}

int NOD ( int a, int b ){ if ( a*b == 0 ) return a + b; if ( a < b ) return NOD ( a, b%a ); else return NOD ( a%b, b );}

int NOD ( int a, int b ){ while ( a*b != 0 ) if ( a > b ) a = a % b; else b = b % a; return a + b;}

int NOD ( int a, int b ){ while ( a*b != 0 ) if ( a > b ) a = a % b; else b = b % a; return a + b;}

Почему return a+b? Почему return a+b??

Page 37: чернякова г.в

Тема 2. Решето Эратосфена

Page 38: чернякова г.в

38

Поиск простых чиселПростые числа – это числа, которые делятся только на себя и на 1.Применение:

1) криптография;2) генераторы псевдослучайных чисел.

Наибольшее известное (сентябрь 2006):232582657 − 1 (содержит 9 808 358 цифр).

Задача. Найти все простые числа в интервале от 1 до заданного N.Простое решение:

for ( i = 1; i <= N; i++ ) { isPrime = 1; for ( k = 2; k < i ; k++ ) if ( i % k == 0 ) { isPrime = 0; break; } if ( isPrime ) printf("%d\n", i); }

for ( i = 1; i <= N; i++ ) { isPrime = 1; for ( k = 2; k < i ; k++ ) if ( i % k == 0 ) { isPrime = 0; break; } if ( isPrime ) printf("%d\n", i); }

k*k <= i

Как уменьшить число шагов внутреннего цикла? Как уменьшить число шагов внутреннего цикла??

Как оценить число операций? Как оценить число операций??

<=k i k*k <= i k*k <= i

O(N2) O(N2) растет не быстрее N2

Page 39: чернякова г.в

39

Решето Эратосфена

Эратосфен Киренский(Eratosthenes, Ερατοσθδνη)

(ок. 275-194 до н.э.)

Новая версия – решето Аткина .

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

Алгоритм:1) начать с k = 2;2) «выколоть» все числа через k, начиная с 2·k;3) перейти к следующему «невыколотому» k;4) если k·k <= N, то перейти к шагу 2;5) напечатать все числа, оставшиеся «невыколотыми».

высокая скорость, количество операций

нужно хранить в памяти все числа от 1 до N

O((N·log N)·log log N )O((N·log N)·log log N )

22 33

Page 40: чернякова г.в

40

Реализация

// сначала все числа не выколоты

for ( i = 1; i <= N; i ++ ) A[i] = 1;

// основной цикл

for ( k = 2; k*k <= N; k ++ ) if ( A[k] != 0 ) for ( i = k+k; i <= N; i += k ) A[i] = 0;

// выводим оставшиеся числа

for ( i = 1; i <= N; i ++ )

if ( A[i] == 1 ) printf ( "%d\n", i );

// сначала все числа не выколоты

for ( i = 1; i <= N; i ++ ) A[i] = 1;

// основной цикл

for ( k = 2; k*k <= N; k ++ ) if ( A[k] != 0 ) for ( i = k+k; i <= N; i += k ) A[i] = 0;

// выводим оставшиеся числа

for ( i = 1; i <= N; i ++ )

if ( A[i] == 1 ) printf ( "%d\n", i );

Массив A[N+1], где A[i]=1, если число i не «выколото», A[i]=0, если число i «выколото».

Page 41: чернякова г.в

Тема 3. Длинные числа

Page 42: чернякова г.в

42

Что такое длинные числа?

Задача. Вычислить (точно)100! = 1·2·3·...·99·100

Проблема: это число содержит более 100 цифр…

Решение: хранить цифры в виде массива, по группам (например, 6 цифр в ячейке).

Сколько нулей в конце этого числа? Сколько нулей в конце этого числа?? Какая последняя ненулевая цифра? Какая последняя ненулевая цифра??

Сколько ячеек нужно? Сколько ячеек нужно?? 100! < 100100

201 цифра201/6 ≈ 34 ячейки201/6 ≈ 34 ячейки

Page 43: чернякова г.в

43

Хранение длинных чисел

1234 568901 734567 = = 1234·10000002 + 568901·10000001 + 734567·10000000

Хранить число по группам из 6 цифр – это значит представить его в системе счисления с основанием d = 1000000.

{A} = 1;for ( k = 2; k <= 100; k ++ )

{ A} = {A} * k;

... // вывести { A}

{A} = 1;for ( k = 2; k <= 100; k ++ )

{ A} = {A} * k;

... // вывести { A}

Алгоритм: {A} – длинное число, хранящееся как массив{A} – длинное число, хранящееся как массив

умножение длинного числа на

«короткое»

умножение длинного числа на

«короткое»

На что это похоже? На что это похоже??

Page 44: чернякова г.в

44

Умножение длинного числа на короткое

1234 568901 734567× 3 3703 706705 203701

kk

a0a0a1a1a2a2

c0c0c1c1c2c2

734567·3 = 2 203701c0c0перенос, r1перенос, r1

568901·3 + 2 = 1 706705c1c1r2r2

1234·3 + 1 = 3703 c2c2

c0 = ( a0·k + 0) % dr1 = ( a0·k + 0) / d

c1 = ( a1·k + r1) % dr2 = ( a1·k + r1) / d

c2 = ( a2·k + r2) % dr3 = ( a2·k + r2) / d...

c0 = ( a0·k + 0) % dr1 = ( a0·k + 0) / d

c1 = ( a1·k + r1) % dr2 = ( a1·k + r1) / d

c2 = ( a2·k + r2) % dr3 = ( a2·k + r2) / d...

Page 45: чернякова г.в

45

Вычисление 100!

const long d = 1000000L; // основание системыlong A[40] = {1}, // A[0]=1, остальные A[i]=0 s, r; // произведение, остаток int i, k, len = 1; // len – длина числа

for ( k = 2; k <= 100; k ++ ) { i = 0; r = 0; while ( i < len || r > 0 ) { s = A[i]*k + r; A[i] = s % d; // остается в этом разряде r = s / d; // перенос i ++; } len = i; // новая длина числа }

const long d = 1000000L; // основание системыlong A[40] = {1}, // A[0]=1, остальные A[i]=0 s, r; // произведение, остаток int i, k, len = 1; // len – длина числа

for ( k = 2; k <= 100; k ++ ) { i = 0; r = 0; while ( i < len || r > 0 ) { s = A[i]*k + r; A[i] = s % d; // остается в этом разряде r = s / d; // перенос i ++; } len = i; // новая длина числа }

пока не кончились цифры числа {A} или

есть перенос

пока не кончились цифры числа {A} или

есть перенос

Где результат? Где результат?? Можно ли брать другое d? Можно ли брать другое d??

Page 46: чернякова г.в

46

Как вывести длинное число?«Первая мысль»:

for ( i = len-1; i >= 0; i -- ) printf ( "%ld", A[i] );for ( i = len-1; i >= 0; i -- ) printf ( "%ld", A[i] );

Что плохо? Что плохо??Проблема:

как не потерять первые нули при выводе чисел, длина которых менее 6 знаков?

Решение:1) составить свою процедуру;2) использовать формат "%.6ld"!

for ( i = len-1; i >= 0; i -- ) if ( i == len-1 ) printf ( "%ld", A[i] ); else printf ( "%.6ld", A[i] );

for ( i = len-1; i >= 0; i -- ) if ( i == len-1 ) printf ( "%ld", A[i] ); else printf ( "%.6ld", A[i] );

Page 47: чернякова г.в

47

Задания

"4": Составить программу для вычисления

99!! = 1·3·...·97·99

"5": То же самое, но написать свою процедуру для вывода (не использовать формат "%.6ld").

“6": Написать программу для умножения двух длинных чисел (ввод из файла).

“7": Написать программу для извлечения квадратного корня из длинного числа (ввод из файла).

Page 48: чернякова г.в

Тема 4. Целочисленная оптимизация

Page 49: чернякова г.в

49

Задачи целочисленной оптимизацииОптимизация:

min)( →xf при заданных ограниченияхЦелочисленная оптимизация:

x – вектор (массив) целых чисел

Комбинаторная оптимизация:

x – вектор (массив) целых чисел, причем все его элементы принадлежат заданному набору чисел

при малом количестве вариантов можно решить простым перебором

при большом количестве вариантов на решение перебором может потребоваться огромное время (для ряда задач другие алгоритмы неизвестны)

Page 50: чернякова г.в

50

Задача коммивояжераЗадача коммивояжера. Коммивояжер (бродячий торговец) должен

выйти из первого города и, посетив по разу в неизвестном порядке города 2,3,...N, вернуться обратно в первый город. В каком порядке надо обходить города, чтобы замкнутый путь (тур) коммивояжера был кратчайшим?

Это NP-полная задача, которая строго решается только перебором вариантов (пока)!

Это NP-полная задача, которая строго решается только перебором вариантов (пока)!!!Точные методы:

1) простой перебор;2) метод ветвей и границ;3) метод Литтла;4) …

Приближенные методы:1) метод случайных перестановок (Matlab);2) генетические алгоритмы;3) метод муравьиных колоний;4) …

большое время счета для больших N O(N!)O(N!)

не гарантируется оптимальное решение

Page 51: чернякова г.в

51

Метод случайных перестановокЧто представляет собой решение?

перестановка чисел 2,3,...N.комбинаторна

я задачакомбинаторна

я задача

1111 33 55 22 44 1111

Алгоритм:1) записать в массив x перестановку

2 3 … Nнайти длину маршрута 1 2 3 … N 1 и записать ее в Lmin;

2) выбрать случайно два элемента массива x и поменять их местами;

3) найти длину маршрута, соответствующего x и, если она меньше Lmin, записать ее в Lmin и запомнить перестановку;

4) если число шагов меньше заданного, перейти к шагу 2.