Содержание
- 2. 09.11.2021 Литература: Глушков В.Л. Основы безбумажной информатики. М.: Наука, 1987. Бауэр Ф. Л., Гооз Г. Информатика
- 3. 09.11.2021 Обмен информацией — процесс передачи информации одним объектом (субъектом) и ее прием другим объектом (субъектом).
- 4. 09.11.2021 Тема 2. Основные этапы развития информационных технологий Начальное состояние — информация хранится и обрабатывается в
- 5. 09.11.2021 Изобретение книгопечатания — способа тиражирования информации (середина XV века). Печатный станок Гуттенберга
- 6. 09.11.2021 Развитие средств механизации и автоматизации обработки информации (с начала XVI века). Арифмометр Лейбница 1500 г.,
- 7. 09.11.2021 Развитие средств механизации и автоматизации обработки информации (с начала XVI века). Арифмометр В.Т. Однера XIX
- 8. 09.11.2021 Развитие средств механизации и автоматизации обработки информации (с начала XVI века). 1801–1808г.г., Жозеф Жаккард, автоматический
- 9. 09.11.2021 Перфокарта и перфолента середины XX века, прототипы использовались с начала XIX века Развитие средств механизации
- 10. 09.11.2021 Электромеханические машины (конец XIX века). 1939–1941 г.г., Конрад Цузе, Германия, машина «Z-3», память — 64
- 11. 09.11.2021 Электронные вычислительные машины (ЭВМ) или компьютеры, середина XX века 1937–1942 г.г., Дж. Атанасов и К.
- 12. 09.11.2021 Электронные вычислительные машины (ЭВМ) или компьютеры, середина XX века 1943–1945 г.г. Пенсильванский университет, США, Д.
- 13. 09.11.2021 Электронные вычислительные машины (ЭВМ) или компьютеры, середина XX века 1944–1945 г.г. Джон фон Нейман, принципы
- 14. 09.11.2021 1969 г. , первые элементы будущей глобальной сети Internet. 1974 г., первый персональный компьютер Altair
- 15. 09.11.2021 Важнейшей характеристикой компьютера является его быстродействие (скорость вычислений, производительность, мощность), которое в простейшем случае определяется
- 16. 09.11.2021 Информатика представляет собой фундаментальную естественную науку о структуре и общих свойствах информации, а также об
- 17. 09.11.2021 Основными научными дисциплинами, относящимися к теоретической информатике, являются: дискретная математика, дающая математическую основу различным дисциплинам
- 18. 09.11.2021 теория систем, занимающаяся изучением общих свойств, видов и типов систем; а также основных принципов и
- 19. 09.11.2021 системное программное обеспечение; прикладное программное обеспечение; базы данных и системы управления базами данных; базы знаний;
- 20. 09.11.2021 Тема 3. Информация и сообщения Информация (от лат. informatio разъяснение, изложение, осведомленность) — первоначальное значение:
- 21. 09.11.2021 Существует большое количество других трактовок информации. Однако большинство учёных и специалистов в настоящее время придерживаются
- 22. 09.11.2021 Самым характерным свойством информации, существенно отличающим это понятие от таких базовых понятий как вещество и
- 23. 09.11.2021 Источник и получатель информации могут быть разделены как в пространстве, так и во времени. Рассматривать
- 24. 09.11.2021 Информация попадает к её получателю в результате контакта материального носителя информации с материальными органами чувств
- 25. 09.11.2021 Понимание подразумевает умение выявить смысл сообщения, которым представлена информация, и установить степень её соответствия реальному
- 26. 09.11.2021 Таким образом, можно заметить, что вся сложность в использовании понятия «информация» является следствием того, что
- 27. 09.11.2021 Знания, а также отдельные систематизированные и не систематизированные факты, сведения, данные, всегда передаются с помощью
- 28. 09.11.2021 В связи с введением понятия сообщения следует ещё раз отметить принципиальный момент. Одушевлённый субъект —
- 29. 09.11.2021 В связи с уточнением терминологии в рамках предмета информатики и разграничением понятий «информация» и «сообщение»,
- 30. 09.11.2021 Содержание сообщения, его смысл и значение существенно зависит от получателя, от того насколько он сумел
- 31. 09.11.2021 Особенно важна эта возможность для организации обработки произвольных сообщений с помощью компьютера: все сообщения, вне
- 32. 09.11.2021 Решающим фактором для обеспечения возможности извлечения информации из сообщения является знание языка, на котором сформулировано
- 33. 09.11.2021 Математическая запись правил интерпретации сообщения: где: s — конкретное сообщение, i — полученная информация, использованное
- 34. 09.11.2021 Объективность — свойство информации, определяющее степень её зависимости от человека, объективность информации тем больше, чем
- 35. 09.11.2021 Актуальность — это способность информации соответствовать нуждам её получателя в некоторый момент времени. В частности,
- 36. 09.11.2021 , Сбором сообщений (более привычная, но не совсем точная форма речи — сбор информации) называется
- 37. 09.11.2021 Хранение сообщений связано с фиксацией некоторого состояния носителя, а передача связана с изменением состояния носителя.
- 38. 09.11.2021 Важно понимать, что передача сообщения всегда занимает некоторое время, происходит во времени, то есть представляет
- 39. 09.11.2021 Под состоянием объекта или явления понимается набор стабильных значений группы параметров, которые адекватно описывают рассматриваемый
- 40. 09.11.2021 Все процессы делятся на две группы — стационарные и нестационарные Стационарными называются объекты, явления, процессы
- 41. 09.11.2021 Все возможные состояния дискретного процесса всегда могут быть перенумерованы целыми числами, то есть их общее
- 42. 09.11.2021
- 43. 09.11.2021 Между любыми двумя соседними состояниями дискретного процесса всегда имеется ненулевой отрезок времени. Если все такие
- 44. 09.11.2021 Параметр сигнала, служащий для передачи сообщения, по определению представляет собой зависящую от времени величину, является
- 45. 09.11.2021 Итак, понятия непрерывности и дискретности относятся как к области определения — отрезку времени, в течение
- 46. 09.11.2021 Непрерывные и дискретные сигналы
- 47. 09.11.2021 Следует отметить, что в связи с особенностями органов чувств человека некоторые непрерывные сообщения воспринимаются человеком
- 48. 09.11.2021 Преобразование сообщений Преобразования вида N1→N2 используются в самых разных технических устройствах, таких как, например, микрофон,
- 49. 09.11.2021 Получение по непрерывному сообщению соответствующего ему дискретного называется дискретизацией, а получение по дискретному сообщению соответствующего
- 50. 09.11.2021 Квантованный по уровню и развернутый по времени ─ дискретный сигнал Вообще говоря, дискретизация приводит к
- 51. 09.11.2021 В математическом анализе в теории рядов Фурье доказывается, что удовлетворяющая некоторым требованиям периодическая непрерывная функция
- 52. 09.11.2021 Теорема отсчетов В.А. Котельникова (1933 год). Непрерывный сигнал можно полностью отобразить и точно воссоздать (восстановить)
- 53. 09.11.2021 При дискретизации аналогового сигнала выбранное количество отсчётов на одну секунду длительности сигнала называется частотой дискретизации.
- 54. 09.11.2021 С точки зрения информатики принципиальная разница между непрерывными и дискретными сигналами состоит в том, что
- 55. 09.11.2021 Если сообщение имеет форму письма, то знаками являются графемы, в случае устной речи в качестве
- 56. 09.11.2021 Поэтому для практического использования выбираются наборы, состоящие из относительно небольшого количества знаков, а уровни сигнала
- 57. 09.11.2021 Множество знаков, в котором определен линейный порядок называется алфавитом. . Примеры двоичных алфавитов: {0,1} ({O,
- 58. 09.11.2021 Пусть A={α1, α2,…αN}— используемый алфавит, αi∈A, i=1,2,…,N — его знаки,N — количество знаков в алфавите.
- 59. 09.11.2021 Любое дискретное сообщение можно представить в виде последовательности знаков из некоторого фиксированного алфавита. Произвольная последователь-
- 60. 09.11.2021 Правило, описывающее соответствие между знаками первичного алфавита и знаками или сочетаниями вторичного называется кодом. Кодирование
- 61. 09.11.2021 Пример таблицы кодирования: Последовательность знаков вторичного алфавита A2, которыми представлен один знак первичного алфавита A1
- 62. 09.11.2021 Кодированием называется последовательность действий по переводу сообщения из первичного во вторичный алфавита. Существует огромное количество
- 63. 09.11.2021 Задачи эффективного и оптимального кодирования часто решаются с помощью сжатия сообщений. Различают два вида сжатия
- 64. 09.11.2021 При хранении в компьютере любой текст (компьютерная программа, документ, статья) рассматривается как обычная последовательность знаков.
- 65. 09.11.2021 Передача кодов сообщения в канал всегда происходит во времени. При этом на передачу каждого знака
- 66. 09.11.2021 длительность (одинаковая или разная) элементарных сигналов, которые соответствуют знакам 0 и 1; длина кода (одинаковая
- 67. 09.11.2021 Пример: Азбука Морзе – статистический, алфавитный, неравномерный код с неравными длительностями знаков. В 1838 году
- 68. 09.11.2021 Азбука Морзе для русского алфавита
- 69. 09.11.2021 За единицу длительности импульса в системе С. Морзе принимается длительность передачи точки t. Длительность передачи
- 70. 09.11.2021 Записать алфавит азбуки Морзе. Алфавит азбуки Морзе фактически состоит не из двух, а из трёх
- 71. 09.11.2021 Равномерное алфавитное кодирование Развитие средств связи и компьютерной обработки данных привело к широкому распространению алфавитных
- 72. 09.11.2021 Этот код стал основой для международного телеграфного кода Бодо. Исторически первым кодом этой группы считается
- 73. 09.11.2021 Международный компьютерный код ASCII Кроме кода Бодо и других кодов, построенных на его основе, в
- 74. 09.11.2021 В основе выбора системы равномерного кодирования для представления текстов в компьютерах лежали следующие соображения. Группа
- 75. 09.11.2021 В современном международном стандарте кодовой таблицы ASCII зафиксированы коды только для 128 различных знаков. Их
- 76. 09.11.2021 Фрагмент ГОСТ альтернативной кодовой таблицы ASCII. 1 знак → 8 бит, 28=256 знаков 1000 10102
- 77. 09.11.2021 При кодировании текста каждому его знаку ставится в соответствие выбранный из кодовой таблицы конкретный восьмиразрядный
- 78. 09.11.2021 При хранении данных в памяти компьютера код одного знака занимает один байт памяти, и для
- 79. 09.11.2021 Объемные единицы измерения количества информации (система СИ)
- 80. 09.11.2021 Текстовый формат определяет одну или несколько кодовых таблиц, которые используются для кодирования символов текста, а
- 81. 09.11.2021 Тема 5. Кодирование числовых данных Несмотря на то, что, запись любого числа может рассматриваться как
- 82. 09.11.2021 Системы счисления Система счисления представляет собой совокупность правил записи и наименования чисел, а также получения
- 83. 09.11.2021 Количество знаков в алфавите системы счисления обычно отражается в ее названии: двоичная, троичная, восьмеричная, десятичная,
- 84. 09.11.2021 Пусть — алфавит некоторой позиционной системы счисления Закон разложения по степеням основания системы счисления. При
- 85. 09.11.2021 , Целое число p, входящее в выражение, служащее для определения значения числа, называется основанием системы
- 86. 09.11.2021 Общий принцип изображения целых чисел в позиционных системах счисления Процесс нумерации, то есть обозначения чисел
- 87. 09.11.2021 Двоичная система счисления Запись целого неотрицательного десятичного числа в двоичной системе счисления называется прямым двоичным
- 88. 09.11.2021 Шестнадцатеричная система счисления
- 89. 09.11.2021 Шестнадцатеричная система счисления
- 90. 09.11.2021 Переходы между системами счисления Перевод целых чисел из десятичной системы в систему с основанием P
- 91. 09.11.2021 Перевод правильных дробей из десятичной системы в систему с основанием P. Последовательно умножать вначале заданную
- 92. 09.11.2021 В теории погрешностей вычислений устанавливается, что погрешность вещественных чисел, полученных в результате округления, не превосходит
- 93. 09.11.2021 Перевод смешанных чисел из десятичной системы в систему с основанием P. Пример: 2005,62510 → 111
- 94. 09.11.2021 Переходы между двоичной и шестнадцатеричной системами счисления p1=2, p2=16, p2=p14 Каждую цифру алфавита шестнадцатеричной системы
- 95. 09.11.2021 Переход из двоичной системы счисления в шестнадцатеричную Разбить число на тетрады. Разбиение производится от запятой
- 96. 09.11.2021 Переход из шестнадцатеричной системы счисления в двоичную Чтобы перевести шестнадцатеричное число в двоичную систему счисления
- 97. 09.11.2021 Действия в двоичной и шестнадцатеричной системах счисления Таблица сложения двоичной системы счисления 0+0=0 1+0=1 0+1=1
- 98. 09.11.2021 Таблица вычитания двоичной системы счисления 0 – 0 = 0 1 – 0 = 1
- 99. 09.11.2021 Таблица умножения двоичной системы счисления 0×0=0 1×0=0 0×1=0 1×1=1 Умножение многоразрядных двоичных чисел производится по
- 100. 09.11.2021 Фрагмент таблицы сложения шестнадцатеричной системы счисления
- 101. 09.11.2021 Сложение двух многозначных шестнадцатеричных чисел Складываемые шестнадцатеричные цифры заменяются десятичными эквивалентами. Выполняется сложение в десятичной
- 102. 09.11.2021 Сумма цифр оценивается по отношению к шестнадцатеричному десятку. Если она меньше, чем 16, то выполняется
- 103. 09.11.2021 Вычитание двух многозначных шестнадцатеричных чисел Участвующие в вычитании цифры текущего разряда заменяются их десятичными эквивалентами.
- 104. 09.11.2021 Форматы кодирования числовых данных Вспомним, что исчерпывающе полный набор правил кодирования той или иной разновидности
- 105. 09.11.2021 Формат с фиксированной точкой предназначен для представления целых чисел. Целые числа в этом формате представлены
- 106. 09.11.2021 Примеры: 7710 перевести заданное целое положительное число в двоичную систему счисления; выбрать поле, длина которого
- 107. 09.11.2021 Знаковое представление формата с фиксированной точкой. Один бит поля выделяется под код знака: 0 ─
- 108. 09.11.2021 1. Неоднозначное представление нуля: +0 → 0|000 00002; - 0 → 1|000 0002; 2. Специальная
- 109. 09.11.2021 Дополнительный код целых чисел Код должен подчиняться правилам выполнения сложения и вычитания в двоичной системе:
- 110. 09.11.2021 Пусть M =2n, где n — разрядность поля, используемого для записи кода. С формальных позиций
- 111. 09.11.2021 Диапазон представления чисел при использовании дополнительного кода: от - 2N-1 до 2N-1-1 Примеры: +7710 →
- 112. 09.11.2021 Правило размножения знака при переходе к более длинным полям Число: +7710 Поле 1 байт: 0|100
- 113. 09.11.2021 005A16 FFE816 По знаковому биту определить знак числа. Для отрицательных чисел в 2-ой системе счисления
- 114. 09.11.2021 Нормализованные числа. Числа, записанные в форме ± m × q ±p, где 1 ≤ m
- 115. 09.11.2021 Формат с плавающей точкой используется для кодирования нецелых чисел, обычно возникающих в результате выполнения всевозможных
- 116. 09.11.2021 Диапазон представления чисел с плавающей точкой 1,0×10-9 ≤ |X| ≤ 9,9999×10+9 и 0 0 0
- 117. 09.11.2021 Влияние распределения ролей в разрядной сетке на диапазон Минимальное по модулю число: Максимальное по модулю
- 118. 09.11.2021 Денормализация и нормализация при выполнении арифметических операций над данными в формате с плавающей точкой. 1,6×10-4
- 119. 09.11.2021 Двоичные коды чисел в формате с плавающей точкой могут занимать поля длиной 4, 6, 8
- 120. 09.11.2021 Поля длиной 4 байта ─ короткие вещественные (одинарная точность) Код знака числа S ─ 1
- 121. 09.11.2021 Порядок получения кода числа в формате с плавающей точкой Перевести модуль числа из десятичной системы
- 122. 09.11.2021 Порядок получения числа по его коду в формате с плавающей точкой Получить запись числа в
- 123. 09.11.2021 Поля длиной 6 байтов ─ вещественные (обычная точность) Код знака числа S ─ 1 бит
- 124. 09.11.2021 Поля длиной 10 байтов ─ расширенные вещественные Код знака числа S ─ 1 бит (79
- 125. 09.11.2021 Двоично-десятичный формат (BCD – формат ─ binary coded decimal ) Неупакованный BCD формат. Упакованный BCD
- 126. 09.11.2021 Один и то же код может восприниматься и как код цепочки символов и как код
- 127. 09.11.2021 Необходимость в кодировании графических данных возникла в связи с появлением в шестидесятых годах XX века
- 128. 09.11.2021 Изображение на экране → Фактическая структура изображения: строка → Всю совокупность элементарных единиц изображения называют
- 129. 09.11.2021 Степень четкости изображения зависит от количества строк на весь экран и количества пикселей в строке,
- 130. 09.11.2021 Кодирование черно-белых изображений Пример кодирования одной строки изображения. На строчку, состоящую из 800 пикселей (точек),
- 131. 09.11.2021 Кодирование цветных изображений. Метод RGB Для формирования цветных изображений используются несколько различных способов, которые принято
- 132. 09.11.2021 Цветовая система представляет собой способ представления цвета в виде набора чисел (цветового вектора) из трёх
- 133. 09.11.2021 2. Полноцветный режим (режим True Color ─ истинный цвет). Для кодирования каждого из основных цветов
- 134. 09.11.2021 3. Режим High Color (high color — богатый цвет). Для кодирования цвета одного пикселя используется
- 135. 09.11.2021 Другие методы и графические форматы Метод CMYK (от Cyan — голубой, Magenta — пурпурный, Yellow
- 136. 09.11.2021 Формат jpeg (Joint Photographic Experts Group — объединенная группа экспертов по фотографии) использует методы сжатия,
- 137. 09.11.2021 Растровая графика дает высококачественные изображения, но имеет существенный недостаток ─ плохо переносит масштабирование, то есть
- 138. 09.11.2021 Другие виды компьютерной графики Векторная графика. Базовым объектом является не точка, а линия. При этом
- 139. 09.11.2021 Формат wmf ─ Windows Meta File ─ формат метафайлов операционной системы Windows. Используется для хранения
- 140. 09.11.2021 Кодирование звуковых и видео данных Развитие способов кодирования звуковых данных, а также движущихся изображений анимации
- 141. 09.11.2021 Более точно: замена непрерывного звукового сигнала дискретным набором его значений — отсчетов — в некоторые
- 142. 09.11.2021 На рисунке показана развертка по времени звукового сигнала, который длится 2 секунды и заменяется на
- 143. 09.11.2021 В общем случае значение частоты дискретизации выбирается исходя из требований теоремы В. А. Котельникова. При
- 144. 09.11.2021 На обсуждаемых стандартных способах оцифровывания звука основан, так называемый, волновой формат кодирования звука wav (от
- 145. 09.11.2021 Для рассмотренного выше случая оцифровывания с частотой дискретизации 44 килогерца и разрядностью 16 бит битрейт
- 146. 09.11.2021 Для записи звука широко применяется формат midi (Musical Instruments Digital Interface — цифровой интерфейс музыкальных
- 147. 09.11.2021 Форматы, основанные на сжатии информации Стандарты сжатия звука и видео MPEG (Moving Pictures Experts Group
- 148. 09.11.2021 АЛГОРИТМЫ Выделенная из принятого сообщения информация так или иначе обрабатывается и возможно запоминается. Обработка информации
- 149. 09.11.2021 Имя автора трактата в европеизированной форме (Algorithmus) стало обозначением десятичной арифметики. В настоящее время считается,
- 150. 09.11.2021 Одновременно выяснилось, что огромное большинство своих действий в повседневной жизни и в профессиональной деятельности: умывание,
- 151. 09.11.2021 В этом смысле термин алгоритм является совершенно понятным, хотя и нестрогим. В повседневном применении он
- 152. 09.11.2021 В связи с появлением доказательств принципиальной невозможности получить решения некоторых задач был сделан естественный вывод
- 153. 09.11.2021 Возьмем в качестве иллюстрации этих рассуждений геометрическую задачу о делении любого угла на две равные
- 154. 09.11.2021 Задача точного определения понятия алгоритм стала центральной математической проблемой в двадцатых годах XX века. Её
- 155. 09.11.2021 Машина Поста Машина Поста представляет собой идеальное, воображаемое устройство, состоящее из неограниченной в обе стороны
- 156. 09.11.2021 Система команд машины Поста Командой машины Поста называется указание исполнителю (каретке) выполнить единственное действие из
- 157. 09.11.2021 Выполнение программы может: не завершится никогда (безостановочная работа); завершится безрезультатно на невыполнимой команде; завершится результативно
- 158. 09.11.2021 V 4 ξ 3 ⇐ 2 ⇒ 5 Стоп Пример программы машины Поста Выполнение программы
- 159. 09.11.2021 Изображение целого неотрицательного числа n в машине Поста представляет собой последовательность из n+1 подряд расположенных
- 160. 09.11.2021 Интуитивное понятие алгоритма Упомянутые выше классические теории, дающие точное определение алгоритма, связаны с очень узким
- 161. 09.11.2021 Поэтому для решения подавляющего большинства практически значимых задач можно обойтись интуитивным, нестрогим понятием алгоритма, его
- 162. 09.11.2021 Алгоритмом называется понятное и точное предписание, указание исполнителю совершить последовательность действий, направленных на достижение указанной
- 163. 09.11.2021 Исполнителем алгоритма называется субъект или объект, осуществляющий фактическое исполнение алгоритма. Исполнение (выполнение) алгоритма представляет собой
- 164. 09.11.2021 формой изложения научных результатов; руководством к действию при решении ранее изученных проблем; необходимым этапом при
- 165. 09.11.2021 Алгоритм, записанный в понятной компьютеру или другому исполнителю форме, принято называть программой Компьютеры, действуя с
- 166. 09.11.2021 Свойства, которыми должен обладать алгоритм Дискретность. Вообще говоря, один и тот же результат может быть
- 167. 09.11.2021 Исполнение алгоритма всегда представляет собой дискретный процесс идущий в дискретном времени. Это значит, что преобразование
- 168. 09.11.2021 Кроме того, нигде не сказано, что этап или группа этапов может быть выполнена только один
- 169. 09.11.2021 Внимательный анализ обсуждаемого предписания показывает, что оно составлено некорректно. В чём этап некорректность? Если по
- 170. 09.11.2021 Любые современные компьютерные системы требуют не только конечного, но и явного задание всех этапов алгоритма.
- 171. 09.11.2021 Это может означать только одно: инструкция начисления зарплаты составлена таким образом что некоторые её правила
- 172. 09.11.2021 Потенциальная выполнимость (результативность, направленность, завершаемость) алгоритма подразумевает направленность, нацеленность алгоритма на получение результата. Более того,
- 173. 09.11.2021 И при обнаружении такого равенства должно быть определено, что считать результатом, а также должны быть
- 174. 09.11.2021 Понятность (элементарность) алгоритма предполагает что на каждом этапе правило выполнения действий должно быть относительно простым
- 175. 09.11.2021 Алгоритм служит, как правило, для решения не одной конкретной задачи, а для решения некоторой группы
- 176. 09.11.2021 Алгоритмизация Использование компьютеров для решения различных задач, обработка любых данных на компьютере могут быть осуществлены
- 177. 09.11.2021 Поэтому разработку алгоритма предпочитают не привязывать ни к моделям компьютеров, ни к языкам программирования, и
- 178. 09.11.2021 В информатике предъявляются особые требования к заданию алгоритмов в связи с тем, что их исполнителем
- 179. 09.11.2021 Словесный способ задания алгоритма состоит в его формулировке средствами естественного языка ─ русского, английского, китайского
- 180. 09.11.2021 Блок-схемой называется графическое изображение структуры алгоритма. Блок –схема представляет собой группу геометрических фигур строго определенного
- 181. 09.11.2021 Выявленные особенности блок-схем определяют характер их применения: в настоящее время блок-схемы являются вспомогательным средством описания
- 182. 09.11.2021 Основным достоинством таких способов задания алгоритмов является то, что преобразование на машинный язык программ, написанных
- 183. 09.11.2021 Словесно-формульный способ базируется на естественном или узко-профессиональном языке. Чтобы избежать неоднозначности, а также обеспечить алгоритм
- 184. 09.11.2021 Алгоритмическим языком называется формальная система представления (записи) алгоритмов, которая может быть предназначена для изучения алгоритмов
- 185. 09.11.2021 Разберём подробнее общую схему использования алгоритмических языков. Для любого использования компьютера должна быть подготовлена программа
- 186. 09.11.2021 Для выполнения целевой программы её необходимо определённым образом передать компьютеру и предоставить ей на вход
- 187. 09.11.2021 Однако не любой алгоритмический язык может считаться языком программирования, и точно так же не любой
- 188. 09.11.2021 Самое главное в этом способе задания алгоритмов состоит в том, что: текст может состоять только
- 189. 09.11.2021 Отметим терминологическую разницу в применении в информатике слов «алгоритм» и «программа». Слово «программа» обычно используется
- 190. 09.11.2021 в отличие от ассемблеров написание программы на высокоуровневых языках ориентировано не на систему команд конкретной
- 191. 09.11.2021 Линейные алгоритмы. Отличительным свойством линейных алгоритмов является выполнение этапов алгоритма в той последовательности в которой
- 192. 09.11.2021 Начальные понятия алгоритмических языков Алгоритмический язык представляет собой систему, которая включает в себя алфавит, то
- 193. 09.11.2021 Следует напомнить, что наличие у алгоритма свойства однозначного задания действий, является важнейшим требованием к алгоритму
- 194. 09.11.2021 Одним из самых распространённых метаязыков является универсальный язык БНФ (от Бекуса Нормальная Форма) или в
- 195. 09.11.2021 Разберём пример определения: → 0 | 1 | 2 | 3 | 4 | 5
- 196. 09.11.2021 Формой включения пояснений в текст программы являются комментарии, которые представляют собой записанную в соответствии с
- 197. 09.11.2021 Присутствие комментариев в алгоритме или программе не является обязательным. Однако полное отсутствие комментариев или их
- 198. 09.11.2021 Например, в языке Паскаль элементы алфавита называются основными символами: → | | Это определение понимается
- 199. 09.11.2021 → and | array | begin | case | const | div | do |
- 200. 09.11.2021 Имя или идентификатор (от англ. identification — опознание) служит для обозначения объектов и конструкций в
- 201. 09.11.2021 Данными называются дискретные сообщения в форме, определяемой правилами используемого способа задания алгоритмов (конкретного языка программирования)
- 202. 09.11.2021 Основная разновидность непосредственных значений — числа, например, -5, 0, 3.1415926 и т.д. Кроме них к
- 203. 09.11.2021 Переменные В действиях, которые задаются в алгоритме, кроме непосредственных значений или заменяющих их констант обычно
- 204. 09.11.2021 Как только по ходу выполнения алгоритма значение почему-либо следует изменить, над переменной выполняют определённое действие,
- 205. 09.11.2021 Тип переменной Любые данные в компьютере представлены некоторым двоичным кодом и для процессора все они
- 206. 09.11.2021 Концепция (от лат. conceptio — понимание, система) представляет собой определённый способ понимания (трактовки, восприятия) какого-либо
- 207. 09.11.2021 Различные типы данных имеют различные множества допустимых значений. Так, целые числа в беззнаковом формате с
- 208. 09.11.2021 Все эти четыре аспекта интегрируются, объединяются в характеристике, которая и называется тип данного. В различных
- 209. 09.11.2021 Логические выражения, то есть выражения, которые имеют значение логического типа, играют важную роль в организации
- 210. 09.11.2021 Целые числа в программах на алгоритмических языках имеет вид последовательности цифр, перед которой может стоять
- 211. 09.11.2021 Внешним признаком вещественного числа в алгоритмических языках является наличие в его записи порядка и/или десятичной
- 212. 09.11.2021 Вместо строгих неравенств «равно» и «не равно» для вещественных данных рекомендуется применять нестрогие «больше или
- 213. 09.11.2021 Тип char Непосредственными значениями символьного типа по определению являются одиночные символы текстов. Чтобы отличить однобуквенные
- 214. 09.11.2021 Величины, используемые в различных предметных областях, в том числе в технических применениях, математике, физике и
- 215. 09.11.2021 Пусть, например, требуется умножить вектор на некоторое число, тогда в записи операции следует указать только
- 216. 09.11.2021 Значения простых типов данных не имеют никакой внутренней структуры, это неделимые, атомарные значения, в них
- 217. 09.11.2021 Примеры структурированных значений: Структуры аналогичные векторам и матрицам в информатике принято называть массивами, а структуры
- 218. 09.11.2021 Для выделения элементов массивов могут использоваться не только числа, поэтому конструкцию, которая определяет отдельный элемент
- 219. 09.11.2021 Например, значение даты состоит из трёх полей, названия которых указаны в заголовке таблицы: День, Месяц,
- 220. 09.11.2021 Тип непосредственных значений всегда можно определить по способу их записи в алгоритме. Все допустимые способы
- 221. 09.11.2021 В описании константы необходимо указать выбранное для неё имя и значение. Для этого используется следующая
- 222. 09.11.2021 Описания переменных простых типов в Паскале имеет вид: : Эта формула понимается следующим образом: «Описание
- 223. 09.11.2021 В Паскале описание массивов состоит из списка имен тех массивов, которые имеют одинаковую структуру, а
- 224. 09.11.2021 Описания играют очень важную роль, так как транслятор использует их, во-первых, для определения форматов машинного
- 225. 09.11.2021 Имя функции вместе с заключённым в круглые скобки аргументом или списком аргументов называется указателем функции
- 226. 09.11.2021 Операции одинакового старшинства всегда выполняются слева направо. При необходимости изменить порядок действий, диктуемый правилами старшинства
- 227. 09.11.2021 Ещё одно важное требование: значения всех переменных, входящих в выражение, должны быть определены до начала
- 228. 09.11.2021 Отношение в алгоритмических языках представляет собой два выражения одного и того же простого типа, которые
- 229. 09.11.2021 Алгоритм задает, определяет действия, которые необходимо выполнить для достижения цели, а также фиксирует требуемую последовательность
- 230. 09.11.2021 Для определения требуемой последовательности действий в алгоритмах и программах используются управляющие конструкции. Конструкция алгоритмического языка
- 231. 09.11.2021 Закрепление за переменной некоторого текущего значения, также как и любое изменение этого значения, осуществляется в
- 232. 09.11.2021 Между левой и правой частью оператора находится знак присваивания, в качестве которого в Паскале используется
- 233. 09.11.2021 Порядок выполнения присваивания вычисляется значение выражения в правой части, при этом всегда берутся значения входящих
- 234. 09.11.2021 Правила задания присваивания Тип переменной в левой части и тип значения в правой должны соответствовать
- 235. 09.11.2021 Отличия действия присваивания от операции сравнения Присваивание это действие, в котором переменная изменяет значение, сравнение
- 236. 09.11.2021 Организация обмена В подавляющем большинстве случаев исполнителем алгоритма является компьютер, а результаты его работы требуются
- 237. 09.11.2021 Чтобы учитывать такую связь, обмен в алгоритмических языках осуществляется с помощью особой разновидности операторов, которые
- 238. 09.11.2021 Например, процедура read(y) scan(y) требует ввода одного вещественного числа — значения переменной y, для процедуры
- 239. 09.11.2021 Программа на языке Си в простейшем случае имеет вид: main ( ) { S1; S2;
- 240. 09.11.2021 Процедуры ввода/вывода могут помещаться в любом месте внутри последовательности S1;S2; …;Sn операторов программы. Однако в
- 241. 09.11.2021 … Линейные алгоритмы. Управляющая конструкция следование. Для реализации линейных участков алгоритмов используется управляющая конструкция следование,
- 242. 09.11.2021 Построение линейных алгоритмов обычно не вызывает затруднений, и состоит из следующих шагов: необходимые действия определяются
- 243. 09.11.2021 5 n 8 m 8 n 5 m Исходное состояние Требуемое результирующее состояние Переменная n
- 244. 09.11.2021 5 n m Решение задачи обмена значениями Необходимо понять причину неудачи предыдущих вариантов решения. Дело
- 245. 09.11.2021 //Паскале-подобный алгоритм обмена, var n, m, k: integer; //Описания используемых переменных begin read(n, m); //Ввод
- 246. 09.11.2021 Общий порядок построения алгоритма внимательно проанализировать условие задачи выявить, что задано, какие величины являются исходными;
- 247. 09.11.2021 Решение системы двух линейных уравнений с двумя неизвестнымиxx Шаги 1-3. Когда говорят «задана система алгебраических
- 248. 09.11.2021 В данной задаче символьный, логический, а также структурированные типы для обсуждаемых величин не допустимы, поскольку
- 249. 09.11.2021 Ответ на вопрос, какой из рассмотренных вариантов предпочтительнее зависит от размерности системы уравнений. Для системы
- 250. 09.11.2021 Вспомним сказанное раньше: обычно ввод организуют в самом начале алгоритма, а вывод ─ перед его
- 251. 09.11.2021 Легко заметить, что дроби, значения которых необходимо вычислить, имеют совершенно одинаковые знаменатели, и, следовательно, не
- 252. 09.11.2021 После этого вычисление корней сведется к очень простым действиям: Осталось определиться с порядком выполнения вычислений.
- 253. 09.11.2021 Начало Ввод A,b D:=a11a22-a12a21 Dx:=b1a22-b2a12 Dy:=b2a11-b1a21 x:=Dx/D y:=Dy/D Вывод x,y Конец A : array [1..2,1..2]
- 254. 09.11.2021
- 255. 09.11.2021 // Паскале-подобный. var a11,a12,a21,a22,b1,b2,x,y,D,Dx,Dy: real; begin read(a11, a12, a21, a21, a22, b1, b2); D :=
- 256. 09.11.2021
- 257. 09.11.2021 При записи текстов алгоритмов применяются простые графические приёмы: связанные по смыслу строки сдвигаются вправо на
- 258. 09.11.2021 read(a11, a12, a21, a21, a22, b1, b2); D := a11*a22 – a12*a21; //Знаменатель Dx :=
- 259. 09.11.2021 Найденные в результате трассировки значения величин x и y совпали с известным решением системы. Можно
- 260. 09.11.2021 c read(a11, a12, a21, a21, a22, b1, b2); D := a11*a22 – a12*a21; //Знаменатель Dx
- 261. 09.11.2021 Этот тест завершился выявлением в алгоритме принципиально невыполнимого действия. Несмотря на то, что результаты одной
- 262. 09.11.2021 Получается, что обращение в нуль знаменателя является проявлением свойств самой системы уравнений, которые проявились на
- 263. 09.11.2021 Заметим, что в проведённых рассуждениях анализ проводился в обратном направлении — от точки появления ошибки
- 264. 09.11.2021 Если вспомнить точные математические утверждения относительно существования решений системы линейных алгебраических уравнений, то получим следующие
- 265. 09.11.2021 Алгоритмы с ветвлениями более сложны по сравнению с линейными. В любом таком алгоритме имеется несколько
- 266. 09.11.2021 Обсудим подробнее структуру полученного алгоритма. Какой этап является этапом выбора? Теперь обратим внимание на то,
- 267. 09.11.2021 Затем размещаются точные описания каждого из вариантов действий (дождаться ответа и поговорить; не разговаривать). После
- 268. 09.11.2021 Получается, что в результате первоначального анализа были выделены только две ветви, затем одна из них
- 269. 09.11.2021 Общие рекомендации по построению алгоритмов с ветвлениями Участок инициализации — подготовки к ветвлению — служит
- 270. 09.11.2021 Завершающий участок ветвления служит для объединения всех путей исполнения алгоритма. Он может быть не очень
- 271. 09.11.2021 Несмотря на то, что участок инициализации ветвления должен находиться перед этапом выбора, его лучше формировать
- 272. 09.11.2021 Управляющие конструкции ветвлений Заметим, что с организацией ветвлений мы уже фактически сталкивались, рассматривая программы для
- 273. 09.11.2021 Сокращенное ветвление условие + - да нет S1 if then S1 Сокращенное ветвление используется, если
- 274. 09.11.2021 Поэтому для корректного построения ветвлений с помощью этих конструкций, сформулированные в конкретных алгоритмах условия выбора
- 275. 09.11.2021 Пример организации полного ветвления Для любого заданного значения вещественного аргумента x вычислить значение кусочно-непрерывной функции
- 276. 09.11.2021 Условия выбора ветвей x>3 и x≤3 взаимно не пересекаются, каждое из них является отрицанием другого,
- 277. 09.11.2021 - нет x≤3 + да x>3 X>3 y:=2x+1 y:=sin x Начало Ввод x Вывод x,y
- 278. 09.11.2021
- 279. 09.11.2021 - нет X>3 + да x≤3 X≤3 y:=sin x y:=2x+1 Начало Ввод x Вывод x,y
- 280. 09.11.2021
- 281. 09.11.2021 Ещё раз обращаю внимание на графические приёмы оформления фрагментов программ, которые облегчают их чтение и
- 282. 09.11.2021 Особо обращаю внимание на отсутствие точки с запятой после первой ветви в записи на языке
- 283. 09.11.2021 Если на языке Си записать условный оператор без заканчивающей оператор точки с запятой: if (x
- 284. 09.11.2021 Для алгоритмов с ветвлением тестовые наборы должны проверить каждую из ветвей. Кроме того обязательно должны
- 285. 09.11.2021 main( ) { float x, y; scan (x); if (x y=sin (x); //выбрана нижняя ветвь
- 286. 09.11.2021 main( ) { float x, y; scan (x); if (x y=sin (x); //выбрана нижняя ветвь
- 287. 09.11.2021 На основании этих трассировок можно сделать вывод: проведённое тестирование не выявило ошибок в проверяемом алгоритме.
- 288. 09.11.2021 Пример организации неполного ветвления Задана последовательность из двух элементов a1, a2 . Требуется переставить её
- 289. 09.11.2021 Для определённости будем считать элементы массива целыми. Как выглядят описания этого массива на Паскале и
- 290. 09.11.2021 Пусть a={4,8}. Компоненты вектора расположены в нужном порядке и делать ничего не нужно. Пусть теперь
- 291. 09.11.2021 Таким образом, получаем два варианта, две ветви алгоритма: при удовлетворении для введённых значений неравенства а1≤а2
- 292. 09.11.2021 Непустая ветвь представляет собой линейный алгоритм обмена значениями, который был ранее построен. Только применить его
- 293. 09.11.2021 - нет + да a1>a2 a1>a2 c:=a1 Начало Ввод a1,a2 Вывод a Конец a1:=a2 a2:=c
- 294. 09.11.2021 Записать алгоритм на СИ-подобном языке При обсуждении вариантов построения полного ветвления было выяснено, что изменив
- 295. 09.11.2021 Как и в случае полной формы для тестирования построенного алгоритма необходимы, по крайней мере, три
- 296. 09.11.2021 - нет + да a1>a2 a1>a2 c:=a1 Начало Ввод a1,a2 Вывод a Конец a1:=a2 a2:=c
- 297. 09.11.2021 Алгоритмы с большим количеством ветвей В задачах часто возникают ситуации, при которых в алгоритме приходится
- 298. 09.11.2021 Конструкция первого шага образует внешнее ветвление, а каждая следующая вкладывается в ветвление предыдущего шага. На
- 299. 09.11.2021 Пример: алгоритм с тремя ветвями Построить алгоритм вычисления значения функции для любого вещественного значения аргумента
- 300. 09.11.2021 при x≤0: y(x)=0; при 0 при x>1: y(x)=x2+sin πx. По определению функции, видно, что в
- 301. 09.11.2021 - нет x>1 + да 0 x>0 ─ уже выполнено - нет x>0 + да
- 302. 09.11.2021 - нет x>1 + да 0 x>0 - нет + да x≤0 x≤0 y:=0 Начало
- 303. 09.11.2021 Обратите внимание на оформление в этой блок-схеме вложенного и внешнего ветвлений. Блоки действий в ветвях
- 304. 09.11.2021 // Паскале-подобный var x, y: real; begin read(x); if x y:=0.0 else //x>0, выбрана «групповая»
- 305. 09.11.2021 if x y:=x*x–x else {x>1 — нижняя ветвь} y:=x*x+ sin(π*x); {Остальные варианты. x уже больше
- 306. 09.11.2021
- 307. 09.11.2021
- 308. 09.11.2021 Для тестирования алгоритма, содержащего n ветвей необходимо подобрать 2n-1 тестовый набор, по одному набору на
- 309. 09.11.2021 - нет x≤0 + да 0 x≤1 - нет + да x>1 x>1 y:=x2+sinπx Начало
- 310. 09.11.2021 - нет x>1 + да 0 x>0 - нет + да x≤0 x≤0 y:=0 Начало
- 311. 09.11.2021 - нет x>1 + да 0 x≤0 ∨ x>1 - нет + да x≤0 0
- 312. 09.11.2021 Все построенные таким путём варианты со смысловой точки зрения одинаковы и при отсутствии ошибок все
- 313. 09.11.2021 Построение циклических алгоритмов Решения подавляющего большинства задач включают в себя многократно выполняющиеся последовательности действий. Поэтому
- 314. 09.11.2021 Фрагмент конструкции цикла, в котором находится условие повторения, обычно называют заголовком цикла. Таким образом, в
- 315. 09.11.2021 Итак, в структуре алгоритма с циклом имеется три основных, связанных с его организацией элемента: инициализация
- 316. 09.11.2021 условие Тело цикла Действия, которые требуются выполнить многократно, образуют тело цикла. Часть цикла, содержащая условие
- 317. 09.11.2021 В соответствии с этой схемой вначале выполняются все связанные с инициализацией цикла действия, которые, собственно
- 318. 09.11.2021 Эта управляющая конструкция имеет практически точные аналоги почти во всех алгоритмических языках. while do while
- 319. 09.11.2021 Значение входящего в заголовок логического выражения вычисляется перед каждым выполнением тела цикла. Если получается логическое
- 320. 09.11.2021 Общие рекомендации по построению циклических алгоритмов Чтобы обеспечить корректность построения циклов можно придерживаться следующих рекомендаций:
- 321. 09.11.2021 Эти рекомендации имеют весьма общий характер, и их следует тщательно соблюдать, особенно на первых порах,
- 322. 09.11.2021 Вход в цикл представляет собой выполнение всех действий участка инициализации и первый анализ условия повторения.
- 323. 09.11.2021 Задача о рекуррентной последовательности Пусть элементы последовательности связаны друг с другом соотношением: Последовательности у которых
- 324. 09.11.2021 Зафиксируем вытекающие из рекуррентного соотношения важные для дальнейшего моменты в проведённых рассуждениях: для определения любого
- 325. 09.11.2021 С теоретической точки зрения линейный алгоритм, несмотря на то, что он будет содержать очень много
- 326. 09.11.2021 При анализе проведённых расчётов возникает ощущение, что при вычислении каждого очередного элемента последовательности приходится выполнять
- 327. 09.11.2021 По условиям задачи в начальный момент исполнения действий к=0, а=0.5. k := 0: a :=
- 328. 09.11.2021 // Си-подобный k = 0; a = 0.5; // Задание начальных значений k ++; a
- 329. 09.11.2021 1. Устанавливаем, из каких действий состоит тело цикла: Увидели, что имеется группа действий, которые выполняются
- 330. 09.11.2021 Подготовка Начало k k:=k+1 false true a:=0.5 k:=0 Ввод N a:=k*a+1/(k+1) Вывод N, а Конец
- 331. 09.11.2021 // Си-подобный main ( ) { int n; scan(n); //Ввод заданного номера n // Инициализация
- 332. 09.11.2021 Условие k Начало k k:=k+1 false true a:=0.5 k:=0 Ввод N a:=k*a+1/(k+1) Вывод N, а
- 333. 09.11.2021 Начало k false true a:=0.5 k:=0 Ввод N a:=k*a+1/(k+1) Вывод N, а Конец N,k: integer;
- 334. 09.11.2021 Начало k≤N k:=k+1 false true a:=0.5 k:=0 Ввод N a:=k*a+1/(k+1) Вывод N, а Конец Начало
- 335. 09.11.2021 Начало k a:=k*a+1/(k+1) false true a:=0.5 k:=0 Ввод N k:=k+1 Вывод N, а Конец Начало
- 336. 09.11.2021 Начало k≤N a:=k*a+1/(k+1) false true a:=0.5 k:=1 Ввод N k:=k+1 Вывод N, а Конец N,k:
- 337. 09.11.2021 Ещё раз, кратко: Выявить группу повторяющихся действий ─ сформировать тело цикла. Установить условия повторения этих
- 338. 09.11.2021 Задача вычисления суммы Исходной величиной задачи является переменная N целого типа ─ количество слагаемых, величина
- 339. 09.11.2021 var S,a: real; N,I :integer; begin read (N); {Ввод количества слагаемых} {Инициализация цикла} S:=0; {Начальное
- 340. 09.11.2021
- 341. 09.11.2021 S: real; N,i:integer; begin read (N); {Ввод количества слагаемых} {Инициализация цикла} S:=0; {Начальное значение накапливаемой
- 342. 09.11.2021 S: real; N,i:integer; begin read (N); {Ввод количества слагаемых} {Инициализация цикла} S:=0.5; {Начальное значение накапливаемой
- 343. 09.11.2021 S: real; N,i:integer; begin read (N); {Ввод количества слагаемых} {Инициализация цикла} S:=0; {Начальное значение накапливаемой
- 344. 09.11.2021 S: real; N,i:integer; begin read (N); {Ввод количества слагаемых} {Инициализация цикла} S:=0; {Начальное значение накапливаемой
- 345. 09.11.2021 Суммирование с рекуррентным соотношением между слагаемыми Пусть ai ─ очередное i слагаемое ai=1/i!. Тогда Таким
- 346. 09.11.2021 S,a: real; N,i:integer; begin read (N); {Ввод количества слагаемых} {Инициализация цикла} S:=1. {Начальное значение накапливаемой
- 347. 09.11.2021
- 348. 09.11.2021 Суммирование произвольных слагаемых x: array of real; S: real; N,i: integer; begin read (N, x);
- 349. 09.11.2021 Нахождение экстремального элемента массива Пусть задан массив x ={x1,x2,…,xn}. В простейшем случае необходимо найти его
- 350. 09.11.2021
- 351. 09.11.2021 5 3 8 -1 9 7 Проведем тестирование алгоритма на примере x={5, 3, 8, -1,
- 352. 09.11.2021 int n, x[ ]; scan (n, x); //ввод размерности и значений элементов массива Int max=x[1];
- 353. 09.11.2021 int n, x[ ]; scan (n, x); //ввод размерности и значений элементов массива int Nmax=1;
- 354. 09.11.2021 В посленднем варианте построения алгоритма результат его выполнения при наличии одинаковых элементов в массиве оказывается
- 355. 09.11.2021 Определение экстремального элемента и его номера int i, n, max, Nmax , x[ ]; scan
- 356. 09.11.2021 Во всех рассмотренных выше вариантах алгоритма в качестве «кандидата» во время инициализации цикла выбирался первый
- 357. 09.11.2021 Например, при вычислении наибольшего среди положительных чисел, в качестве «кандидата» можно взять нуль или любое
- 358. 09.11.2021 Задача поиска Общая постановка. В заданной совокупности элементов требуется найти элемент, обладающий заданным набором свойств.
- 359. 09.11.2021 a)Классический алгоритм Предлагается очевидный подход к решению задачи: последовательное сравнение каждого очередного элемента массива с
- 360. 09.11.2021 25 x :array of integer; a, k, i,n :integer; flag: boolean; begin read(n,x,a); {ввод количества
- 361. 09.11.2021 18 x :array of integer; a, k, i,n :integer; flag: boolean; begin read(n,x,a); {ввод количества
- 362. 09.11.2021 i:=1; x[N+1]:=a; while x[i] a do i:=i+1 б)Быстрый алгоритм Идея быстрого алгоритма состоит в том,
- 363. 09.11.2021 Дальнейшее улучшение алгоритма поиска, который можно было бы использовать для работы с произвольными массивами, принципиально
- 364. 09.11.2021 Свойство упорядоченности у элементов массива обеспечивает возможность использования общематематического приёма деления пополам, с помощью которого
- 365. 09.11.2021 43 55 82 42 94 18 x[1] x[2] x[3] x[4] x[5] x[6] x[7] x[8] 6
- 366. 09.11.2021 Итак, во время поиска приходится повторять следующие действия: 1) выбирать средний элемент массива; 2) сравнивать
- 367. 09.11.2021 Выбор левой половины массива означает, что его правая граница перемещается к среднему элементу: R:=M .
- 368. 09.11.2021 42 18 6 25 a 1 8 L R M 2 3 x[1] x[2] x[3]
- 369. 09.11.2021 Вновь находим средний элемент рассматриваемой части массива: M:=(L+R) div 2, M=3. 42 25 a 1
- 370. 09.11.2021 {flag — показывает результат поиска.} Таким образом, повторяющиеся действия состоят в выборе среднего элемента массива
- 371. 09.11.2021 Эффективность алгоритмов Нами были построены различные алгоритмы решения одной и той же задачи поиска. При
- 372. 09.11.2021 Временная и объёмная эффективности довольно сложным образом связаны и с самим алгоритмом и друг с
- 373. 09.11.2021 Это даёт возможность не учитывать различную скорость работы исполнителей. Однако остается зависимость от набора действий,
- 374. 09.11.2021 В связи с тем, что временная эффективность алгоритма и количество действий в нём связаны друг
- 375. 09.11.2021 Таким образом, можно утверждать, что вход алгоритма d является аргументом, а сам алгоритм A определяет
- 376. 09.11.2021 Но девять действий пунктов 2–5 (определение значения условия повторения и действия, входящие в тело цикла)
- 377. 09.11.2021 Следовательно, совершенно некорректно говорить об общей эффективности алгоритма, учитывая при этом только временные требования. Для
- 378. 09.11.2021 Так, например, из описаний алгоритма накопления суммы int i,n; float a, S; следует, что в
- 379. 09.11.2021 main ( ) { int n, m; //Описания основных переменных scan (n, m); //Ввод исходных
- 380. 09.11.2021 Обычно как для функции трудоёмкости, так и для функции объёма всё множество входов алгоритма удаётся
- 381. 09.11.2021 Его фунция трудоёмкости имеет вид TA(d)=TA(n)=6n+2, зависит только от одной входной величины n, которая определяет
- 382. 09.11.2021 Так, в алгоритме вычисления суммы размер входа определяет количество слагаемых, а в алгоритме скалярного умножения
- 383. 09.11.2021 Конечно, можно записать такую функцию в традиционном для кусочно-непрерывных функций виде: Но это более или
- 384. 09.11.2021 для содержащего три ветви алгоритма вместо уже достаточно неудобного вида обычной функции трудоёмкости = получается
- 385. 09.11.2021 В этом ветвлении неравенство x[i]>max удовлетворяется для одних элементов массива и не удовлетворяется для других.
- 386. 09.11.2021 Худший случай возникает, когда каждый следущий элемент массива оказывается больше предудущего, то есть исходный массив
- 387. 09.11.2021 Теперь мы можем применить введённые понятия для сравнения между собой различных алгоритмов решения одной и
- 388. 09.11.2021 Расчёты лучших и худших случаев провсети самостоятельно. Во всех рассмотренных вариантах построения алгоритма поиска максимальное
- 389. 09.11.2021 Опираясь на проведённый для алгоритмов поиска анализ, мы можем уточнить использованные без точного определения понятия
- 390. 09.11.2021 Это же пример даёт требуемый ответ: корректно выбирать лучший и худший случай только на всех
- 391. 09.11.2021 На первом шаге количество k рассматриваемых элементов массива равно n После первого шага количество k
- 392. 09.11.2021 Практически важный аспект анализа трудоёмкости связан с классификацией алгоритмов по типу зависимости TA(d) по скорости
- 393. 09.11.2021
- 394. 09.11.2021 В качестве образцов скорости роста функций трудоёмкостей обычно выбирают следующий набор функций: log a n,
- 395. 09.11.2021 Алгоритм, использующий прямое вычисление p(x)=anxn+an-1xn-1+…+a1x1+a0. Для вычисления anxn требуется n умножений. Для вычисления всех слагаемых
- 396. 09.11.2021 Кратные (вложенные) циклы Структура алгоритма, в котором внутри цикла находится другой цикл, называется кратным или
- 397. 09.11.2021 Можно рассуждать следующим образом. Чтобы получить все элементы матрицы C следует перебрать все строки исходных
- 398. 09.11.2021 Теперь следует уточнить действия с каждой текущей строкой, то есть со строкой, имеющей номер i.
- 399. 09.11.2021 {Действия с элементами i строки} j:=1;{перебор столбцов i-й строки, начиная с первого} while j ≤
- 400. 09.11.2021 i:=1;{начнем с получения элементов первой строки матрицы C} while i ≤ n do {есть имеются
- 401. 09.11.2021 Оцените функцию трудоёмкости и объёма памяти для полученного алгоритма. TA(d)=5mn+4n+1 ~ 5N2+4N+1, где N=max(n,m) VA(d)=12mn+4
- 402. 09.11.2021 Задача сортировки элементов массива Сортировкой в информатике называется переупорядочение рассматриваемых объектов по некоторому признаку или
- 403. 09.11.2021 x[1] x[2] x[3] x[4] x[5] x[6] x[7] x[8] 43 55 82 42 94 18 6
- 404. 09.11.2021 x[1] x[2] x[3] x[4] x[5] x[6] x[7] x[8] 43 55 82 42 94 18 6
- 405. 09.11.2021 x[1] x[2] x[3] x[4] x[5] x[6] x[7] x[8] 43 55 82 42 94 18 6
- 406. 09.11.2021 x[1] x[2] x[3] x[4] x[5] x[6] x[7] x[8] 43 55 82 42 94 18 6
- 407. 09.11.2021 {вывод (использование) результатов} Первый набросок алгоритма Пусть массив содержит N элементов и i ─ номер
- 408. 09.11.2021 end. Уточнение алгоритма begin {ввод (формирование) исходных данных} i:=1; {Начальный номер шага} while i begin
- 409. 09.11.2021 Оценка функции трудоёмкости алгоритма сортировки прямым выбором Подсчёт трудоёмкости удобнее начать с определения количества действий,
- 410. 09.11.2021 Эта закономерность дает возможность подсчитать общее количество итераций вложенного цикла на всех шагах сортировки. Такой
- 411. 09.11.2021 Кроме того имеется еще одно действие инициализации внешнего цикла i:=1, поэтому TA∧(n)=M+10(n-1)+1=5n(n-1)/2+10(n-1)+1=15n2+15n/2-9. Таким образом, трудоёмкость
- 412. 09.11.2021 Подпрограммы Описанием подпрограммы называется поименованная часть алгоритма (программы), которая может быть использована для выполнения описанных
- 413. 09.11.2021 Целесообразно задать ─ описать такую последовательности действий только один раз ─ описать подпрограмму. Назовем входную
- 414. 09.11.2021 {Нужно вычислить 8! и приписать значение переменной P8} Факториал(8,P8); … Факториал(6,P6); … Факториал(10,P10); Теперь, используя
- 415. 09.11.2021 Итерация и рекурсия В математике для решения подавляющего большинства задач используются методы, которые в конечном
- 416. 09.11.2021 begin P:=1; i:=2; while i ≤ k do begin P:=P*i;i:=i+1 end end; procedure Факториал (k,
- 417. 09.11.2021 Основные структуры данных В информатике используется большое количество различных структур данных, которые применяются для моделирования
- 418. 09.11.2021 Значение скалярного типа представлено ровно одним компонентом (время, температура). Значение структурированного типа представлено более чем
- 419. 09.11.2021 Структуры, аналогичные строкам таблицы, называют записями. Компоненты записей принято называть полями. Различные поля (столбцы таблицы)
- 420. 09.11.2021 Множество Во многих математических и информационных задачах возникает необходимость в прямом или косвенном использовании основного
- 421. 09.11.2021 Динамические структуры данных У данных с динамической структурой с течением времени изменяется сама структура, а
- 422. 09.11.2021 На базе линейного списка организуются много других типов динамических структур. Это в частности: кольца, очереди,
- 423. 09.11.2021 Структура очереди У очереди доступен для включения конец, а для исключения (выборки) ─ начало. Элемент,
- 424. 09.11.2021 Структура стека У стека для взаимодействия доступна только один конец структуры ─ вершина стека. И
- 425. 09.11.2021 Корнем дерева является элемент a, он находится на самом высоком уровне. В дереве нет элементов,
- 426. 09.11.2021 Модели и моделирование В любой научной дисциплине часто приходится использовать важнейшие общенаучные понятия модель и
- 427. 09.11.2021 различные системы заполняют наш дом: электрическая, отопительная, водопроводная, газоснабжения; кровеносная, нервная, костно-мышечная и другие системы
- 428. 09.11.2021 Важнейшая роль понятия «модель» является, по-видимому, следствием самого способа мышления человека. В результате наблюдения над
- 429. 09.11.2021 Объект (от лат. objectum — предмет) — существующий в реальной действительности (то есть вне человеческого
- 430. 09.11.2021 Модель считается адекватной, если она верно отображает важнейшие с точки зрения решаемой задачи особенности реальных
- 431. 09.11.2021 Наличие адекватной модели позволяет спрогнозировать свойства и поведение реального объекта в той или иной ситуации,
- 432. 09.11.2021 В таких случаях формируется более простая модель, постановка задачи упрощается и вместо неё решается другая,
- 433. 09.11.2021 Одним из самых важных свойств модели является её потенциальность (от лат. potentia — мощь, сила)
- 434. 09.11.2021 Моделирование это всегда упрощение. Это замена сложного более простым. Получается решение другой, более простой задачи.
- 435. 09.11.2021 Классификация моделей Классификацией называется распределение рассматриваемых объектов по группам в соответствии с выбранными признаками, свойствами.
- 436. 09.11.2021 Информационные модели Информационная модель представляет собой нематериальный, воображаемый образ объекта, явления, предметной области. Примеры: математический
- 437. 09.11.2021 Имитационные модели Функциональные модели Модели, в которых отображается изменение состояния изучаемых объектов, явлений, процессов с
- 438. 09.11.2021 Системы Системой называется сложная структура, состоящая из взаимодействующих компонентов, каждый из которых в отдельности не
- 439. 09.11.2021 Выделение систем связано с постановкой и решением следующих задач: Изучение предметной области, объекта, совокупности объектов,
- 440. 09.11.2021 Статические и динамические системы Система называется статической если множество компонентов, из которых она состоит, множество
- 441. 09.11.2021 Различают естественные, искусственные и информационные системы. Естественные и искусственные системы материальны, информационные системы нематериальны. Частным
- 442. 09.11.2021 Одно и то же дискретное сообщение можно представить в различных алфавитах, но при этом очень
- 443. 09.11.2021 Для решения многих практических задач информатики, например, для определения места на носителе, которое потребуется для
- 444. 09.11.2021 Эта характеристика не имеет ничего общего с измерением информации, понимаемой как смысл сообщения. Более правильным
- 445. 09.11.2021 Теперь представим, что получено сообщение, содержащее более полную информацию — указаны дата, время прибытия и
- 446. 09.11.2021 Проведённые выше качественные рассуждения представляют собой близкую к существу дела, но не точную аналогию, которая
- 447. 09.11.2021 Всё количество полученной информации оказывается равным исходному значению энтропии только после появления последнего знака сообщения.
- 448. 09.11.2021 Изучение присущих природе закономерностей, выявление существующих взаимосвязей, взаимозависимостей в тех или иных реальных ситуациях производится
- 449. 09.11.2021 События, исход которых существенно зависит от множества неизвестных или трудно учитываемых факторов, называются случайными. Случайные
- 450. 09.11.2021 Подбрасывая монету, несложно убедиться в том, что результатом может быть выпадение либо «герба», либо «решки».
- 451. 09.11.2021 Дело в том, что, например, исход «вынут белый шар» не является элементарным, так как он
- 452. 09.11.2021 Событие Z считается невероятным (невозможным), если его наступление не происходит ни при каких обстоятельствах. Для
- 453. 09.11.2021 Измерение вероятностей Вероятность p(A) случайного события A является численной мерой возможности осуществления этого события в
- 454. 09.11.2021 Вероятность суммы двух несовместных событий A и B равна: Вероятность произведения двух независимых событий A
- 455. 09.11.2021 Анализируя и сравнивая между собой различные опыты, можно заметить, что опыты в целом имеют разную
- 456. 09.11.2021 Свойства, которыми должна обладать функция определяющая энтропию: Единица измерения энтропии называется бит Если выбрать опыт
- 457. 09.11.2021 Если исходы равновероятны, то их энтропии одинаковы, поэтому энтропии h, вносимые каждым из n равновероятных
- 458. 09.11.2021 Тогда полная энтропия опыта с n неравновероятными исходами {A1, A2, …, An} равна: Для опытов
- 459. 09.11.2021 Количество информации это числовая характеристика, отображающая ту меру неопределенности опыта, которая исчезает после его проведения
- 460. 09.11.2021 Значение входящего в каждое слагаемое выражения –log2p(Ai) можно рассматривать, как частную информацию, связанную с одним
- 461. 09.11.2021 Пусть вероятность перегорания лампочки при её включении равна p=1/1000, то есть лампочка перегорает только в
- 462. 09.11.2021 Количество информации и алфавит Приём дискретного сообщения можно рассматривать как последовательное осуществление независимых опытов по
- 463. 09.11.2021 Разумеется, из этих результатов не следует делать вывод о том, что русский язык более богат,
- 464. 09.11.2021 Поэтому путём анализа большого количества разных текстов специалисты определяют частоты появления букв, которые естественно считать
- 465. 09.11.2021 I0,I1,I2,… ─ убывающая последовательность. Подобные рассуждения можно распространить не только на соседние пары знаков, но
- 466. 09.11.2021 Количество информации в сообщении численно равно минимально необходимому количеству двоичных цифр, которые требуются для представления
- 467. 09.11.2021 Правило, описывающее соответствие между знаками первичного алфавита и знаками или сочетаниями вторичного называется кодом. Кодирование
- 468. 09.11.2021 Пример таблицы кодирования: Последовательность знаков вторичного алфавита A2, которыми представлен один знак первичного алфавита A1
- 469. 09.11.2021 Кодированием называется последовательность действий по переводу сообщения из первичного во вторичный алфавита. Существует огромное количество
- 470. 09.11.2021 Задачи эффективного и оптимального кодирования часто решаются с помощью сжатия сообщений. Различают два вида сжатия
- 471. 09.11.2021 Пусть в качестве первичного используется алфавит A1, в котором количество информации приходящейся на один знак
- 472. 09.11.2021 Рассмотрим, например, алфавиты A1={А, К, М, Н, У} и A2={0, 1}. Пусть также имеется кодовая
- 473. 09.11.2021 Длины сообщений равны соответственно L1=5 и L2=23 знака (пробелы не учитываются, так как знак пробела
- 474. 09.11.2021 Отношение L2/L1 имеет смысл количества знаков вторичного алфавита, которое требуется для кодирования одного знака первичного
- 475. 09.11.2021 Обычно I(A1)>I(A2) , следовательно Lmin>1 Неравенство , выражающее условие неисчезновения количества информации при кодировании, можно
- 476. 09.11.2021 Теорема Шеннона о кодировании при отсутствии помех При отсутствии помех всегда возможен такой вариант кодирования
- 477. 09.11.2021 Относительной избыточностью кода Q(A1,A2) называется отношение Второй вариант формулировки теоремы Шеннона: «При отсутствии помех всегда
- 478. 09.11.2021 из сравнения двух используемых вариантов расчёта I(A) вытекает, что для получения минимально возможного теоретического значения
- 479. 09.11.2021 Пусть каждому знаку первичного алфавита A1 с известными частотами появления знаков в сообщениях, сумма которых
- 480. 09.11.2021 В своей теореме К. Шеннон только доказал теоретическую возможность построения кода с требуемой избыточностью, но
- 481. 09.11.2021 Алфавитное неравномерное двоичное кодирование Основной принцип неравномерного кодирования: коды, встречающиеся в сообщениях чаще должны иметь
- 482. 09.11.2021 K(r,2)=4,964; Q(r,2)=4,964/4,356-1=0,14 Код с разделителями для русского алфавита
- 483. 09.11.2021 Префиксные коды. Условие Фано. Неравномерный код может быть однозначно декодирован, если никакой из кодов знаков
- 484. 09.11.2021 Префиксный код Шеннона - Фано 0,5 0,5 0 0 1 1 1 1 0 1
- 485. 09.11.2021 Префиксный код Хаффмана Исходный A1 A2 A3 A4 Прямой ход
- 486. 09.11.2021 Обратный ход построения кода Хаффмана Исходный A1 A2 A3 A4 К(A,2)=2,45; I(A)=2,390; Q(A,2)=0,0249; p(0)=0,47;p(1)=0,53; Q(R,2)=0,009
- 487. 09.11.2021 Код Хаффмана для русского алфавита
- 488. 09.11.2021 Блочное кодирование Коды, в которых кодовая цепочка ставится в соответствие последовательности из нескольких знаков первичного
- 489. 09.11.2021 несет I0(A) = log2n = 5 бит информации и
- 491. Скачать презентацию
09.11.2021
Литература:
Глушков В.Л. Основы безбумажной информатики. М.: Наука, 1987.
Бауэр Ф. Л., Гооз
09.11.2021
Литература:
Глушков В.Л. Основы безбумажной информатики. М.: Наука, 1987.
Бауэр Ф. Л., Гооз
Брой М. (Манфред) Информатика (в 4 книгах). М.: Диалог - МИФИ, 1996.
Симонович С.В. Информатика. Базовый курс. Питер, 2000
Острейковский В.А. Информатика. М, Высшая школа, 2000.
Королев Л.Н., Миков А.И. Информатика. Введение в компьютерные науки. М.: Высшая школа, 2003.
Стариченко Б.Е. Теоретические основы информатики. М.: Горячая линия - Телеком, 2003.
Степанов А.Н. Информатика. 6 издание, СПб.: Питер, 2010
Степанов А.Н. Курс информатики для студентов информационно-математических специальностей, СПб.: Питер, 2018
09.11.2021
Обмен информацией — процесс передачи информации одним объектом (субъектом) и ее
09.11.2021
Обмен информацией — процесс передачи информации одним объектом (субъектом) и ее
Обработка информации — упорядоченный процесс ее целесообразного преобразования.
Хранение информации — поддержание информации в таком виде, который обеспечивает ее выдачу в нужном виде и в нужное время.
Обмен (прием или передача), обработка и хранение информации — одна из самых важных сторон жизнедеятельности любых живых организмов
Носитель информации — любая материальная среда, служащая для ее хранения или передачи
Человек на протяжении всей своей жизни постоянно, ежечасно, ежеминутно сталкивается с необходимостью принимать, передавать, обрабатывать и хранить информацию.
Тема 1. Роль информации в живой природе, жизни человека и общественном развитии.
09.11.2021
Тема 2. Основные этапы развития информационных технологий
Начальное состояние — информация хранится
09.11.2021
Тема 2. Основные этапы развития информационных технологий
Начальное состояние — информация хранится
Появление речи — самого совершенного в живой природе способа обмена информацией (1 000 000 лет назад).
Появление письменности — способа долговременного хранения информации (30 000 лет назад).
Технологией называется совокупность знаний о способах и средствах проведения производственных процессов, при которых происходит необходимое качественное изменение обрабатываемых объектов (techno ─ мастерство, log ─ учение, то есть учение о мастерстве, мастерство ─ искусство делать вещи) .
09.11.2021
Изобретение книгопечатания — способа тиражирования информации (середина XV века).
Печатный станок Гуттенберга
09.11.2021
Изобретение книгопечатания — способа тиражирования информации (середина XV века).
Печатный станок Гуттенберга
09.11.2021
Развитие средств механизации и автоматизации обработки информации (с начала XVI века).
09.11.2021
Развитие средств механизации и автоматизации обработки информации (с начала XVI века).
Арифмометр Лейбница
1500 г., Леонардо да Винчи, эскиз суммирующего устройства
1623 г., Вильгельм Шиккард, действующее суммирующее устройство
1641–1645 г.г., Блез Паскаль, суммирующая машина
1671–1674 г.г., Готфрид Лейбниц, арифмометр
09.11.2021
Развитие средств механизации и автоматизации обработки информации (с начала XVI века).
09.11.2021
Развитие средств механизации и автоматизации обработки информации (с начала XVI века).
Арифмометр В.Т. Однера XIX века и его потомок середины XX века арифмометр «Феликс М»
09.11.2021
Развитие средств механизации и автоматизации обработки информации (с начала XVI века).
09.11.2021
Развитие средств механизации и автоматизации обработки информации (с начала XVI века).
1801–1808г.г., Жозеф Жаккард, автоматический ткацкий станок
1822 г. Чарльз Бэббидж, описание «разностной» машины
1834 г., Чарльз Бэббидж, эскиз «аналитической» машины
1843 г., Ада Лавлейс, основы программирования, первая в мире программа для аналитической машины Беббиджа (расчет чисел Фиббоначи)
1887 г., Герман Холлерит, первый табулятор
1897 г., Герман Холлерит, основание фирмы Tabulating Machine Company, впоследствии IBM (International Business Machines)
Программа представляет собой план выполнения действий, записанный в специальной, понятной исполнителю действий форме.
09.11.2021
Перфокарта и перфолента середины XX века, прототипы использовались с начала XIX
09.11.2021
Перфокарта и перфолента середины XX века, прототипы использовались с начала XIX
Развитие средств механизации и автоматизации обработки информации (с начала XVI века).
09.11.2021
Электромеханические машины (конец XIX века).
1939–1941 г.г., Конрад Цузе, Германия, машина «Z-3», память
09.11.2021
Электромеханические машины (конец XIX века).
1939–1941 г.г., Конрад Цузе, Германия, машина «Z-3», память
1937–1944 г.г., Говард Айкен, фирма IBM, механическая машина «Марк-1»,
1947 г., Говард Айкен, фирма IBM, электромеханическая машина «Марк-2», умножение 0,7 секунд
1957 г., Н. И. Бессонов, СССР, электромеханическая машина «РВМ-1», умножение за 0,05 с., лучшая в мире релейная машина
Фрагмент машины «Марк-1»
Электромагнитное реле
(принципиальная схема)
09.11.2021
Электронные вычислительные машины (ЭВМ) или компьютеры, середина XX века
1937–1942 г.г., Дж. Атанасов
09.11.2021
Электронные вычислительные машины (ЭВМ) или компьютеры, середина XX века
1937–1942 г.г., Дж. Атанасов
Электронная лампа накаливания
09.11.2021
Электронные вычислительные машины (ЭВМ) или компьютеры, середина XX века
1943–1945 г.г. Пенсильванский
09.11.2021
Электронные вычислительные машины (ЭВМ) или компьютеры, середина XX века
1943–1945 г.г. Пенсильванский
Машина ЭНИАК
09.11.2021
Электронные вычислительные машины (ЭВМ) или компьютеры, середина XX века
1944–1945 г.г. Джон
09.11.2021
Электронные вычислительные машины (ЭВМ) или компьютеры, середина XX века
1944–1945 г.г. Джон
1949 г. М. Уилкс, Великобритания, первая электронная машина с хранимой программой «EDSAC» (Electronic Delay Storage Automatic Calculator). С этой машины принято вести отсчет первого поколения компьютеров.
1947–1951 г.г., С.А. Лебедев, СССР, машина МЭСМ
Середина .60 годов — появление науки информатика.
Лампа накаливания Транзисторы Интегральные схемы
09.11.2021
1969 г. , первые элементы будущей глобальной сети Internet.
1974 г., первый
09.11.2021
1969 г. , первые элементы будущей глобальной сети Internet.
1974 г., первый
1981 г. , первый персональный компьютер модели IBM PC
2006 г., суперЭВМ Blue Gen/L – 280 триллионов операций в секунду
2018 г. суперЭВМ Summit – 200 000 триллионов операций в секунду
2021 г. суперЭВМ Fugaki – 442 000 триллионов операций в секунду (442 петафлопса), 7 630 848 ядер. Пиковая скорость простых расчётов 2 000 000 триллионов (2 экзафлопса).
Переход человеческой цивилизации в информационный этап развития (конец XX — начало XXI века)
09.11.2021
Важнейшей характеристикой компьютера является его быстродействие (скорость вычислений, производительность, мощность), которое
09.11.2021
Важнейшей характеристикой компьютера является его быстродействие (скорость вычислений, производительность, мощность), которое
09.11.2021
Информатика представляет собой фундаментальную естественную науку о структуре и общих свойствах
09.11.2021
Информатика представляет собой фундаментальную естественную науку о структуре и общих свойствах
Базовые понятия информатики:
Информация.
Информационная (математическая) модель.
Алгоритм.
Электронная вычислительная машина (компьютер).
Фундаментальной считается наука, изучающая наиболее общие объективные законы природы и общества, осуществляющая теоретическую систематизацию знаний о действительности. Это наука понятия, методы, законы и выводы которой имеют значение для большого круга других научных дисциплин.
09.11.2021
Основными научными дисциплинами, относящимися к теоретической информатике, являются:
дискретная математика, дающая математическую
09.11.2021
Основными научными дисциплинами, относящимися к теоретической информатике, являются:
дискретная математика, дающая математическую
теория информации, изучающая общие свойства информации, а также закономерности, управляющие её рождением, развитием и уничтожением. К теории информации также относятся вопросы передачи информации по различным каналам связи;
теория кодирования, в задачу которой входит изучение способов представления (кодирования) в компьютерах различных типов информации (текстовой, графической, звуковой и т.д.) с целью обеспечения её надёжного хранения и передачи;
теория алгоритмов, в задачи которой входит исследование общих свойств алгоритмов, а также способов их представления. Кроме того, к задачам теории алгоритмов относятся доказательство отсутствия алгоритмов решения для конкретных задач (доказательство их алгоритмической неразрешимости);
теория сложности алгоритмов, которая включает в себя асимптотический анализ сложности алгоритмов, классификацию алгоритмов в соответствии с классами сложности, разработка критериев сравнительной оценки качества алгоритмов и т. п.;
09.11.2021
теория систем, занимающаяся изучением общих свойств, видов и типов систем; а
09.11.2021
теория систем, занимающаяся изучением общих свойств, видов и типов систем; а
теория автоматов, дающая основу для создания программных систем, управляющих работой различных автоматических устройств, таких как, например, банкоматы, торговые автоматы и т.д.;
теория формальных языков и трансляторов, занимающаяся изучением вопросов создания языков программирования и их трансляции;
реляционная алгебра, являющаяся основой построения баз данных;
криптография, служащая теоретическим фундаментом для построения систем защиты программ и данных.
К области прикладной информатики относятся следующие разделы и дисциплины:
архитектура компьютеров;
операционные системы;
языки программирования и методы трансляции;
технологии программирования;
информационные системы и технологии;
09.11.2021
системное программное обеспечение;
прикладное программное обеспечение;
базы данных и системы управления базами
09.11.2021
системное программное обеспечение;
прикладное программное обеспечение;
базы данных и системы управления базами
базы знаний;
искусственный интеллект;
компьютерная графика;
распределенные системы;
параллельные системы;
компьютерные сети и интернет;
безопасность информационных систем;
вирусология.
09.11.2021
Тема 3. Информация и сообщения
Информация (от лат. informatio разъяснение, изложение, осведомленность)
09.11.2021
Тема 3. Информация и сообщения
Информация (от лат. informatio разъяснение, изложение, осведомленность)
(Большой энциклопедический словарь, 1990 г.).
Информация есть объективное отражение реального мира, атрибут материи, отображающий ее структуру. Эволюционный ряд познания материи, природы, форм проявления материи: вещество — энергия — информация
Общепринятое понятие информации:
Философское понятие информации:
Основоположник кибернетики Норберт Винер говорил об информации так: «Информация есть информация, а не материя и не энергия». То есть, по его мнению, информация относится к фундаментальным понятиям, которые не сводятся к каким-либо другим.
09.11.2021
Существует большое количество других трактовок информации. Однако большинство учёных и специалистов
09.11.2021
Существует большое количество других трактовок информации. Однако большинство учёных и специалистов
Математически строго определить понятие «информация» невозможно, поскольку по своей сути оно относится к так называемым первичным, неопределяемым понятиям.
В математике и в других науках существуют такие понятия, дать строгое определение которым принципиально невозможно. К ним относятся, например, понятия «множество», «точка» и некоторые другие. Любая попытка каким-либо образом определить их сведется к использованию синонимов, которые в свою очередь окажутся неопределёнными.
В рамках предмета информатика предлагается опираться на следующее объяснение, трактовку понятия информация:
Под информацией понимается отображение в сознании человека полученных им сведений (фактов, данных).
09.11.2021
Самым характерным свойством информации, существенно отличающим это понятие от таких базовых
09.11.2021
Самым характерным свойством информации, существенно отличающим это понятие от таких базовых
В соответствии с приведённой выше трактовкой информации как «отображения в сознании человека» для её появления необходим субъект, получающий информацию — получатель информации.
Очевидно, должен существовать также объект или субъект, передающий её — источник информации. Следует заметить, что источник и получатель информации могут совпадать.
Получателем информации может быть только субъект — одушевлённая сущность — человек. А вот источником информации может быть как субъект, так и любой объект — неодушевленная сущность — техническое устройство, природный или искусственный объект, явление.
09.11.2021
Источник и получатель информации могут быть разделены как в пространстве, так
09.11.2021
Источник и получатель информации могут быть разделены как в пространстве, так
Рассматривать случай одновременного нахождения источника и получателя информации в одной и той же точке пространства бессмысленно.
Если имеется разделение во времени, то необходимо организовать хранение информации, а если имеется разделение в пространстве, то её передачу.
В любом случае, как для хранения, так и для передачи необходим некоторый материальный носитель информации, с помощью которого она попадает от источника к получателю.
В качестве носителя может быть использована бумага, на которой что-либо написано, колебания воздуха, передающие устную речь или музыку, электромагнитные колебания, передающие изображения и т.д.
Кроме того, при передаче информации её носитель должен переместиться в пространстве из точки передачи в точку приёма через некоторую материальную среду, которую принято называть каналом связи.
09.11.2021
Информация попадает к её получателю в результате контакта материального носителя информации
09.11.2021
Информация попадает к её получателю в результате контакта материального носителя информации
Результатом такого контакта является осознание, выявление человеком смысла принятой информации. Например, один человек слышит произнесённые другим человеком слова и понимает, где и когда должна произойти встреча.
Это понимание, которое формируется, фиксируется в сознании человека и есть принятая им информация. Это понимание, собственно говоря, имеется в виду в приведенной выше трактовке понятия «информация», которая представляет собой некоторое «отображение в сознании человека».
Из сказанного выше вытекает, что информация существует только в сознании её получателя и только в процессе её получения, её осознания, выявления её смысла.
Спустя некоторое время принятая информация либо безвозвратно теряется (человек забывает полученные сведения), либо переходит в его знания
Отметим, что принятая информация в общем случае может оказаться неточной, неполной, искаженной или вообще ложной. Поэтому её необходимо ещё сопоставить с реальным миром, проверить на соответствие фактической ситуации
09.11.2021
Понимание подразумевает умение выявить смысл сообщения, которым представлена информация, и установить
09.11.2021
Понимание подразумевает умение выявить смысл сообщения, которым представлена информация, и установить
Итак, выявлены следующие основные аспекты информации:
материальное представление информации в виде носителя, который используется для её хранения и передачи, а также в процессе обработки;
происходящее в сознании человека субъективное, нематериальное понимание, которое включает в себя:
осознание смысла, значения полученного;
проверку на соответствие выявленного содержания, смысла реальному миру, фактической ситуации.
09.11.2021
Таким образом, можно заметить, что вся сложность в использовании понятия «информация»
09.11.2021
Таким образом, можно заметить, что вся сложность в использовании понятия «информация»
Чтобы все-таки иметь возможность объективно исследовать свойства информации, связанные с её хранением и передачей, а также использовать неодушевленные устройства для её обработки, целесообразно отделить друг от друга субъективные и объективные аспекты информации.
В теории информации такое отделение основано на использовании дополнительного неопределяемого понятия «сообщение». Это создаёт возможность все материальные аспекты связывать с понятием «сообщение», а все субъективные — с понятием «информация».
Сообщение — это конкретная материальная форма представления информации
Информация — это абстрактный, нематериальный смысл, извлекаемый человеком из сообщения.
09.11.2021
Знания, а также отдельные систематизированные и не систематизированные факты, сведения, данные,
09.11.2021
Знания, а также отдельные систематизированные и не систематизированные факты, сведения, данные,
Сообщение — материальный носитель информации, информация — нематериальное содержание, смысл сообщения. Сообщение всегда конкретно и материально, информация абстрактна и нематериальна.
Слово «абстрактный» здесь означает, что при выявлении смысла сообщения человек полностью отвлекается от его конкретных особенностей — от способа получения (устно, письменно, в виде условного знака), от таких деталей как громкий или слабый звук, какими чернилами, на каком листе бумаги написано и т.д.
Итак, информация, извлеченная человеком из сообщения, и сообщение, несущее эту информацию, всегда связаны друг с другом. Информация не может быть получена человеком без приёма им некоторого материального сообщения.
09.11.2021
В связи с введением понятия сообщения следует ещё раз отметить принципиальный
09.11.2021
В связи с введением понятия сообщения следует ещё раз отметить принципиальный
Неодушевленные объекты могут работать только с сообщениями. Объекты — автоматические устройства, радио и телеприёмники, компьютеры и т.д. могут принимать, передавать и обрабатывать только сообщения, получить, передать, обработать и тем более осознать информацию они в принципе не могут.
Использование понятий «сообщение» и «информация» позволяет строгими научными методами изучать объективные свойства сообщений, совершенно не затрагивая при этом принципиально субъективные аспекты информации
При этом подходе изучение информации, как смысла принятого сообщения, а также её соответствия реальности выходит за рамки предмета информатика.
С этой точки зрения оказывается, что все рассмотренные примеры, которые трактовались как информация (наскальные рисунки, запахи, звуки, бумажные тексты, фотографии и т. д.), на самом деле представляют собой примеры сообщений, несущих человеку некоторую важную или же неважную для него информацию.
09.11.2021
В связи с уточнением терминологии в рамках предмета информатики и разграничением
09.11.2021
В связи с уточнением терминологии в рамках предмета информатики и разграничением
Термин «данные» в естественных и технических науках имеет используемый точный смысл:
Данными называются сообщения, представленные в формализованном виде, пригодном для использования в некотором техническом устройстве (измерительном приборе, компьютере и т.д.).
Формализованным называется представление, подчиняющееся точно сформулированной, исчерпывающе полной системе правил
09.11.2021
Содержание сообщения, его смысл и значение существенно зависит от получателя, от
09.11.2021
Содержание сообщения, его смысл и значение существенно зависит от получателя, от
Одно и то же сообщение, полученное разными людьми, может ими восприниматься по-разному, его важность и ценность для разных людей могут быть различными.
Это значит, что, во-первых, из одного и того же сообщения разные люди могут извлечь различную информацию.
И, во вторых, что для более важно для практики, одну и ту же информацию можно передать с помощью разных сообщений.
Таким образом, соответствие между информацией и сообщением, с помощью которого она передается, не является однозначным.
Этот важный момент можно трактовать по-другому, а именно, можно считать, что существует только одно сообщение, но применяются разные способы его записи, кодировки.
Это значит, что сообщение может быть без потери его смысла, то есть без потери заключенной в нём информации, представлено, зашифровано, закодировано разными способами.
09.11.2021
Особенно важна эта возможность для организации обработки произвольных сообщений с помощью
09.11.2021
Особенно важна эта возможность для организации обработки произвольных сообщений с помощью
Другими словами, преобразование сообщений в компьютерные данные может быть произведено без потери исходной информации.
В связи с выявленной неоднозначность возникает вопрос о способе, качестве и полноте извлечения информации из сообщения.
Анализ показывает, что способ выявления смысла сообщения (извлечения информации), может быть общепринятым, как например, в случае передачи сообщений на естественных языках, либо должны использоваться некоторые специальные правила, которые известны и отправляющей и принимающей сторонам.
Такие правила могут быть доступными любому человеку (например, правила дорожного движения), либо же они являются секретными и известными только узкой группе лиц (скажем, при применении специальных методов шифрования).
09.11.2021
Решающим фактором для обеспечения возможности извлечения информации из сообщения является знание
09.11.2021
Решающим фактором для обеспечения возможности извлечения информации из сообщения является знание
П р и х о д и н е м е д л е н н о
Пример сообщения:
Если сообщение передается на неизвестном слушателю языке или же если оно неизвестным образом зашифровано, его получатель не сможет извлечь из такого сообщения вообще никакой информации. При этом другие его получатели могут понять сообщение полностью или частично
09.11.2021
Математическая запись правил интерпретации сообщения:
где: s — конкретное сообщение, i —
09.11.2021
Математическая запись правил интерпретации сообщения:
где: s — конкретное сообщение, i —
использованное правило интерпретации сообщения
Язык интерпретации сообщений
Множество правил
Множество сообщений
Тройка множеств
называется информационной системой
В любом случае смысл сообщения выявляется с помощью некоторого правила, которое принято называть правилом интерпретации сообщений.
09.11.2021
Объективность — свойство информации, определяющее степень её зависимости от человека, объективность
09.11.2021
Объективность — свойство информации, определяющее степень её зависимости от человека, объективность
Свойства информации:
Объективность
Полнота
Достоверность
Адекватность
Доступность
Актуальность
Полнота — свойство информации исчерпывающим образом характеризовать отображаемый объект или процесс. Полнота информации определяет её достаточность для принятия того или иного решения, выполнения тех или иных действий.
Достоверность — это свойство информации не иметь скрытых ошибок, то есть искажений, о которых получателю ничего не известно.
Под адекватность информации понимается уровень ее соответствия реальному, процессу, явлению, объективному миру. Информация может быть достоверной, но недостаточно хорошо описывающей ситуацию, явление, объект, поскольку некоторые важные аспекты в ней могут отсутствовать.
09.11.2021
Актуальность — это способность информации соответствовать нуждам её получателя в некоторый
09.11.2021
Актуальность — это способность информации соответствовать нуждам её получателя в некоторый
Доступность — это свойство информации, характеризующее возможность её извлечения данным человеком из данного сообщения. Это мера возможности получения информации, которая определяется, во-первых, доступностью сообщения, а, во-вторых, доступностью способа извлечения информации.
Действия над сообщениями
Основные операции:
передача
прием
обработка
xранение
Дополнительные операции :
сбор
формализация
фильтрация
сортировка
архивация
защита
09.11.2021
,
Сбором сообщений (более привычная, но не совсем точная форма речи
09.11.2021
,
Сбором сообщений (более привычная, но не совсем точная форма речи
Формализация сообщений представляет собой их приведение к некоторой единой форме для обеспечения возможности сопоставления различных сообщений.
Фильтрация сообщений — это отсеивание помех, шумов, ненужных или пустых сообщений, что повышает их адекватность и достоверность,
Сортировкой сообщений называется процесс изменения порядка их следования, с целью размещения сообщений в порядке возрастания или убывания определенного признака или набора признаков.
Архивация сообщений это создание их резервных копий, обеспечивающих повышение надежности хранения и возможность восстановления сообщений, утраченных или искаженных по каким-либо причинам.
Защита сообщений это комплекс мероприятий, направленных на предотвращение их утраты, воспроизведения или изменения.
09.11.2021
Хранение сообщений связано с фиксацией некоторого состояния носителя, а передача связана
09.11.2021
Хранение сообщений связано с фиксацией некоторого состояния носителя, а передача связана
Однако организация хранения сообщений на любом носителе, обязательно связана с первичной передачей этого сообщения на носитель, во время которой сообщение некоторым образом фиксируется на нём. Таким образом сначала необходимо выяснить как происходит передача сообщений.
Передача сообщения всегда связана с необходимостью изменить носитель во времени или в пространстве, Изменение носителя можно понимать как любое изменение его состояния, то есть любое изменение его свойств, характеристик.
Отсюда следует, что передача сообщений с помощью носителя с неизменяющимися свойствами невозможна.
В теории связи и теории информации зафиксированные изменения во времени или в пространстве состояние, то есть свойств или характеристик наблюдаемого объекта или явления принято называть сигналом. При этом изменяющаяся характеристика объекта называется параметром сигнала.
Отметим, что на бытовом уровне термин «сигнал» достаточно часто означает некоторый кратковременный процесс (звук сирены, сигнальная ракета). В теории связи и теории информации сигнал может иметь любую длительность.
Итак, в общем случае сообщение представляет собой некоторую последовательность физических сигналов, зафиксированных тем или иным образом.
09.11.2021
Важно понимать, что передача сообщения всегда занимает некоторое время, происходит во
09.11.2021
Важно понимать, что передача сообщения всегда занимает некоторое время, происходит во
Под состоянием объекта, явления понимается некоторый набор его свойств, характеристик, значений параметров, которые, собственно говоря, и определяют состояние, жёстко связаны с ним.
Например, можно рассматривать следующие состояния человека: «стоит», «идёт», «бежит». Они отличаются друг от друга разными значениями одного параметра скорость тела.
Постоянное, неизменное значение параметра скорость тела или же его изменение в определённых границах означает, что текущее состояние человека не меняется. А изменение скорости с выходом за установленные границы приводит к переходу из одного состояния в другое.
09.11.2021
Под состоянием объекта или явления понимается набор стабильных значений группы параметров,
09.11.2021
Под состоянием объекта или явления понимается набор стабильных значений группы параметров,
Процессом (лат. processus — продвижение) называется последовательная смена состояний наблюдаемого объекта или явления во времени.
В качестве примера процесса, как смены состояний при изменении параметров, можно указать превращение жидкости в твёрдое тело при замерзании, или в газ при испарении. Такое изменение может быть вызвано внешним воздействием, например, нагреванием вещества или же внутренними причинами, например, некоторой химической реакцией, происходящей в веществе.
Информационным процессом называется изменение со временем содержания информации или представляющего информацию сообщения. К информационным процессам относятся, например, приём, передача и обработка сообщений.
09.11.2021
Все процессы делятся на две группы — стационарные и нестационарные
Стационарными
09.11.2021
Все процессы делятся на две группы — стационарные и нестационарные
Стационарными
Примеры стационарных процессов — постоянный, равномерный гул; синусоидальное колебание с постоянной амплитудой, фазой и частотой.
Передача сообщений с помощью стационарных процессов невозможна, для передачи могут быть использованы только нестационарные процессы.
Можно также выделить группы дискретных и непрерывных процессов.
У дискретных процессов все временные состояния чётко отделены друг от друга ненулевым отрезком времени, и для любого состояния можно указать одно или два соседних.
Соседними называются два последовательных состояния процесса, между которыми нет никаких других его состояний. Начальное и конечное состояние имеют ровно один соседний (последующий и предыдущий соответственно), а все остальные — ровно два соседних.
09.11.2021
Все возможные состояния дискретного процесса всегда могут быть перенумерованы целыми числами,
09.11.2021
Все возможные состояния дискретного процесса всегда могут быть перенумерованы целыми числами,
Часто говорят, что дискретный процесс представляет собой последовательную смену состояний объекта, системы, явления, которая происходит в так называемом дискретном времени.
Дискретное время представляет собой конечную или счётную последовательность временных отсчётов t∈{0, 1, 2,…}, в которые происходит переход дискретного процесса из одного состояния в другое, с ненулевыми промежутками времени между ними.
Моменты времени , в которые заданы или измерены значения параметра сигнала, принято называть отсчётами.
09.11.2021
09.11.2021
09.11.2021
Между любыми двумя соседними состояниями дискретного процесса всегда имеется ненулевой отрезок
09.11.2021
Между любыми двумя соседними состояниями дискретного процесса всегда имеется ненулевой отрезок
Происходящий за ненулевое время возврат процесса в некоторое исходное состояние является обязательным условием существования любого физически осуществимого дискретного процесса. Наличие этого ненулевого отрезка времени в любом дискретном процессе принципиально и неустранимо, так как оно является следствием фундаментальных законов природы
У непрерывных процессов между двумя любыми двумя состояниями всегда можно выделить любое количество промежуточных. К непрерывным процессам понятия соседних состояний неприменимо.
Для отдельных состояний непрерывных процессов можно говорить только о порядке их следования во времени — предшествующее или последующее состояние. Всегда можно найти два последовательных состояния процесса, которое отделены друга от друга сколь угодно маленьким временным отрезком.
Множество различных состояний непрерывного процесса несчётно (имеет мощность континуума).
Непрерывные процессы происходят в непрерывном времени, которое совпадает с физическим временем.
09.11.2021
Параметр сигнала, служащий для передачи сообщения, по определению представляет собой зависящую
09.11.2021
Параметр сигнала, служащий для передачи сообщения, по определению представляет собой зависящую
Изменение во времени значений параметра сигнала A естественно рассматривать как процесс, при этом значения функции f(t) в выбранные моменты времени являются его временными состояниями. Этот процесс может быть непрерывным или дискретным.
Это значит, что значения сигнала A=f(t) могут быть заданы в непрерывном времени, то есть в любой момент времени t из области его определения
T0≤ t ≤TN (непрерывный процесс) либо в дискретном времени, то есть только в некоторые выбранные моменты времени t0,t1,…,tN (дискретный процесс).
В первом случае сигнал называется непрерывным, а в втором ̶ дискретным.
Понятия непрерывности и дискретности процесса связаны с множеством, к которому принадлежит аргумент функции . Естественно распространить эти понятия и на множество значений параметра сигнала.
Так, если параметр сигнала A принимает любые значения из некоторого интервала Amin≤A≤Amax, то есть множество E его значений несчётно, то этот сигнал можно рассматривать как непрерывный по значению.
Если все значения параметра A принадлежат конечному множеству E={A0,A1,…AM} — такой сигнал естественно считать дискретным по значению.
09.11.2021
Итак, понятия непрерывности и дискретности относятся как к области определения —
09.11.2021
Итак, понятия непрерывности и дискретности относятся как к области определения —
непрерывный и по времени и по значению;
дискретный по времени и непрерывный по значениям;
непрерывный по времени, но дискретный по значениям;
дискретный и по времени и по значениям.
Сообщения, основанные на непрерывных сигналах называются непрерывными, сообщения, основанные на дискретных сигналах, называются дискретными.
Информация не обладает ни свойством непрерывности, ни свойством дискретности
09.11.2021
Непрерывные и дискретные сигналы
09.11.2021
Непрерывные и дискретные сигналы
09.11.2021
Следует отметить, что в связи с особенностями органов чувств человека некоторые
09.11.2021
Следует отметить, что в связи с особенностями органов чувств человека некоторые
Но слуховая система человека способна различать только 512 различных уровней громкости и 2048 различных уровней высоты звука.
Это означает, что любой звуковой сигнал после его приёма и обработки органами слуха человека фактически становится дискретным по значению параметра сообщением. Аналогичными свойствами «естественной дискретности» обладают и другие органы чувств человека.
Однако у органов чувств человека имеются и противоположные свойства, которые приводят к тому, что фактически дискретные сообщения воспринимаются им как непрерывные.
Например, на неспособности зрительной системы человека различать более 24-x последовательно сменяемых в течение одной секунды изображений одного и того же объекта основано кино. Если изображения предъявлять со скоростью, например, 20 кадров в секунду, то они будут восприниматься сознанием человека как отдельные быстросменяемые кадры, а если со скоростью 24 или более — как одно непрерывное, которое создает в сознании впечатление естественного движения объектов съемки.
09.11.2021
Преобразование сообщений
Преобразования вида N1→N2 используются в самых разных технических устройствах, таких
09.11.2021
Преобразование сообщений
Преобразования вида N1→N2 используются в самых разных технических устройствах, таких
Остальные преобразования могут быть выполнены без потери информации
Преобразования вида D1→D2 фактически являются разновидностью обработки дискретных сообщений. Эти преобразования в зависимости от используемого способа могут быть проведены как с потерей, так и без потери информации.
Преобразование N1→N2 всегда сопровождается потерей информации. Это принципиальное и неустранимое обстоятельство, вытекающее из самой природы непрерывных сообщений.
Преобразования вида N→D и D→N имеют большое значение для организации обработки непрерывных сообщений с помощью компьютера.
09.11.2021
Получение по непрерывному сообщению соответствующего ему дискретного называется дискретизацией, а получение
09.11.2021
Получение по непрерывному сообщению соответствующего ему дискретного называется дискретизацией, а получение
Развертка сигнала по времени
Квантование сигнала по уровню
09.11.2021
Квантованный по уровню и развернутый по времени
─ дискретный сигнал
Вообще говоря,
09.11.2021
Квантованный по уровню и развернутый по времени
─ дискретный сигнал
Вообще говоря,
Увеличивая значения N и K можно уменьшить потерю информации. Но возможно ли осуществить дискретизацию вообще без её потери?
09.11.2021
В математическом анализе в теории рядов Фурье доказывается, что удовлетворяющая
09.11.2021
В математическом анализе в теории рядов Фурье доказывается, что удовлетворяющая
где ak, ωk и φk — амплитуда, круговая частота и фаза k-ой синусоиды.
Переход от исходной функции к её представлению в виде такой суммы принято назвать преобразованием Фурье, а отдельные слагаемые — гармониками.
Теория рядов Фурье является важным инструментом для решения задач, связанных с преобразованиями сообщений вида D→N. Дело в том, что параметры гармоник (синусоид) — коэффициенты ak и φk находятся по вычисленным или измеренным дискретным отсчётам сигнала с помощью довольно простых соотношений, а частоты ωk однозначно связаны с периодом или длительностью сигнала T – ωk=k× ω1 , ω1=2π/T.,,
Рассчитанные параметры любой гармоники можно использовать для воспроизведения соответствующего непрерывного синусоидального сигнала на звуковых колонках компьютера. Одновременное воспроизведение колонками всех гармоник представляет собой их суммирование, то есть это непрерывный сигнал (речь, музыка и т.д.). Так происходит восстановление сигнала по его отсчётам, то есть преобразование дискретного сигнала в непрерывный.
09.11.2021
Теорема отсчетов В.А. Котельникова (1933 год).
Непрерывный сигнал можно полностью отобразить и
09.11.2021
Теорема отсчетов В.А. Котельникова (1933 год).
Непрерывный сигнал можно полностью отобразить и
С другой стороны, для преобразований вида N→D, анализ частот гармонических составляющих суммы позволяет выбрать количество отсчётов, необходимое для того, чтобы выполнить дискретизацию без потери информации.
В общем случае суммы в разложении Фурье содержат счётное количество слагаемых, но во многих практически важных частных случаях их количество оказывается конечным и, следовательно, ограниченным. Например, речь человека не содержит частот больших, чем fmax =4000 герц.
Сигналы, создаваемые любыми реальными техническими устройствами, также имеют ограниченный набор гармоник, то есть существует конечная частота fmax такая, что все ωk≤ωmax.
09.11.2021
При дискретизации аналогового сигнала выбранное количество отсчётов на одну секунду длительности
09.11.2021
При дискретизации аналогового сигнала выбранное количество отсчётов на одну секунду длительности
Теорема В.А. Котельникова дает рекомендации по выбору необходимого количества отсчётов для выполнения развёртки сигнала во времени. Но для полной дискретизации необходимо выполнить ещё и квантование сигнала по уровню.
Например, для точной передачи речевого сигнала с максимальной частотой 4 000 Гц при его развертке следует выбрать частоту дискретизации не менее 8 000 отсчётов в секунду (8 килогерц).
Для качественного воспроизведения звукозаписей с помощью компьютера в настоящее время используются частоты дискретизации 44 килогерца и более. Это связано с тем, что слуховая система человека не воспринимает частоты выше, чем 20 000–22 000 герц. Следовательно, частота дискретизации в 44 000 герц сохраняет для человека все слышимые им звуки в неискажённом виде.
Так, для квантования звука можно ограничиться 512-ю уровнями громкости, поскольку слуховая система человека большее количество уровней просто не воспринимает.
А при квантовании изображений для естественного восприятия цвета следует выделять не менее чем 224 = 16 777 216 цветовых градации, которые способны распознать органы зрения человека.
09.11.2021
С точки зрения информатики принципиальная разница между непрерывными и дискретными сигналами
09.11.2021
С точки зрения информатики принципиальная разница между непрерывными и дискретными сигналами
НАБОРЫ ЗНАКОВ И АЛФАВИТЫ
Так при квантовании сигнала, за его уровнями закреплены знаки {A0, A1,…,AK}
С учётом того, что параметр изображённого на этих рисунках сигнала может принимать всего десять различных значений можно было бы выбрать какие-либо другие наборы знаков, например, {0, 1, 2, …,9} или {а, б, в, …, и}
Набором знаков называется конечное множество объектов, выбранных для закрепления за значениями параметра (уровнями) дискретного сигнала. Знаком называется любой элемент этого множества.
09.11.2021
Если сообщение имеет форму письма, то знаками являются графемы, в
09.11.2021
Если сообщение имеет форму письма, то знаками являются графемы, в
Природа знаков, выбираемых для обозначений уровней сигналов, может быть любой: буквы, цифры, отдельные звуки, жесты, рисунки, сигналы светофора, условные знаки на чертежах и топографических картах, знаки дорожного движения, нотные знаки, знаки зодиака, знаки игральных карт и т.д.
Удобно выбирать знаки так, чтобы каждому уровню сигнала соответствовал ровно один знак, и при этом разным уровням соответствовали разные знаки. Другими словами, чтобы между множеством уровней сигнала и множеством знаков имело место взаимно однозначное соответствие (биекция).
Тогда по любому заданному знаку можно однозначно определить соответствующий ему уровень сигнала, и, наоборот, по заданному уровню однозначно определить соответствующий ему знак. В чём недостаток такого подхода?
09.11.2021
Поэтому для практического использования выбираются наборы, состоящие из относительно небольшого количества
09.11.2021
Поэтому для практического использования выбираются наборы, состоящие из относительно небольшого количества
При этом сохраняется сформулированное выше требование: каждому уровню должна соответствовать только одна комбинация знаков, при этом разным уровням должны соответствовать различные их комбинации.
Важнейшим моментом в использовании описанного подхода является то, что один и тот же специально выбранный набор знаков может быть использован для обозначения множеств уровней самых разных по своей физической природе сигналов.
Это создает практическую возможность для представления дискретных сообщений произвольной природы в технических устройствах, предназначенных для их хранения или обработки.
09.11.2021
Множество знаков, в котором определен линейный порядок называется алфавитом.
.
Примеры
09.11.2021
Множество знаков, в котором определен линейный порядок называется алфавитом.
.
Примеры
Алфавит, как правило, задается прямым перечислением всех входящих в него знаков. При этом знаки перечисляются в порядке их следования. Примеры алфавитов:
{а, б, в, г, д, е, ё, ж, з, и, й, к, л, м, н, о, п, р, с, т, у, ф, х, ц, ч, ш, щ, ъ, ы, ь, э, ю, я} — 33 буквы русского языка;
{a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z} — 26 букв английского языка;
{0, 1, 2, …, 9} — 10 цифр арабской десятичной системы счисления;
{·, ─} — два знака азбуки Морзе, которая ранее широко использовалась для радиосвязи и т.д.
Поскольку при передаче дискретных сообщений параметр сигнала должен меняться, очевидно, что минимальное количество знаков в алфавите равно двум. Такие алфавиты называются двоичными.
Так как этот код используется для хранения и обработки данных в компьютерах — вычислительных машинах — его называют ещё и машинным кодом.
09.11.2021
Пусть A={α1, α2,…αN}— используемый алфавит, αi∈A, i=1,2,…,N — его знаки,N —
09.11.2021
Пусть A={α1, α2,…αN}— используемый алфавит, αi∈A, i=1,2,…,N — его знаки,N —
По определению любое дискретное сообщение S представляет собой некоторую последовательность квантованных отсчётов, а каждый отсчёт можно обозначить некоторым знаком αj∈A.
Следовательно, дискретное сообщение можно представить, записать в виде последовательности знаков, принадлежащих алфавиту: S=a1,a2,…,am, где aj— очередной знак сообщения, являющийся одним из знаков алфавита aj∈A, j=1,2,…,m; m — количество знаков в сообщении.
В такой записи запятые, которые отделяют знаки последовательности друг от друга, чаще всего пропускаются и тогда сообщение принимает вид S=a1a2…am
Например, последовательность знаков русского алфавита S= и, н, ф, о, р, м, а, ц, и, я или в более кратком виде S= информация — является сообщением, состоящим из m=10 знаков.
А последовательность из m= 8 знаков: 0, 0, 1, 0, 1, 0, 0, 1, 1, или в более наглядном виде «00101001» записана в двоичном алфавите A={0,1}
09.11.2021
Любое дискретное сообщение можно представить в виде последовательности знаков из некоторого
09.11.2021
Любое дискретное сообщение можно представить в виде последовательности знаков из некоторого
Количество знаков m, из которых состоит цепочка α называется длиной цепочки. Длину цепочки обозначают |α|. Например, |информация|=10, а |00101001 |=8.
Допускаются цепочки нулевой длины, такие цепочки называются принято называть пустыми. Пустые цепочки обычно обозначаются буквой λ, |λ|=0.
09.11.2021
Правило, описывающее соответствие между знаками первичного алфавита и знаками или сочетаниями
09.11.2021
Правило, описывающее соответствие между знаками первичного алфавита и знаками или сочетаниями
Кодирование сообщений
Исходный алфавит A1, в котором записано сообщение, называется первичным алфавитом. Целевой алфавит A2, в который преобразуется сообщение называется вторичным алфавитом.
Слова записанные в двоичном, шестнадцатеричном и некоторых других алфавитах, принято называть кодом (двоичное слово ─ двоичный код и т.д.).
Дискретное сообщение исходя из технических соображений или из особенностей органов чувств человека, участвующих в приеме или передаче сообщений, разбивают на конечные подпоследовательности знаков, которые принято называть словами. Количество знаков в слове называется длиной слова. Если все слова языка имеют одно и то же количество знаков, то такие слова называются n-разрядными (n ─ длина слова)
Совокупность всех используемых в преобразовании соответствий называется кодовой таблицей. Для обеспечения необходимых свойств операции кодирования между знаками первичного и знаками или группами знаков вторичного алфавитов должно быть установлено взаимно однозначное соответствие (биекция), при этом кодовая таблица представляет собой способ задания этого соответствия.
09.11.2021
Пример таблицы кодирования:
Последовательность знаков вторичного алфавита A2, которыми представлен один знак
09.11.2021
Пример таблицы кодирования:
Последовательность знаков вторичного алфавита A2, которыми представлен один знак
09.11.2021
Кодированием называется последовательность действий по переводу сообщения из первичного во вторичный
09.11.2021
Кодированием называется последовательность действий по переводу сообщения из первичного во вторичный
Существует огромное количество способов построения кодов при выбранных или заданных первичном и вторичном алфавитах. Поэтому возникает проблема выбора оптимального, то есть в некотором смысле наилучшего кода.
Декодирование представляет собой операцию, обратную кодированию, то есть это последовательность действий по восстановлению сообщения в исходном алфавите по его виду во вторичном.
Операции кодирования и декодирования считаются обратимыми, если их последовательное применение обеспечивает восстановление исходной информации без потерь.
Кодером называется устройство, обеспечивающее выполнение операции кодирования. Декодером называется устройство, обеспечивающее выполнение операции декодирования.
Оптимальным называется кодирование сообщения, результат которого обеспечивает минимально возможное для используемых алфавитов и передаваемого сообщения время передачи по каналам связи и минимальные требования к памяти при хранении.
Эффективным считается кодирование с результатом достаточно близким к оптимальному. Эффективное кодирование применяется в тех случаях, когда для получения оптимального кода требуются значительные временные ресурсы или не хватает каких-либо данных для его построения.
09.11.2021
Задачи эффективного и оптимального кодирования часто решаются с помощью сжатия сообщений.
09.11.2021
Задачи эффективного и оптимального кодирования часто решаются с помощью сжатия сообщений.
Различают два вида сжатия — без потери информации и с потерей информации.
Сжатие без потери информации применяется при кодировании текстовых и числовых видов данных, то есть там, где потеря информации недопустима, поскольку может привести к неправильному пониманию текста или к вычислениям с непредсказуемым результатом.
Сжатие с потерей информации широко применяется при кодировании графики, звука и видео, так как в этих случаях возможно удаление некоторой части данных без существенных отличий для восприятия человеком оригинала от полученного результата сжатия. В основе применения сжатия с потерями лежит естественное квантование органами слуха и зрения человека сообщений, получаемых из внешней среды.
Выбор оптимального кода это технический и экономический фактор, поскольку касается затрат (и не только временных) на выполнение кодирования и декодирования, на хранение и на передачу кода из одного места в другое и т.д. Естественно желание сделать такие затраты минимально возможными.
Однако свести их к нулю в принципе невозможно. Существующие границы эффективности кодирования, которые могут быть достигнуты, а также условия, при выполнении которых эти границы достижимы, определены в работах К. Шеннона, сформулировавшего и доказавшего ряд базовых теорем кодирования.
09.11.2021
При хранении в компьютере любой текст (компьютерная программа, документ, статья) рассматривается
09.11.2021
При хранении в компьютере любой текст (компьютерная программа, документ, статья) рассматривается
Кодирование текстовых данных
Причем промежуток между отдельными словами — пробел, переход на следующую строчку, переход на следующую страницу — также могут рассматриваться как специальные знаки.
Таким образом, любой текст можно считать дискретным сообщением, то есть последовательностью знаков, принадлежащих некоторому алфавиту, который возможно состоит из достаточно большого количества знаков.
Текстовые данные являются одной из наиболее простых, но при этом чаще всего встречающейся разновидностью данных.
Существует множество различных двоичных кодов, которые используются в вычислительной технике для представления текстов. В целом эти способы можно разбить на две группы.
Способы кодирования, опирающиеся на знание частот знаков первичного алфавита, называются статистическими. Способы кодирования, которые используют списки неоднократно встречающихся в сообщении подпоследовательностей знаков, называются словарными.
09.11.2021
Передача кодов сообщения в канал всегда происходит во времени. При этом
09.11.2021
Передача кодов сообщения в канал всегда происходит во времени. При этом
На рисунке изображена ситуация, в которой элементарные сигналы — импульсы, соответствующие цифре «ноль», имеют одинаковую длительность с импульсами, передающими цифру «единица».
В общем случае элементарные сигналы, передающие разные цифры, могут иметь различную длительность. В связи с этим выделяются коды с равными и с неравными длительностями элементарного сигнала.
09.11.2021
длительность (одинаковая или разная) элементарных сигналов, которые соответствуют знакам 0 и
09.11.2021
длительность (одинаковая или разная) элементарных сигналов, которые соответствуют знакам 0 и
длина кода (одинаковая или разная) для разных знаков первичного алфавита (равномерный и неравномерный коды).
выделение отдельного кода для каждого знака первичного алфавита (алфавитное кодирование) или возможны коды для сочетаний знаков (блочное кодирование).
Определяющие характеристики способов кодирования:
Кодирование называется равномерным, если все коды, закрепляемые за знаками первичного алфавита, имеют одну и ту же длину, то есть состоят из одинакового количества двоичных цифр. Кодирование называется неравномерным, если разные коды имеют различные длины.
Кодирование называется алфавитным, если за каждым знаком первичного алфавита закрепляется отдельный код. Кодирование считается блочным, если отдельные коды выделяются группам (блокам) знаков первичного алфавита.
09.11.2021
Пример: Азбука Морзе – статистический, алфавитный, неравномерный код с неравными длительностями
09.11.2021
Пример: Азбука Морзе – статистический, алфавитный, неравномерный код с неравными длительностями
В 1838 году С. Морзе предложил систему кодирования для первой телеграфной линии, которая строилась между городами Балтимор и Вашингтон (США).
Эта система в нашей стране во время Первой мировой войны 1914–1918 г.г. получила название «морзянки» или «азбуки Морзе». Фактически азбука Морзе была первым цифровым способом передачи сообщений.
С. Морзе при разработке своей системы кодирования исходил из того, что энергозатраты и общая длительность передачи сообщения должны быть минимальными. Поэтому в азбуке Морзе буквы, которые чаще употребляются в английском языке, имеют более короткие коды, а встречающиеся реже — имеют более длинные коды.
В предложенной им системе каждой букве английского алфавита, а также десятичным цифрам поставлен в соответствие код, представляющий собой некоторую комбинацию длинных (тире) и коротких (точек) импульсов электрического тока по телеграфным линиям. Для передачи букв других алфавитов, в том числе русских букв использовались коды сходных латинских букв, а для букв, не имеющих латинских аналогов, выбирались незанятые комбинации точек и тире.
09.11.2021
Азбука Морзе для русского алфавита
09.11.2021
Азбука Морзе для русского алфавита
09.11.2021
За единицу длительности импульса в системе С. Морзе принимается длительность передачи
09.11.2021
За единицу длительности импульса в системе С. Морзе принимается длительность передачи
Чтобы при приёме можно было различить два соседних знака, входящих в код одной буквы или цифры, между ними включается пауза с длительностью t передачи точки.
А для разграничения кодов двух соседних букв сообщения делается пауза длительностью 3t. Промежуток между соседними словами задается паузой длительность 6t.
Базовая длительность времени передачи точки t зависит от индивидуального «подчерка» радистов, от их возможностей и опыта. Радист средней квалификации может вести передачу/приём со скоростью 60–100 знаков текста в минуту.
В среднем на код одного знака требуется около 6t. Отсюда базовая единица длительности t равна примерно 0,1–0,15 секунды.
Формирование и передача кодов с неравными длительностями элементарных сигналов с помощью технических средств наталкивается на целый ряд трудностей.
В связи с этим в настоящее время такие системы кодирования в технических системах, как правило, не применяются. У всех рассматриваемых в дальнейшем кодов длительности элементарных сигналов одинаковы.
09.11.2021
Записать алфавит азбуки Морзе.
Алфавит азбуки Морзе фактически состоит не из двух,
09.11.2021
Записать алфавит азбуки Морзе.
Алфавит азбуки Морзе фактически состоит не из двух,
Азбука Морзе более века была важнейшей системой кодирования, повсеместно используемой в телеграфной связи, а впоследствии и в радиосвязи. В настоящее время её использование ограничено в основном любительскими сферами.
09.11.2021
Равномерное алфавитное кодирование
Развитие средств связи и компьютерной обработки данных привело
09.11.2021
Равномерное алфавитное кодирование
Развитие средств связи и компьютерной обработки данных привело
Это объясняется более простой технической реализацией передачи равномерных кодов. Кроме того, обработка равномерных кодов выполняется значительно проще и быстрее чем обработка неравномерных.
В связи с этими особенностями при обычной работе с текстовыми данными, которая занимает значительную долю времени компьютерных систем, применяется алфавитное равномерное кодирование.
09.11.2021
Этот код стал основой для международного телеграфного кода Бодо.
Исторически первым
09.11.2021
Этот код стал основой для международного телеграфного кода Бодо.
Исторически первым
09.11.2021
Международный компьютерный код ASCII
Кроме кода Бодо и других кодов, построенных на
09.11.2021
Международный компьютерный код ASCII
Кроме кода Бодо и других кодов, построенных на
К середине XX века в информационных системах разных стран мира использовалось более 60 различных способов кодирования алфавитов естественных языков, так что обмен сообщениями между различными компьютерами был затруднён или вообще невозможен.
В связи с этим остро встала проблема стандартизации способов кодирования текстовых данных. В 1963 году был опубликован первый вариант равномерного алфавитного кода ASCII (от англ. American Standard Code for Information Interchange — американский стандартный код для обмена информацией), который стал логическим развитием кода Бодо.
Однако фактическим международным стандартом это код стал только после 1981 года, когда кодировка ASCII была использована для представления текстов в программах для персональных компьютеров, выпущенных фирмой IBM.
09.11.2021
В основе выбора системы равномерного кодирования для представления текстов в компьютерах
09.11.2021
В основе выбора системы равномерного кодирования для представления текстов в компьютерах
Группа из 8 бит, используемая как единое целое, например, для кодирования одного символа текста, называется байтом (byte ─ BinarY TErm).
Алфавит для представления текстов на естественном языке содержит: 52 латинских буквы, десятичные цифры, знаки препинания, математические знаки, специальные знаки и т.д., всего примерно 150 символов.
Исходя из теоретических соображений, это требует для представления любого знака исходного алфавита при равномерном алфавитном двоичном кодировании log2150 ≈ 7,2 знаков, то есть семи или восьми двоичных цифр.
Первоначально кодировка ASCII была семиразрядной, что позволяло выделить коды максимум 27 = 128 знакам. Но впоследствии было предложено использовать для кодирования одного знака группу из 8 двоичных цифр, что позволяет определить коды для 28 = 256 различных знаков первичного алфавита.
09.11.2021
В современном международном стандарте кодовой таблицы ASCII зафиксированы коды только для
09.11.2021
В современном международном стандарте кодовой таблицы ASCII зафиксированы коды только для
Неиспользованные в базовой части коды входят в расширение таблицы ASCII. Этими кодами в конкретных разновидностях кодировок можно распоряжаться достаточно произвольно. В частности, в разных странах мира такие расширения применяются для кодирования национальных алфавитов.
Для краткости речи расширения кодовой таблицы обычно называют просто кодовой таблицей (а иногда и кодовой страницей), с указанием некоторого дополнительного обозначения, например, говорят: «кодовая таблица Windows 1251», подразумевая под этим соответствующее расширение таблицы ASCII.
09.11.2021
Фрагмент ГОСТ альтернативной кодовой таблицы ASCII.
1 знак → 8 бит,
09.11.2021
Фрагмент ГОСТ альтернативной кодовой таблицы ASCII.
1 знак → 8 бит,
1000 10102
К ─ ГОСТ алтерн.
Љ ─ Windows1251
Универсальная кодировка
UNICODE (UNIversal CODE)
1 символ → 16 бит
216=65 536
09.11.2021
При кодировании текста каждому его знаку ставится в соответствие выбранный из
09.11.2021
При кодировании текста каждому его знаку ставится в соответствие выбранный из
И, следовательно, текст целиком занимает столько байтов, из скольких знаков он состоит (включая абсолютно все его знаки — пробелы, знаки препинания, специальные знаки перехода на новую строчку, на новую страницу и т. д.).
Понятно, что для представления текстовых данных, а в общем случае для кодирования любых сообщений, возможностей одного байта явно мало. Поэтому группы байтов объединяются для размещения в них кода отдельного слова, предложения или всего сообщения целиком.
Группа байт, совместно используемая для представления каких-либо данных, называется полем. Количество байтов в поле называется длиной поля.
09.11.2021
При хранении данных в памяти компьютера код одного знака занимает один
09.11.2021
При хранении данных в памяти компьютера код одного знака занимает один
Кроме того, когда речь идет о характеристике некоторого поля или участка памяти, используется ещё один термин длина поля памяти, которая также измеряется в байтах. Следует понимать, что понятия объем памяти и длина поля памяти представляют собой одну и ту же характеристику — количество байтов, из которых состоит (которые занимает в памяти) обсуждаемый объект.
09.11.2021
Объемные единицы измерения количества информации (система СИ)
09.11.2021
Объемные единицы измерения количества информации (система СИ)
09.11.2021
Текстовый формат определяет одну или несколько кодовых таблиц, которые используются для
09.11.2021
Текстовый формат определяет одну или несколько кодовых таблиц, которые используются для
Конкретный способ кодирования (исчерпывающе полный набор правил) той или иной разновидности информации в компьютере принято называть форматом данных.
В общем случае формат понимается как строго определенный, исчерпывающе полный набор правил.
TXT (TeXT — текст) основывается на одной из кодовых таблиц для представления символов и практически не содержит никаких элементов его оформления;
RTF (Rich Text Format — богатый текстовый формат), содержит совокупность стандартных возможностей по оформлению текстов;
DOC (DOCument — документ) содержит подавляющее большинство используемых в современной практике возможностей по оформлению текстов;
PDF (Portable Data Format ─ переместимый формат данных) универсальный формат, воспринимаемый на компьютерах любого типа
Некоторые текстовые форматы:
Понятие формата
09.11.2021
Тема 5. Кодирование числовых данных
Несмотря на то, что, запись любого числа
09.11.2021
Тема 5. Кодирование числовых данных
Несмотря на то, что, запись любого числа
Входящие в текст цифры и числа ̶ это обычные знаки алфавита, возможными действиями для которых являются сравнение (совпадает или не совпадает с искомым знаком) и замена одного знака другим (например, для исправления ошибки).
Однако над числами приходится выполнять разнообразные математические операции — сложение, вычитание, умножение и т. д.
Для них применяются специальные способы кодирования, которые обеспечивают возможность выполнения указанных операций непосредственно над кодами чисел, с получением математически правильного результата.
Основными разновидностями данных в информатике являются: текстовые, числовые, графические. Представление звуковых данных базируется на числовых, а видеоданных ─ на числовых и графических.
Для обсуждения этих способов потребуются некоторые понятия, связанные с системами счисления.
09.11.2021
Системы счисления
Система счисления представляет собой совокупность правил записи и наименования чисел,
09.11.2021
Системы счисления
Система счисления представляет собой совокупность правил записи и наименования чисел,
Каждая система счисления использует для изображения чисел свой собственный набор знаков — алфавит.
Десятичный алфавит: {0,1,2,3,4,5,6,7,8, 9}
Двоичный алфавит: {0,1}
Шестнадцатеричный алфавит: {0,1,2,3,4,5,6,7,8, 9, A, B, C, D, E, F}
Алфавит римской системы счисления: {I,V,X,L,C,D,M}
Примеры алфавитов:
Любое число имеет название, значение и изображение, которое представляет собой последовательность знаков, используемую для записи числа.
Пример: различные изображения числа «девять»: IX, 1001, 11, 10, 9, и т.д.
09.11.2021
Количество знаков в алфавите системы счисления обычно отражается в ее названии:
09.11.2021
Количество знаков в алфавите системы счисления обычно отражается в ее названии:
Система счисления всего с одним знаком в алфавите называется унарной. Её свойства и правила использования существенно отличаются от всех остальных систем
Знаки, входящие в алфавиты систем счисления традиционно называются цифрами. Таким образом, знаки A, B, C, D, E и F, входящие в алфавит шестнадцатеричной системы счисления, считаются цифрами.
В общем случае различают непозиционные, позиционные и смешанные системы счисления.
В компьютерах для представления числовых данных применяются только позиционные системы счисления, в которых используется единый закон получения значения числа из изображающих его цифр.
В позиционных системах значение, которое отдельная цифра вкладывает в общее значение числа, зависит от ее положения (позиции) в ряду других цифр, изображающих число, а в непозиционных ̶ не зависит.
09.11.2021
Пусть
— алфавит некоторой позиционной системы счисления
Закон разложения по степеням
09.11.2021
Пусть
— алфавит некоторой позиционной системы счисления
Закон разложения по степеням
При использовании позиционных систем счисления позиции цифр в числе принято называть разрядами: разряд единиц, разряд десятков, разряд сотен и т.д.
Нумерация разрядов для целой части начинается с нуля и производится с возрастанием номеров справа налево, а нумерация для дробной части начинается с минус единицы и осуществляется в порядке убывания номеров слева направо.
Каждому разряду соответствует определенный зависящий от используемой системы счисления весовой коэффициент, на который умножается значение находящейся в этом разряде цифры. Это коэффициент в десятичной системе равен числу десять, которое возведено в равную номеру разряда степень.
Таким образом, для разряда единиц этот коэффициент равен единице, для разряда десятков — десяти, для разряда сотен — ста и т.д. Значение числа получается суммированием вкладов от каждой цифры, умноженной на соответствующий ее разряду весовой коэффициент.
09.11.2021
,
Целое число p, входящее в выражение, служащее для определения значения
09.11.2021
,
Целое число p, входящее в выражение, служащее для определения значения
Пример: x=52,128
=5×10+2+
Все входящие в выражение весовые коэффициенты равны pi — основанию системы счисления p в степени, равной номеру разряда i.
09.11.2021
Общий принцип изображения целых чисел в позиционных системах счисления
Процесс нумерации,
09.11.2021
Общий принцип изображения целых чисел в позиционных системах счисления
Процесс нумерации,
При переходе к очередному целому числу в текущий разряд записывается следующая цифра алфавита: после 0→1, после 1→2, и т.д..
После исчерпания всех возможностей по перебору цифр алфавита во всех уже используемых разрядах в них записывается младшая цифра 0, а в изображение числа слева добавляется еще один разряд, в который записывается вторая цифра алфавита — цифра «1». Например, в десятичной системе после 9 следует 10, после 99 — 100, после 999 следует 1000 и т.д. После чего возобновляется перебор цифр алфавита с самого младшего разряда числа: 100, 101, 102,… .
После завершения перебора всех цифр алфавита в последнем или в одном из внутренних разрядов числа и во всех предшествующих ему, в нём и во всех предыдущих разрядах (если они есть) записывается младшая цифра алфавита 0 и происходит переход к следующей цифре в следующем старшем разряде. Например, в той же десятичной системе после 19 следует 20, после 119— 120, после 1199 — 1200 и т.д. Затем перебор цифр алфавита возобновляется с самого младшего разряда.
Максимальное значение n - разрядных целых чисел в системе счисления с основанием p равно p n –1. Например, максимально возможное 4-х разрядное десятичное число 9999 равно 104–1.
В частности, максимально возможное n – разрядное целое двоичное число равно 2n –1.
09.11.2021
Двоичная система счисления
Запись целого неотрицательного десятичного числа в двоичной системе счисления
09.11.2021
Двоичная система счисления
Запись целого неотрицательного десятичного числа в двоичной системе счисления
09.11.2021
Шестнадцатеричная система счисления
09.11.2021
Шестнадцатеричная система счисления
09.11.2021
Шестнадцатеричная система счисления
09.11.2021
Шестнадцатеричная система счисления
09.11.2021
Переходы между системами счисления
Перевод целых чисел из десятичной системы в
09.11.2021
Переходы между системами счисления
Перевод целых чисел из десятичной системы в
Последовательно делить вначале заданное число, а затем полученные частные на основание P. Процесс деления продолжается до тех пор, пока очередное частное не окажется меньше P.
Последнее частное и остатки от делений записываются цифрами системы счисления с основанием P в порядке противоположном их получению.
200510 → 111110101012
2005
→
↓
1
1002
↓
0
→
501
↓
1
→
250
↓
0
→
125
↓
1
→
62
↓
0
→
31
↓
→
1
15
↓
1
→
7
↓
1
→
3
↓
1
→
1
Пример перевода в двоичную систему счисления
Пример перевода в шестнадцатеричную систему счисления
2005
⎜
⎯
⎯
16
1
−
16
⎯
40
2
−
32
⎯
5
85
−
80
⎯
5
⎜
⎯
⎯
16
112
−
⎯
13
7
710 → 7 16
13 10 → D 16
2005 10 → 7D5 16
09.11.2021
Перевод правильных дробей из десятичной системы в систему с основанием P.
09.11.2021
Перевод правильных дробей из десятичной системы в систему с основанием P.
Последовательно умножать вначале заданную дробь, а затем дробные части произведений на основание P. Процесс умножения продолжается до получения нулевой дробной части либо до достижения желаемой точности результата.
Целые части произведений записываются цифрами системы счисления с основанием P в порядке их получения как искомая дробная часть результата.
0,625
×
2
⎯
1,250
×
2
⎯
0,500
×
2
⎯
1,000
0,625 10 → 0,101 2
0,625
×
16
⎯
10,000
10 10→ A 16
0,625 10 → 0, A 16
09.11.2021
В теории погрешностей вычислений устанавливается, что погрешность вещественных чисел, полученных в
09.11.2021
В теории погрешностей вычислений устанавливается, что погрешность вещественных чисел, полученных в
Например, число 23,176 может быть получено как результат округления следующих чисел:
23,17648 ̶ погрешность равна: Δ=|23,176-23,17648|=0,00048
23,17589 ̶ погрешность равна: Δ=|23,176-23,17589|=0,00011
23,1757 ̶ погрешность равна: Δ=|23,176-23,1757|=0,0003
23,17629 ̶ погрешность равна: Δ=|23,176-23,17629|=0,00029
Отсюда Δ≤0,0005 или Δ≤1/2×10-3.
Пусть правильная дробь в системе счисления с основанием q содержит n цифр. Сколько цифр m в дробной части этого числа следует получить при переходе в систему счисления с основанием p?
При переходе из десятичной в двоичную (10→2):
q=10; p=2; m=n×log210, m=3,329 × n
09.11.2021
Перевод смешанных чисел из десятичной системы в систему с основанием P.
09.11.2021
Перевод смешанных чисел из десятичной системы в систему с основанием P.
Пример: 2005,62510
→ 111 1101 0101,1012
2005,62510 → 7D5,A16.
Перевод чисел из системы с основанием P в десятичную систему счисления
Записать число в виде разложения по степеням основания исходной системы счисления.
Заменить p-е цифры числа их десятичными эквивалентами.
Выполнить вошедшие в полученное выражение действия.
Пример: 111 1101 0101,1012; p=2
1×20+0×21+1×22+0×23+1×24+0×25+1×26+1×27+1×28+1×29+1×210+1×2–1+0×2–2 +1×2–3
1+22+24+26+27+28+29+210+2–1+2–3 =1+4+16+64+128+256+512+1024+1/2+1/8=2005,62510
Пример: 7D5,A16 ; p=16
5×160+D×161+7×162+A×16–1=5+13×16+7×256+10/16=2005,62510
Нужно осуществить раздельный перевод целой и дробной частей, а затем сложить полученные результаты.
09.11.2021
Переходы между двоичной и шестнадцатеричной системами счисления
p1=2, p2=16, p2=p14
Каждую цифру
09.11.2021
Переходы между двоичной и шестнадцатеричной системами счисления
p1=2, p2=16, p2=p14
Каждую цифру
09.11.2021
Переход из двоичной системы счисления в шестнадцатеричную
Разбить число на тетрады. Разбиение
09.11.2021
Переход из двоичной системы счисления в шестнадцатеричную
Разбить число на тетрады. Разбиение
Если в процессе разбиения на концах числа образуются неполные тетрады, их следует дополнить незначащими нулями.
Каждую тетраду заменить соответствующей шестнадцатеричной цифрой.
Пример:11111010101,1012
11111010101,101
111 1101 0101, 101
0
0
↓
5
↓
D
↓
7
↓
A
11111010101,1012 → 7D5,A16
09.11.2021
Переход из шестнадцатеричной системы счисления в двоичную
Чтобы перевести шестнадцатеричное число в
09.11.2021
Переход из шестнадцатеричной системы счисления в двоичную
Чтобы перевести шестнадцатеричное число в
Пример: 7D5,A 16
7 D 5, A
↓
0111
↓
1101
↓
0101
↓
1010
011111010101,1010
7D5,A16→11111010101,1012
→11111010101,101
09.11.2021
Действия в двоичной и шестнадцатеричной системах счисления
Таблица сложения двоичной системы счисления
0+0=0
1+0=1
0+1=1
1+1=(1)0
Сложение
09.11.2021
Действия в двоичной и шестнадцатеричной системах счисления
Таблица сложения двоичной системы счисления
0+0=0
1+0=1
0+1=1
1+1=(1)0
Сложение
101001011011,00112
111101010111,11112
+
Пример:
02
Перенос
(в «уме»):
1
Одноразрядное действие:
1+1= 0 и 1 переноса (в «уме»)
1+1+1= 1 и снова 1 переноса
1
1100110110011,00
09.11.2021
Таблица вычитания двоичной системы счисления
0 – 0 = 0
1 – 0
09.11.2021
Таблица вычитания двоичной системы счисления
0 – 0 = 0
1 – 0
1 – 1 = 0
10 – 1 = 1
Вычитание многоразрядных двоичных чисел производится также как и десятич-ных: осуществляется поразрядное вычитание с учетом возможности займа из старшего разряда. Если же уменьшаемое меньше вычитаемого и для старшего разряда выполнить заем неоткуда, то уменьшаемое и вычитаемое меняются местами, а к результату приписывается знак минус.
Пример:
1100110110011,00102
101001011011,00112
-
Одноразрядное действие:
0 – 1=
заем
10 – 1 = 1
12
0
0
1
111101010111,11
09.11.2021
Таблица умножения двоичной системы счисления
0×0=0
1×0=0
0×1=0
1×1=1
Умножение многоразрядных двоичных чисел производится по той
09.11.2021
Таблица умножения двоичной системы счисления
0×0=0
1×0=0
0×1=0
1×1=1
Умножение многоразрядных двоичных чисел производится по той
первый сомножитель поразрядно умножается на каждую из цифр второго сомножителя;
каждое следующее произведение смещается влево на один разряд по отношению к предыдущему;
результаты всех умножений складываются.
11011,112
Пример:
101,012
×
1101111
1101111
1101111
10010001,10112
09.11.2021
Фрагмент таблицы сложения шестнадцатеричной системы счисления
09.11.2021
Фрагмент таблицы сложения шестнадцатеричной системы счисления
09.11.2021
Сложение двух многозначных шестнадцатеричных чисел
Складываемые шестнадцатеричные цифры заменяются десятичными эквивалентами.
Выполняется
09.11.2021
Сложение двух многозначных шестнадцатеричных чисел
Складываемые шестнадцатеричные цифры заменяются десятичными эквивалентами.
Выполняется
Если полученная сумма меньше 16-ти, то она считается результатом сложения в текущем разряде и записывается в виде шестнадцатеричного эквивалента.
Если результат сложения больше или равен 16-ти, то из суммы вычитается 16 и запоминается единица переноса в следующий разряд, а полученная разность записывается в виде шестнадцатеричной цифры как результат сложения в текущем разряде.
Пример:
DA9CD316
15B4F516
+
3+5=8
<16
810→816
816
D+F=
13+15=
28>16
→28-16=12;
1210→C16
C
1
ПЕРЕНОС
С+4=
12+4=
16+4
+1
=17>16
;17-16=
1
1
F05
09.11.2021
Сумма цифр оценивается по отношению к шестнадцатеричному десятку.
Если она меньше, чем
09.11.2021
Сумма цифр оценивается по отношению к шестнадцатеричному десятку.
Если она меньше, чем
Если сумма не меньше 16, то из двух складываемых цифр выбирается большая и определяется, сколько единиц ей не хватает до десятка (шестнадцатеричного).
Нужное количество единиц вычитается из меньшей цифры пары.
Разность записывается в шестнадцатеричном виде как результат сложения, при этом запоминается единица переноса в следующий разряд.
Второй способ сложения многозначных шестнадцатеричных чисел
DA9CD316
15B4F516
+
Пример:
3+5=8
<16
810→816
816
D+F>16;
F ближе к 1016, не хватает 1;
D-1=C;
1
ПЕРЕНОС
C
F051
09.11.2021
Вычитание двух многозначных шестнадцатеричных чисел
Участвующие в вычитании цифры текущего разряда
09.11.2021
Вычитание двух многозначных шестнадцатеричных чисел
Участвующие в вычитании цифры текущего разряда
Если уменьшаемое меньше вычитаемого, то из ближайшего слева ненулевого разряда занимается шестнадцатеричный десяток, и к уменьшаемому прибавляется 16.
Производится вычитание в десятичной системе.
Результат записывается в виде шестнадцатеричной цифры.
При переходе к следующим разрядам необходимо учитывать выполненные ранее займы.
Пример:
F051C816
DA9CD316
-
8-3=5
516
С-D=
12-13=
12+16-13=
заем
1510→F16
0
F
15B4
09.11.2021
Форматы кодирования числовых данных
Вспомним, что исчерпывающе полный набор правил кодирования той
09.11.2021
Форматы кодирования числовых данных
Вспомним, что исчерпывающе полный набор правил кодирования той
Для представления числовых данных в компьютерах используются два основных формата: формат с фиксированной точкой (запятой) и формат с плавающей точкой (запятой). В названиях форматов речь идет о знаке, с помощью которого целая часть числа оделяется от его дробной части.
Формат с фиксированной точкой предназначен для абсолютно точного представления целых чисел, которые появляются в задачах в результате выполнения операций типа пересчёт, например, подсчёт количества студентов, присутствующих на занятии. Результаты того рода операций всегда абсолютно точные целые числа. В языках программирования такие числа относятся к целому типу.
Формат с плавающей точкой используется для представления нецелых, точнее приближенных чисел. Такие числа возникают в задачах в результате различных измерений (например, измерений веса некоторого тела или его длины), которые, как известно, всегда выполняются с некоторой погрешностью, приближенно. В языках программирования их относят к вещественному типу.
Возможности одного байта для кодирования чисел достаточно малы, поэтому числа обычно занимают несколько соседних байтов, то есть поле, длина которого зависит от используемого формата и является важной его характеристикой.
09.11.2021
Формат с фиксированной точкой предназначен для представления целых чисел. Целые числа
09.11.2021
Формат с фиксированной точкой предназначен для представления целых чисел. Целые числа
Формат с фиксированной точкой
Беззнаковое представление формата с фиксированной точкой
Используется прямой двоичный код, все биты поля содержат значащие цифры числа.
Точка, отделяющая целую часть числа от дробной, считается расположенной, зафиксированной справа от крайнего правого разряда.
Диапазон представимых чисел: от 0 до 2N -1, N ─ длина поля в битах.
Следовательно, под дробную часть числа отводится нулевое количество разрядов, поэтому в данном варианте кодирования возможна работа только с целыми числами. Постоянное расположение точки, фиксация её позиции дала название формату — «с фиксированной точкой».
09.11.2021
Примеры: 7710
перевести заданное целое положительное число в двоичную систему счисления;
выбрать поле,
09.11.2021
Примеры: 7710
перевести заданное целое положительное число в двоичную систему счисления;
выбрать поле,
записать полученный код в это поле, при необходимости дополняя его слева незначащими нулями.
004D;
0000004D;
26710 →
010B; 0000010B
Чтобы определить значение числа, для которого задан его код в беззнаковом представлении формата с фиксированной точкой, достаточно, считая весь этот код двоичным (или шестнадцатеричным) числом, перевести его в десятичную систему счисления.
→ 4D;
Порядок перехода к беззнаковому формату с фиксированной точкой:
Определение числа по его коду (беззнаковый, фиксированная точка):
09.11.2021
Знаковое представление формата с фиксированной точкой.
Один бит поля выделяется под
09.11.2021
Знаковое представление формата с фиксированной точкой.
Один бит поля выделяется под
Система кодирования со знаком
Код знака числа принято размещать в самом левом разряде поля, который в связи с этим принято называть знаковым битом.
В знаковом представлении различные биты кода играют разные роли. Для однозначного выполнения кодирования и декодирования данных для каждого способа кодирования необходимо чётко определить и точно описать роль каждого бита поля. Описание закреплённых за разрядами поля конкретных функций по хранению различных элементов машинного кода принято называть структурой разрядной сетки формата или системы кодирования.
09.11.2021
1. Неоднозначное представление нуля: +0 → 0|000 00002; - 0 →
09.11.2021
1. Неоднозначное представление нуля: +0 → 0|000 00002; - 0 →
2. Специальная арифметика:
0000 0001 (+1)
1000 0001 (- 1)
1000 0010 (-2)
Попытка
использования системы кодирования со знаком (прямого двоичного кода со знаковым битом) для представления знаковых целых чисел:
|4|10 → 000 01002;
|127|10 → 111 11112;
+4 → 0|000 01002;
- 4 → 1|000 01002;
+127 → 0|111 11112;
- 127 → 1|111 11112;
Недостатки:
+
09.11.2021
Дополнительный код целых чисел
Код должен подчиняться правилам выполнения сложения и вычитания
09.11.2021
Дополнительный код целых чисел
Код должен подчиняться правилам выполнения сложения и вычитания
+7 → 01112
+6 → 01102
+5 → 01012
+4 → 01002
+3 → 00112
+2 → 00102
+1 → 00012
+0 → 00002
1 → 11112
2 → 11102
3 → 11012
4 → 11002
5 → 10112
6 → 10102
7 → 10012
8 → 10002
При четырех битах всего 16 кодов, диапазон при использовании прямого кода: от – 7 до +7, два кода заняты под нуль 00002 и 10002
При четырех битах всего 16 кодов, диапазон при использовании дополнительного кода: от – 8 до +7, под нуль занят один код 00002, а код 10002 обозначает -8
Для однобайтового поля всего 256 кодов, диапазон целых чисел для беззнакового представления
Для однобайтового кода всего 256 кодов, диапазон целых чисел для однобайтового поля
знакового представления
09.11.2021
Пусть M =2n, где n — разрядность поля, используемого для записи
09.11.2021
Пусть M =2n, где n — разрядность поля, используемого для записи
Рассмотрим пример. Вновь возьмём n=4 и найдем код числа минус семь. В данном случае M=24=100002, прямой код модуля обсуждаемого числа P=1112, и, следовательно, его дополнение до M равно D = 100002 – 1112 = 10012, что совпадает с полученным прямыми рассуждениями дополнительным кодом этого числа.
Способ кодирования знаковых чисел, основанный на использовании дополнительного кода, устраняет все отмеченные выше недостатки применения системы кодирования со знаком.
09.11.2021
Диапазон представления чисел при использовании дополнительного кода:
от - 2N-1 до 2N-1-1
Примеры:
09.11.2021
Диапазон представления чисел при использовании дополнительного кода:
от - 2N-1 до 2N-1-1
Примеры:
Перевести модуль целого числа в двоичную систему счисления;
Если число отрицательное, то получить дополнительный код, инвертировав прямой код (получится обратный код) и добавив к результату 1;
Записать число в выделенное для него поле.
10000 00002 10016
0100 11012 4D16
1011 00112 B316
Способы получения дополнительного кода
-
-
77; 1) прямой код модуля: 77 → 4D16= 0100 11012;
2) обратный код: 1011 00102;
дополнительный код: 1011 00112;
3) – 77 → 1011 00112 или B316;
Порядок перехода к знаковому формату с фиксированной точкой:
09.11.2021
Правило размножения знака при переходе к более длинным полям
Число: +7710
Поле 1
09.11.2021
Правило размножения знака при переходе к более длинным полям
Число: +7710
Поле 1
Поле 2 байта: 0|000 0000 0100 11012 или 00 4D16;
Поле 4 байта: 0|000 0000 0000 0000 0000 0000 0100 11012 или 00 00 00 4D16
Число: - 7710
Поле 1 байт: 1|011 00112 или B3 16;
Поле 2 байта: 1|111 1111 1011 00112 или FF B316;
Поле 4 байта: 1|111 1111 1111 1111 1111 1111 1011 00112 или FF FF FF B316
1 0000 0000 0000 00002
0100 11012
1111 1111 1011 00112
Дополнительные коды для -77
1 0000 0000 0000 0000 0000 0000 0000 00002
0100 11012
1111 1111 1111 1111 1111 1111 1011 00112
─
─
1 00 0016
4D16
FF B316
─
1 00 00 00 0016
4D16
FF FF FF B316
─
При переходе к более длинному полю свободные слева биты поля заполняются кодом знакового бита 02 (016) для положительных и 12 (F16) ─ для отрицательных
09.11.2021
005A16
FFE816
По знаковому биту определить знак числа. Для отрицательных чисел в
09.11.2021
005A16
FFE816
По знаковому биту определить знак числа. Для отрицательных чисел в
Если код дополнительный, то перейти к прямому коду модуля (по тем же правилам, что и переход от прямого к дополнительному);
Перевести число из 2-ой (или 16-ой) системы счисления в десятичную
Сформировать соответствующий знак числа.
Порядок определения числа по его коду (знаковый, фиксированная точка):
→ +90
→ 0000 0000 0101 10102;
>0;
→ 1111 1111 1110 10002;
<0;
10000-FFE8=0018
→ - 24
Примеры:
09.11.2021
Нормализованные числа.
Числа, записанные в форме ± m × q ±p, где
09.11.2021
Нормализованные числа.
Числа, записанные в форме ± m × q ±p, где
В естественных науках часто используются числа вида:- 2,9×10 18 ;0,091 ×10-30. Обычно этот способ используется для задания очень больших или очень маленьких по модулю чисел.
- 2 900 000 000 000 000 000 → - 2,9×1018
0,000 000 000 000 000 000 000 000 000 000 091 → 0,091 ×10-30
Например:
18,456 → 1,8456×10+1
Запись чисел таким способом обладает неоднозначностью:
→ 1845,6 ×10-2
→ 184,56 ×10-1
→ 0,18456 ×10+2
Чтобы избавится от неоднозначности на значение мантиссы m накладывается какое-либо ограничение, например: 0,1 ≤ m< 1 или 1≤ m <10.
09.11.2021
Формат с плавающей точкой используется для кодирования нецелых чисел, обычно возникающих
09.11.2021
Формат с плавающей точкой используется для кодирования нецелых чисел, обычно возникающих
ФОРМАТ С ПЛАВАЮЩЕЙ ТОЧКОЙ
Принцип кодирования в формате с плавающей точкой
Код числа вида ± m × q ±p должен содержать:
Код знака числа ± (0 или 1);
Код нормализованной мантиссы 1 ≤ m < 10 ;
Код знака порядка ± (0 или 1);
Код порядка p.
Возможный способ кодирования с помощью восьми десятичных цифр
09.11.2021
Диапазон представления чисел с плавающей точкой
1,0×10-9 ≤ |X| ≤ 9,9999×10+9 и
09.11.2021
Диапазон представления чисел с плавающей точкой
1,0×10-9 ≤ |X| ≤ 9,9999×10+9 и
0
0
Машинный нуль (underflow ─ исчезновение порядка) |x|<10-9
0
Переполнение (overflow ─ переполнение порядка) |x| >9,9999×10+9
09.11.2021
Влияние распределения ролей в разрядной сетке на диапазон
Минимальное по модулю число:
Максимальное
09.11.2021
Влияние распределения ролей в разрядной сетке на диапазон
Минимальное по модулю число:
Максимальное
При изменении количество разрядов, отводимых на порядок, изменяется диапазон представимых чисел. При изменении количества разрядов, отводимых на мантиссу, изменяется точность представления чисел
09.11.2021
Денормализация и нормализация при выполнении арифметических операций над данными в формате
09.11.2021
Денормализация и нормализация при выполнении арифметических операций над данными в формате
1,6×10-4
1,2 ×10-4
2,8 ×10-4
+
8,6×10-4
3,7 ×10-4
12,3 ×10-4
+
→ 1,23×10-3
1,6 ×10-4
1,52 ×10-4
0,08 ×10-4
-
→ 8,0×10-6
1,6×10-4
1,5×10-5
1,6 ×10-4
0,15×10-4
1,75×10-4
+
+
Нормализация результата
Предварительная денормализация операнда
1,6×10-4
1,5×10-3
+
1,6×10-4
15,0×10-4
16,6×10-4
+
→ 1,66×10-3
09.11.2021
Двоичные коды чисел в формате с плавающей точкой могут занимать поля
09.11.2021
Двоичные коды чисел в формате с плавающей точкой могут занимать поля
Диапазон и точность представления чисел в формате с плавающей точной
09.11.2021
Поля длиной 4 байта ─ короткие вещественные (одинарная точность)
Код знака
09.11.2021
Поля длиной 4 байта ─ короткие вещественные (одинарная точность)
Код знака
Код машинного порядка Pм ─ 8 бит (23-30 биты)
Код мантиссы M ─ 23 бита (0-22 биты).
S=0 для положительных чисел и S=1 ─ для отрицательных
Код машинного порядка Pм равен порядку числа Pи увеличенному на 12710
Код мантиссы равен мантиссе, уменьшенной на единицу
09.11.2021
Порядок получения кода числа в формате с плавающей точкой
Перевести модуль числа
09.11.2021
Порядок получения кода числа в формате с плавающей точкой
Перевести модуль числа
Нормализовать число.
Сформировать знаковый бит S (0 → код знака плюс ; 1 → код знака минус).
Выделить истинный порядок (Pи).
Получить код машинного порядка (Pм=Pи+ 12710 или 7F16 или 111 11112).
Получить код мантиссы M, отбрасывая бит целой части.
Записать коды S, Pм, M в отведенные для них позиции.
+15,37510
→ 1111,0112
→ 1,111011×10112
S=0;
Pи = 112;
Pм = Pи + 111 11112 = 1000 00102;
M = 1110112
Код числа +15,37510 в формате с плавающей точкой в четырехбайтовом поле
0100 0001 0111 0110 0000 0000 0000 00002 или 41 76 00 0016
Пример:
09.11.2021
Порядок получения числа по его коду в формате с плавающей точкой
Получить
09.11.2021
Порядок получения числа по его коду в формате с плавающей точкой
Получить
Выделить код знака S и определить знак числа.
Выделить код машинного порядка Pм.
Получить истинный порядок Pи (Pи=Pм- 12710 или 7F16 или 111 11112).
Выделить код мантиссы М и получить мантиссу, дописывая бит целой части.
Получить число в нормализованной форме.
При необходимости денормализовать число, перевести его в десятичную систему счисления и дописать нужный знак.
Пример: С2B7AE0016
→1100 0010 1011 0111 1010 1110 0000 0000
1 10000101 01101111010111
S=1;
Pм = 100001012=8516;
→ Pи =(85-7F)16 = 616 =1102
М = 01101111010111
→ - 1,01101111010111×10+110
→ -1011011,110101112
→ - 5B,D716
= - 91,8398437510
09.11.2021
Поля длиной 6 байтов ─ вещественные (обычная точность)
Код знака числа
09.11.2021
Поля длиной 6 байтов ─ вещественные (обычная точность)
Код знака числа
Код машинного порядка Pм ─ 8 бит (39-46 биты)
Код мантиссы M ─ 39 бита (0-38 биты).
Правила прямого и обратного переходов те же самые, что и при использовании четырехбайтовых полей
Поля длиной 8 байтов ─ длинные вещественные (двойная точность)
Код знака числа S ─ 1 бит (63 бит)
Код машинного порядка Pм ─ 11 бит (52-62 биты)
Код мантиссы M ─ 52 бита (0-51 биты).
Правила прямого и обратного переходов те же самые, что и при использовании четырехбайтовых полей, но машинный порядок отличается от истинного на 102310
+15,37510
→ 1111,0112
→ 1,111011×10112
S=0;
Pи = 112;
Pм = Pи + 11 1111 11112 = 100 0000 00102;
M = 1110112
Пример:
Код числа +15,37510 в формате с плавающей точкой в восьмибайтовом поле
0100 0000 0010 1110 1100 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 00002 или 40 2E C0 00 00 00 00 0016
09.11.2021
Поля длиной 10 байтов ─ расширенные вещественные
Код знака числа S ─
09.11.2021
Поля длиной 10 байтов ─ расширенные вещественные
Код знака числа S ─
Код машинного порядка Pм ─ 15 бит (64-78 биты)
Код мантиссы M ─ 64 бита (0-63 биты).
Правила прямого и обратного переходов те же самые, что и при использовании четырехбайтовых полей, но машинный порядок отличается от истинного на
16 38310 и у кода мантиссы бит целой части не отбрасывается
+15,37510
→ 1111,0112
→ 1,111011×10112
S=0;
Pи = 112;
Pм = Pи + 11 1111 1111 11112 = 100 0000 0000 00102;
M = 11110112
Пример:
Код числа +15,37510 в формате с плавающей точкой в десятибайтовом поле
0100 0000 0000 0010 1111 0110 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 00002 или 40 02 F6 00 00 00 00 00 00 0016
09.11.2021
Двоично-десятичный формат (BCD – формат ─ binary coded decimal )
Неупакованный BCD
09.11.2021
Двоично-десятичный формат (BCD – формат ─ binary coded decimal )
Неупакованный BCD
Упакованный BCD формат.
Знаковый BCD формат.
Разновидности BCD кодирования
Пример: число: +567 398 104
Текстовый код ASCII: 20 35 36 37 33 39 38 31 30 3416
Неупакованный BCD формат: 00 05 06 07 03 09 08 01 00 0416
Упакованный BCD формат: 05 67 39 81 0416
Знаковый BCD формат (для - 567398104) : 80 00 00 00 00 05 67 39 81 0416
09.11.2021
Один и то же код может восприниматься и как код цепочки
09.11.2021
Один и то же код может восприниматься и как код цепочки
С2ABE45216
Текстовый формат, кодировка Windows1251 → В « д R
Текстовый формат, кодировка КОИ-8 → б └ Д R
КОД:
Текстовый формат, кодировка ГОСТ → ┬ л ф R
Беззнаковый, фиксированная точка → 3 266 045 01010
Знаковый, фиксированная точка → - 1 028 922 28610
Формат с плавающей точкой → - 85,94629110
09.11.2021
Необходимость в кодировании графических данных возникла в связи с появлением в
09.11.2021
Необходимость в кодировании графических данных возникла в связи с появлением в
Кодирование графических данных
Под графическими данными можно понимать рисунок, чертеж, картинку в книге, фотографию, изображения на экране телевизора или в кинозале и т. д.
Основные виды компьютерной графики в настоящее время: растровая, векторная, фрактальная, flash – графика.
Изображение строится из горизонтальных линий — строк. А каждая строка в свою очередь состоит из элементарных мельчайших единиц изображения — точек, которые принято называть пикселями (picsel — PICture'S ELement — элемент картинки).
Основы кодирования растровой графики
09.11.2021
Изображение на экране →
Фактическая структура изображения:
строка →
Всю совокупность элементарных
09.11.2021
Изображение на экране →
Фактическая структура изображения:
строка →
Всю совокупность элементарных
← пиксель
09.11.2021
Степень четкости изображения зависит от количества строк на весь экран и
09.11.2021
Степень четкости изображения зависит от количества строк на весь экран и
Количество строк (например,600)
Количество пикселей в строке (например, 800)
Стандартно используемые разрешения:
800×600,
1024 × 768,
1152 × 864,
1280 × 1024,
1600 × 1200,
1600 × 1280,
1920 × 1200,
1920 × 1600,
2048 × 1536.
Строки, из которых состоит изображение, принято просматривать сверху вниз друг за другом, как бы составив из них одну сплошную линию. Такой способ работы со строками называется строчной разверткой, или сканированием (scan — бегло просматривать; разлагать, развертывать изображение).
09.11.2021
Кодирование черно-белых изображений
Пример кодирования одной строки изображения.
На строчку, состоящую из 800
09.11.2021
Кодирование черно-белых изображений
Пример кодирования одной строки изображения.
На строчку, состоящую из 800
1. В изображении используется два цвета: белый и черный. Состояние пикселя кодируется одним битом.
Недостаток: получается чрезвычайно контрастное изображение
2. Более реалистический вариант ─ в изображении используются четыре цвета: белый, светло-серый, темно-серый и черный. На один пиксель требуется два бита.
На растр 800×600 требуется 120 000 байтов.
3. Стандартный способ ─ в монохромном изображении используются 256 оттенков серого цвета от белого до черного.
На кодирование одного пикселя требуется один байт, а на весь растр 800×600 ─ 480 000 байтов.
09.11.2021
Кодирование цветных изображений. Метод RGB
Для формирования цветных изображений используются несколько различных
09.11.2021
Кодирование цветных изображений. Метод RGB
Для формирования цветных изображений используются несколько различных
Кодирование цветных пикселей в методе RGB основано на том, что белый цвет можно представить как сумму трех основных цветов: красного (Red), зеленого (Green), синего (Blue), а их смешение в различных пропорциях дает остальные цвета.
В конечном счете, любой конкретный цветовой оттенок определяется долей присутствия в нём каждого из основных цветов. В разных цветовых системах такая доля задается различными способами, но в любом случае она представляет собой целое число, которое считается цветовой координатой соответствующего основного цвета.
По аналогии с тремя координатами точки в обычном трёхмерном геометрическом пространстве, совокупность цветовых координат основных цветов определяет некоторый цвет — цветовой вектор, цветовую точку в цветовом пространстве, то есть во множестве цветов, представимых в конкретной цветовой системе.
09.11.2021
Цветовая система представляет собой способ представления цвета в виде набора чисел
09.11.2021
Цветовая система представляет собой способ представления цвета в виде набора чисел
В соответствии с этими представлениями, для формирования цветного пикселя изображения в одну и ту же точку экрана направляется не один, а сразу три цветных (красный, зелёный и синий) луча, совместное воздействие которых на эту точку придаёт ей нужный цвет.
Вначале вновь будем считать, что для кодирования каждого из основных цветов достаточно одного бита, следовательно, каждая из цветовых координат может принимать только одно из двух значений 0 или 1.
При этом нулевое значение означает, что в суммарном цвете данный основной цвет отсутствует, а единичное — присутствует.
09.11.2021
2. Полноцветный режим (режим True Color ─ истинный цвет). Для кодирования
09.11.2021
2. Полноцветный режим (режим True Color ─ истинный цвет). Для кодирования
Можно задать 256 оттенков каждого из основных цветов ─ всего 16 777 216 различных цветов. На кодирование одного пикселя требуется три байта, на растр 800×600 ─ 1 440 000 байтов.
В этом случае для кодирования одного цветного пикселя потребуется три бита — по одному на каждый цвет.
Пусть первый бит соответствует красному цвету, второй — зеленому и третий — синему. Тогда код (цветовой вектор) 1012 обозначает сиреневый цвет — красный есть, зеленого нет, синий есть, а код 1102 — желтый цвет — красный есть, зеленый есть, синего нет. В этой системе кодирования цветовое пространство состоит из восьми цветов, которыми может быть окрашен любой пиксель изображения.
На кодирование растра 800×600 необходимо 180 000 байтов.
09.11.2021
3. Режим High Color (high color — богатый цвет). Для кодирования цвета
09.11.2021
3. Режим High Color (high color — богатый цвет). Для кодирования цвета
4. Индексный режим. Для кодирования цвета одного пикселя используется один байт. Базируется на заранее созданной для данного рисунка таблице используемых в нем цветовых оттенков. Затем нужный цвет пикселя выбирается из этой таблицы с помощью номера — индекса, который занимает всего один байт памяти. Для растра 800×600 требуется 480 000 байтов.
Конкретный способ кодирования всей требуемой при записи изображения в память компьютера информации (цвет, яркость, контрастность, разрешение) образует графический формат. Форматы кодирования графической информации, основанные на передаче цвета каждого отдельного пикселя, из которого состоит изображение, относят к группе растровых или BMP (Bit MaP — битовая карта) форматов.
В целях экономии памяти разрабатываются различные графические режимы и форматы, которые немного хуже передают цвета и изображение в целом, но требуют меньше памяти. Например:
09.11.2021
Другие методы и графические форматы
Метод CMYK (от Cyan — голубой, Magenta — пурпурный,
09.11.2021
Другие методы и графические форматы
Метод CMYK (от Cyan — голубой, Magenta — пурпурный,
Формат bmp (или dib от Device Independent Bitmap — независимый от устройства bitmap). Задается цветность всех пикселей изображения. При этом можно выбрать монохромный режим, использующий 256 градаций серого цвета, или цветной, использующий 16, 256 или 16 777 216 цветов. Изображения в этом формате требует много памяти.
Формат gif (от Graphics Interchange Format — графический формат обмена). Используются специальные методы сжатия кода, поддерживается только 256 цветов. Качество изображения немного хуже, чем в формате bmp, зато изображение занимает в десятки раз меньше памяти.
09.11.2021
Формат jpeg (Joint Photographic Experts Group — объединенная группа экспертов по фотографии)
09.11.2021
Формат jpeg (Joint Photographic Experts Group — объединенная группа экспертов по фотографии)
Формат png (Portable Network Graphics — компактная графика для сети) представляет собой улучшение формата gif в области цветопередачи и сжатия кода. Создан для передачи изображений в Интернете. Не подходит для печати изображений.
Формат tiff (Tag Image File Format — формат файла образа, изображения, tag — используемый в реализации формата тэг, этикетка, ярлык). Представляет собой универсальный формат для хранения растровых изображений. Широко используется в издательских системах. По качеству сжатия он близок к форматам png и gif.
Формат pdf (Portable Document Format — компактный формат документов) Основное достоинство этого формата в том, что текст и графика, заключенный в электронном документе этого формата одинаково точно воспроизводятся на любой аппаратной платформе, что особенно важно в компьютерных сетях.
09.11.2021
Растровая графика дает высококачественные изображения, но имеет существенный недостаток ─ плохо
09.11.2021
Растровая графика дает высококачественные изображения, но имеет существенный недостаток ─ плохо
а) исходное изображение, б) то же изображение, увеличенное в 8 раз
09.11.2021
Другие виды компьютерной графики
Векторная графика. Базовым объектом является не точка, а
09.11.2021
Другие виды компьютерной графики
Векторная графика. Базовым объектом является не точка, а
Трехмерная графика. Является особой разновидностью векторной графики, в которой специальными средствами фактически плоского рисунка добиваются визуальных эффектов объемности изображений.
Фрактальная графика. Формирование изображений целиком основано на математических формулах, уравнениях, описывающих те или иные фигуры, поверхности, тела. При этом само изображение в памяти компьютера фактически не хранится — оно получается как результат обработки некоторых данных. Таким способом, например, могут быть получены довольно реалистичные изображения природных ландшафтов.
Flash графика. В 1996 году компания Macromedia разработала стандарт flash графики (flash — мгновение, короткая телеграмма). Основное назначение этой технологии работы с графикой — создание высококачественных анимационных изображений для веб страниц Интернета.
09.11.2021
Формат wmf ─ Windows Meta File ─ формат метафайлов операционной системы
09.11.2021
Формат wmf ─ Windows Meta File ─ формат метафайлов операционной системы
Формат cdr ─ Corel DRaw ─ формат хранения изображений, используемый в мощном графическом редакторе Corel Draw.
Форматы ps ─ PostScript (от poster script — сценарий описания плакатов, объявлений, афиш) и eps ─ Encapsulated PostScript— инкапсулированный, то есть скрытый, заизолированный PostScript. Используются для описания как векторных, так и растровых изображений, а также разнообразных текстовых шрифтов.
Некоторые графические векторные форматы
09.11.2021
Кодирование звуковых и видео данных
Развитие способов кодирования звуковых данных, а также
09.11.2021
Кодирование звуковых и видео данных
Развитие способов кодирования звуковых данных, а также
Приемлемые возможности для хранения и воспроизведения с помощью компьютера звука и видеозаписей появились только в девяностых годах XX века. Разработанные в это время методы, способы, приёмы работы со звуком и видео получили название мультимедийных технологий.
Компьютерная анимация — последовательный показ подготовленных на компьютере рисунков, а также имитация движения с помощью изменения и перерисовки объектов или показа последовательных рисунков с соответствующими фазами движения.
В связи с большими объёмами памяти, требующейся для хранения графики, видео и звука, эти разновидности данных практически всегда кодируются с помощью сжимающих методов с потерей информации.
09.11.2021
Более точно: замена непрерывного звукового сигнала дискретным набором его значений —
09.11.2021
Более точно: замена непрерывного звукового сигнала дискретным набором его значений —
С точки зрения физики звук представляет собой достаточно сложное, непрерывное колебание воздуха. Это значит, что с точки зрения информатики звук является разновидностью непрерывных сообщений.
Поэтому для представления в компьютере непрерывное сообщение необходимо преобразовать в дискретную форму — выполнить развертку по времени и квантование. Осуществление этих операций во время кодирования звука называется преобразованием в цифровую форму или оцифровыванием.
Заметим, что получающиеся при оцифровывании значения отсчётов в литературе иногда называют сэмплами (англ. sample — образец). Но для обозначения отдельного отсчёта это название некорректно потому, что под термином «сэмпл» в практике оцифровывания звука понимается относительно небольшой звуковой фрагмент, а не отдельный отсчёт.
09.11.2021
На рисунке показана развертка по времени звукового сигнала, который длится 2
09.11.2021
На рисунке показана развертка по времени звукового сигнала, который длится 2
50 герцам.
Чему равна частота дискретизации в рассматриваемом примере?
09.11.2021
В общем случае значение частоты дискретизации выбирается исходя из требований теоремы
09.11.2021
В общем случае значение частоты дискретизации выбирается исходя из требований теоремы
При записи звука в мультимедийных технологиях применяются частоты 8, 11, 22, 44 и более килогерц. Для получения высококачественного звука используются частоты до 192 килогерц. Например, частота дискретизации 44 килогерца означает замену одной секунды непрерывного звучания набором из сорока четырех тысяч отдельных отсчетов сигнала.
Качество преобразования звука в цифровую форму определяется не только частотой дискретизации, но и количеством битов памяти, отводимых на запись кода одного отсчета. При этом каждый отсчет во время квантования кодируется в одном из разобранных выше числовых форматов.
Этот параметр, который принято называть разрядностью преобразования, определяет количество различных уровней сигнала, представимых при его квантовании. Чем больше количество битов, тем более качественно и точно происходит воспроизведение оцифрованного звука. Обычно используются разрядности 8, 16 и 24 бит.
Таким образом, кодирование и обработка звука фактически сводится к кодированию и обработке числовых данных.
09.11.2021
На обсуждаемых стандартных способах оцифровывания звука основан, так называемый, волновой формат
09.11.2021
На обсуждаемых стандартных способах оцифровывания звука основан, так называемый, волновой формат
Получить запись звука в этом формате можно от подключаемых к компьютеру микрофона, проигрывателя, магнитофона, телевизора и других стандартно используемых устройств работы со звуком.
Формат wav требует очень много памяти. Так, при записи стереофонического звука с частотой дискретизации 44 килогерца и разрядностью 16 бит — параметрами, дающими достаточно хорошее качество звучания — на одну минуту записи требуется около десяти миллионов байтов памяти.
В связи с особенностями программ, осуществляющих кодирование звука, оцифровывание удобнее характеризовать одним параметром, который называется битрейтом (англ. bit rate — битовая скорость).
По своей сути битрейт это — количество битов сформированного кода, требующихся на одну секунду звучания, и его значение получается как произведение частоты дискретизации на разрядность преобразования.
Единицей измерения битрейта является бит в секунду (бит/c или bps — bit per second). Широко используются также кратные единицы — килобиты в секунду (кбит/с, kbit/s или kbps) и мегабиты в секунду (мбит/с, mbit/s или mbps). Во избежание путаницы отметим, что здесь приставки кило- и мега- означают 1 000 и 1 000 000 соответственно.
09.11.2021
Для рассмотренного выше случая оцифровывания с частотой дискретизации 44 килогерца и
09.11.2021
Для рассмотренного выше случая оцифровывания с частотой дискретизации 44 килогерца и
На самом деле, точное значение стандартного битрейта равно 1411,2 кбит/с, так как частота дискретизации выбирается равной 44 100 герц — немного выше, чем в примере.
09.11.2021
Для записи звука широко применяется формат midi (Musical Instruments Digital Interface —
09.11.2021
Для записи звука широко применяется формат midi (Musical Instruments Digital Interface —
Кодирование видеоинформации осуществляется с помощью дискретизации непрерывных изображений. Основано на свойстве человеческого глаза воспринимать быструю смену последовательности картинок с небольшими изменениями одна относительно другой как одну картинку с движением. Этот принцип используется в кино, в мультипликации и анимации. Стандартной частотой дискретизации для видеоизображений является 30 изображений (кадров) в секунду. Кодирование требует не только дискретизации непрерывных движений, но и синхронизации изображения со звуковым сопровождением. В настоящее время для этого используется формат, которой называется avi (Audio-Video Interleaved — чередующееся аудио и видео).
09.11.2021
Форматы, основанные на сжатии информации
Стандарты сжатия звука и видео MPEG (Moving
09.11.2021
Форматы, основанные на сжатии информации
Стандарты сжатия звука и видео MPEG (Moving
стандарт MPEG-1 описывает форматы записи звука. Например, формат MP-3 при практически том же качестве звука требуется в десять раз меньше памяти, чем при использовании формата WAV.
стандарт MPEG-2 описывает методы сжатия видеозаписей, которые обеспечивают телевизионное качество изображения и стереозвуковое сопровождение и имеют приемлемые требования к памяти.
стандарт MPEG-4 описывает методы сжатия видеозаписей, которые обеспечивают минимальные требования к памяти. Например, с его помощью можно полнометражный цветной фильм со звуковым сопровождением записать на стандартный компакт-диск. Разработан в 1999 году.
09.11.2021
АЛГОРИТМЫ
Выделенная из принятого сообщения информация так или иначе обрабатывается и возможно
09.11.2021
АЛГОРИТМЫ
Выделенная из принятого сообщения информация так или иначе обрабатывается и возможно
Вопросы, связанные с представлением сообщений, кодированием и хранением данных в памяти компьютера, интересны не сами по себе. Необходимо уметь не только хранить данные, но и что-то с ними делать.
Но в любом случае эта обработка производится по каким-то правилам, при этом выполняется некоторая последовательность действий. В результате получается, вообще говоря, некоторая новая информация, которая может быть представлена в форме сообщения. Эти правила обработки, эту последовательность действий принято называть алгоритмом.
Понятие алгоритма, в отличие от большинства других понятий информатики, имеет довольно длинную историю. Происхождение этого термина обычно связывают с именем узбекского учёного аль-Хорезми, написавшего около 825 года книгу «Об индийском счёте», в которой описаны правила выполнения действий над числами в десятичной позиционной системе счисления.
09.11.2021
Имя автора трактата в европеизированной форме (Algorithmus) стало обозначением десятичной арифметики.
09.11.2021
Имя автора трактата в европеизированной форме (Algorithmus) стало обозначением десятичной арифметики.
В настоящее время считается, что именно так появился современный термин алгоритм. Кроме того предполагают, что именно аль-Хорезми впервые использовал цифру 0 (нуль) для обозначения пропущенной позиции в записи числа в позиционной системе счисления. Её индийское название переведено как sifr, отсюда произошли нынешние термины «цифра» и «шифр».
Аль-Хорезми также считается основателем алгебры. Он написал книгу «Ал-китаб ал мухтасар фи хисаб ал-джабр ва-л-мукабала» («Книга о восполнении и противопоставлении») в которой описано несколько разновидностей квадратных уравнений и приведены способы их решения, в частности, с помощью приведения подобных, переноса в другую часть уравнения с переменой знака и т.д. От части названия книги «ал-джабр» произошло слово «алгебра».
Постепенно под термином алгоритм стали понимать любые чётко заданные предписания, правила выполнения каких-либо действий.
В 30–50-х годах XX века в связи с формированием теории алгоритмов произошло кардинальное изменение в понимании их роли и значения в научной сфере и обычной жизни человека. В это время термин алгоритм приобрел чёткое научное определение.
09.11.2021
Одновременно выяснилось, что огромное большинство своих действий в повседневной жизни и
09.11.2021
Одновременно выяснилось, что огромное большинство своих действий в повседневной жизни и
В настоящее время понятие алгоритм является сложным и многоплановым, тем не менее, можно выделить три основных аспекта в его использовании:
интуитивный;
теоретический;
фундаментальный.
Интуитивное понятие алгоритма связано с бытовым представлением об алгоритме как о способе решения некоторой задачи, как о последовательности действий, которую исполнитель алгоритма должен совершить, чтобы достичь поставленной цели: дойти до требуемого пункта в городе, приготовить кофе, сварить суп, решить математическую задачу и т.д.
При этом исполнителем алгоритма может быть дрессированное животное, человек или некоторый механизм, выполняющий действия самостоятельно, автоматически или совместно с человеком.
09.11.2021
В этом смысле термин алгоритм является совершенно понятным, хотя и нестрогим.
09.11.2021
В этом смысле термин алгоритм является совершенно понятным, хотя и нестрогим.
Интуитивного понятия алгоритма вполне достаточно не только в быту. В настоящее время указанное понимание устраивает специалистов большинства профессий, включая инженеров и даже программистов.
Заметим однако, что для программистов ещё необходимо чтобы алгоритм обладал некоторой, обсуждаемой далее совокупностью свойств.
Вместе с тем, для решения более сложных задач, которые оказались в центре внимания математиков в первой трети XX века, потребовалось более точное теоретическое понимание алгоритма.
В это время математики столкнулись с целым рядом важных проблем и задач, относительно которых возникли существенные подозрения в принципиальном отсутствии у них решений.
09.11.2021
В связи с появлением доказательств принципиальной невозможности получить решения некоторых задач
09.11.2021
В связи с появлением доказательств принципиальной невозможности получить решения некоторых задач
То есть, необходимо уметь доказывать отсутствие алгоритма (способа) решения той или иной задачи.
Как оказалось, задача доказательства отсутствия решения совершенно отличается от задачи нахождения какого-либо решения.
Для доказательства существования алгоритма решения задачи достаточно, используя интуитивное представление об этом термине, найти (можно даже просто угадать) некоторый способ её решения.
В то время как для доказательства отсутствия алгоритма необходимо абсолютно точно знать, что же именно не существует, а для этого сначала требуется определить, что такое алгоритм. Следовательно, требуется строгое и точное определение этого понятия.
09.11.2021
Возьмем в качестве иллюстрации этих рассуждений геометрическую задачу о делении любого
09.11.2021
Возьмем в качестве иллюстрации этих рассуждений геометрическую задачу о делении любого
А вот внешне аналогичная задача о трисекции угла (о делении произвольного угла на три равные части) при тех же ограничениях решения не имеет, и никогда не будет иметь. Чтобы установить этот факт учёным понадобилось более 2 000 лет.
Вместе с тем, в процессе поиска решения задачи о трисекции было найдено много вариантов её решений, которые существуют при некоторых ослаблениях на допустимые действия. Так ещё Архимед предложил метод решения, в котором разрешались дополнительные операции с линейкой: нанесение на неё двух точек и такое перемещение линейки, когда одна из точек скользит вдоль прямой, а вторая — вдоль окружности.
Получается, что наличие или отсутствие решения прямо связаны с исполнителем алгоритма, с теми действиями, которые он может выполнять для достижения результата. Отсюда прямо вытекает, что доказательство отсутствия алгоритма не может быть осуществлено без абсолютно точной фиксации в определении алгоритма исполнителя и всех его возможных действий.
09.11.2021
Задача точного определения понятия алгоритм стала центральной математической проблемой в двадцатых
09.11.2021
Задача точного определения понятия алгоритм стала центральной математической проблемой в двадцатых
В их работах были развиты строгие и точные классические теории алгоритмов: теория рекурсивных функций, теория машин Поста, теория машин Тьюринга, теория нормальных алгоритмов Маркова.
Классические теории алгоритмов иногда объединяют под общим названием логической теории алгоритмов.
Наиболее общим является фундаментальный аспект алгоритмов. В современной математике алгоритм является одним из тех немногих понятий, которые наряду с понятием множество привлекаются для обоснования математики как научной дисциплины, для создания фундамента всего математического здания.
С этой точки зрения понятие алгоритма считается принципиально неопределяемым. Обсуждение фундаментального аспекта понятия алгоритм выходит за рамки предмета информатика, поэтому в дальнейшем мы с ним сталкиваться не будем.
09.11.2021
Машина Поста
Машина Поста представляет собой идеальное, воображаемое устройство, состоящее из неограниченной
09.11.2021
Машина Поста
Машина Поста представляет собой идеальное, воображаемое устройство, состоящее из неограниченной
Машина Поста задается:
начальным распределением отмеченных клеток;
начальным положение каретки;
программой, определяющей последовательность действий каретки.
09.11.2021
Система команд машины Поста
Командой машины Поста называется указание исполнителю (каретке) выполнить
09.11.2021
Система команд машины Поста
Командой машины Поста называется указание исполнителю (каретке) выполнить
Структура команды машины Поста:
<порядковый номер команды>. <операция> <номер следующей команды>
Пример команды: 5. ⇒ 9
Пятая команда. Шаг вправо, перейти к выполнению команды с номером 9
09.11.2021
Выполнение программы может:
не завершится никогда (безостановочная работа);
завершится безрезультатно на невыполнимой команде;
завершится
09.11.2021
Выполнение программы может:
не завершится никогда (безостановочная работа);
завершится безрезультатно на невыполнимой команде;
завершится
стереть отметку, если текущая клетка не отмечена;
поставить отметку, если текущая клетка уже отмечена.
Невыполнимые команды:
Требование к программе машины Поста
Порядковые номера команд программы должны образовывать возрастающую арифметическую последовательность, начинающуюся с номера 1 и с шагом 1.
Используемые в командах номера должны обозначать присутствующие в программе команды.
09.11.2021
V 4
ξ 3
⇐ 2
⇒ 5
Стоп
Пример программы машины Поста
Выполнение программы
V 4
⇒
09.11.2021
V 4
ξ 3
⇐ 2
⇒ 5
Стоп
Пример программы машины Поста
Выполнение программы
V 4
⇒
5.
Клетка пуста, переход к 4 команде
⇒ 5
5.
Клетка не пуста, переход к 3 команде
3. ⇐ 2
2. ξ 3
Безрезультатная остановка
V 4
ξ 3
⇐ 6
⇒ 5
Стоп
6. Стоп
Результативная остановка
09.11.2021
Изображение целого неотрицательного числа n в машине Поста представляет собой последовательность
09.11.2021
Изображение целого неотрицательного числа n в машине Поста представляет собой последовательность
Пример: изображение числа 2 в машине Поста
1.
2. ⇒ 1
3. ⇐ 4
4. V 5
5. Стоп
Программа для машины Поста прибавления единицы
09.11.2021
Интуитивное понятие алгоритма
Упомянутые выше классические теории, дающие точное определение алгоритма, связаны
09.11.2021
Интуитивное понятие алгоритма
Упомянутые выше классические теории, дающие точное определение алгоритма, связаны
С одной стороны, реально применяемые алгоритмы соответствуют точным классическим определениям, но при этом оказываются очень трудно реализуемыми на базе соответствующих этим теориям подходов.
С другой стороны для таких алгоритмов совершенно не нужен такой высокий уровень строгости как у классических теорий.
Использование классических подходов для возникающих на практике алгоритмов полностью аналогично доведению каждого математического доказательства по степени детализации до уровня алгебраических или геометрических аксиом. Такая степень подробности совершенно излишняя.
09.11.2021
Поэтому для решения подавляющего большинства практически значимых задач можно обойтись интуитивным,
09.11.2021
Поэтому для решения подавляющего большинства практически значимых задач можно обойтись интуитивным,
С точки зрения теоретических подходов интуитивное понятие алгоритма является некоторым его объяснением, которое опирается на бытовые аналогии, интуитивные ощущения и представления, а также общепризнанную терминологию.
Основными особенностями интуитивного представления об алгоритме является неопределённость терминов «исполнитель», «действие», «цель» и т.д. Именно поэтому существует несколько десятков «определений» алгоритма, которые на самом деле являются не более чем «объяснениями на пальцах».
Выдающийся советский математик А.Н. Колмогоров пишет, что «Алгоритм — это всякая система вычислений, выполняемых по строго определённым правилам, которая после какого-либо числа шагов заведомо приводит к решению поставленной задачи».
Создатель одной из классических теорий алгоритмов А.А. Марков приводит следующее объяснение: «Алгоритм — это точное предписание, определяющее вычислительный процесс, идущий от варьируемых исходных данных к искомому результату».
09.11.2021
Алгоритмом называется понятное и точное предписание, указание исполнителю совершить последовательность действий,
09.11.2021
Алгоритмом называется понятное и точное предписание, указание исполнителю совершить последовательность действий,
Алгоритм представляет собой совокупность правил, инструкций для исполнителя, выполняя которые он за конечное число шагов добьется искомого результата.
Алгоритм — это последовательность действий, либо приводящая к решению задачи, либо поясняющая, почему это решение получить нельзя;
Проанализировав все эти трактовки, можно заметить, что общими для них являются следующие моменты:
наличие некоторого исполнителя алгоритма;
существование точно определенных правил, инструкций, в которых строго определены необходимые действия и последовательность или порядок их выполнения;
конечность количества действий, которые должен совершить исполнитель для достижения цели, результата.
09.11.2021
Исполнителем алгоритма называется субъект или объект, осуществляющий фактическое исполнение алгоритма.
Исполнение
09.11.2021
Исполнителем алгоритма называется субъект или объект, осуществляющий фактическое исполнение алгоритма.
Исполнение
Под исполнителем алгоритма может пониматься человек или животное, это может быть также некоторое неодушевлённое устройство: компьютер, токарный станок, швейная или стиральная машина и т.д.
Форма задания правил, инструкций и порядка их выполнения существенно зависят от исполнителя алгоритма: для дрессированного животного это короткие условные слова или жесты, для человека — всевозможные инструкции по применению и выполнению, а для неодушевлённых устройств — это особые для каждого типа устройств специальные последовательности команд.
Алгоритм есть описание способа решения задачи. Таким образом, исполнение алгоритма есть фактическое решение задачи по заданному в алгоритме способу.
И основным моментом, конечно же, является получение желаемого результата за конечное время. Более того, неявно подразумевается, что это время должно быть разумным, поскольку ждать от исполнителя требуемого результата сотни или даже десятки лет, обычно не может считаться приемлемым.
09.11.2021
формой изложения научных результатов;
руководством к действию при решении ранее изученных
09.11.2021
формой изложения научных результатов;
руководством к действию при решении ранее изученных
необходимым этапом при автоматизации обработки информации и решения различных задач.
Алгоритмы являются:
Следует подчеркнуть, что алгоритмы обладают замечательным качеством: исполнитель алгоритма, если он последовательно и четко выполняет указанные, зафиксированные в алгоритме действия, предписания, инструкции может достигнуть желаемого результата даже не имея ни малейшего представления о том почему и зачем требуется выполнять предписанные действия.
От исполнителя требуется полное отсутствие любой инициативы, он должен действовать, формально, механически, ни на грамм, ни на миллиметр не отступая от предписаний алгоритма.
Именно это качество алгоритмов позволяет использовать их для автоматизации обработки данных, поручать такую обработку вычислительным машинам (компьютерам). Естественно, для этого алгоритмы должны быть заранее сформулированы, построены и записаны в форме, понятной компьютеру
09.11.2021
Алгоритм, записанный в понятной компьютеру или другому исполнителю форме, принято называть
09.11.2021
Алгоритм, записанный в понятной компьютеру или другому исполнителю форме, принято называть
Компьютеры, действуя с огромной скоростью, могут с высокой надежностью выполнять переданные им в виде программ алгоритмы и тем самым решать самые разные задачи математики, экономики, управления, информационно-поисковые задачи и т.д. Поэтому построение алгоритма является необходимым этапом при автоматизации обработки данных и решения различных задач.
Процесс разработки, создания алгоритма является, вообще говоря, глубоко творческим делом. На первоначальную разработку алгоритмов могут уходить годы и десятилетия, может потребоваться объединение усилий десятков специалистов и ученых.
В то время как исполнение алгоритма не требует никакого интеллекта, его можно поручить неодушевлённому устройству, например, компьютеру, при этом собственно исполнение в подавляющем большинстве случаев может быть осуществлено за сравнительно короткое время.
Для того, чтобы некую совокупность правил, инструкций, указаний можно было объявить алгоритмом, и тем более для того, чтобы передать этот алгоритм для исполнения компьютеру, указанная совокупность должна обладать рядом свойств, удовлетворять определенным требованиям. Поэтому интуитивное понятие алгоритма кроме простого объяснения обычно подкрепляется перечислением характерных черт, свойств, которыми должен обладать алгоритм.
09.11.2021
Свойства, которыми должен обладать алгоритм
Дискретность. Вообще говоря, один и тот же
09.11.2021
Свойства, которыми должен обладать алгоритм
Дискретность. Вообще говоря, один и тот же
А
В
А
В
Но компьютер представляет собой дискретное устройство, поэтому в информатике всегда используются способы решения задач, опирающиеся на дискретные процессы.
Обсуждая свойство дискретности алгоритма А.Н. Колмогоров пишет, что «алгоритм — это процесс последовательного построения величин, идущий в дискретном времени таким образом, что в начальный момент задается исходная конечная система величин, а в каждый следующий момент система величин получается по определённому закону (программе) из системы величин, имевшихся в предыдущий момент времени».
09.11.2021
Исполнение алгоритма всегда представляет собой дискретный процесс идущий в дискретном времени.
09.11.2021
Исполнение алгоритма всегда представляет собой дискретный процесс идущий в дискретном времени.
Это значит, что преобразование исходных данных в результат осуществляется поэтапно. Следовательно, алгоритм должен представлять процесс решения задачи как последовательное выполнение некоторых простых этапов. явно различимых, чётко отделенных друг от друга шагов, этапов. И для любого этапа должна существовать возможность указать один или два соседних.
Конечность алгоритма означает, что результат его исполнения требуется получить за конечное, и как правило относительно небольшое время. Абсолютно бессмысленно говорить о необходимости затратить на получение результата бесконечное время.
Чтобы исполнитель алгоритма завершил работу и выдал результат за конечное время требуется, чтобы в его описании имелось только конечное количество явно заданных этапов и при этом на выполнение любого отдельного этапа затрачивался лишь конечный отрезок времени.
Это утверждение требует, чтобы общее количество этапов в алгоритме было конечным.
Пример: правило вычисления значения 1+1/4+1/9+…─ задает бесконечное количество этапов, а правило 1+1/4+1/9+1/16+1/25+1/36+1/49+1/64+1/81+1/100 ─ задает конечное количество этапов.
09.11.2021
Кроме того, нигде не сказано, что этап или группа этапов может
09.11.2021
Кроме того, нигде не сказано, что этап или группа этапов может
Следовательно, какая-либо последовательная группа этапов алгоритма может выполняться неоднократно, и требование конечности алгоритма исключает случай бесконечного количества выполнений любой группы этапов.
Рассмотрим пример, в котором последовательность предписанных действий необходимо выполнить несколько раз. Врач выписал больному лекарство, которое: 1)следует купить в аптеке и принимать каждый день 2)утром, 3)в обед и 4)вечером, а после выздоровления больному следует 5)пройти контрольное обследование.
Что можно сказать об этом примере?
Явно видна дискретность этого предписания и конечность количества этапов, из которых оно состоит.
Но из пяти этапов первый и пятый должны быть выполнены только один раз, а вот этапы 2, 3 и 4 необходимо выполнять неоднократно, в течении нескольких дней. Про такие этапы программисты говорят, что они образуют цикл.
09.11.2021
Внимательный анализ обсуждаемого предписания показывает, что оно составлено некорректно. В чём
09.11.2021
Внимательный анализ обсуждаемого предписания показывает, что оно составлено некорректно. В чём
Если по прошествии нескольких (3-5) дней больной выздоровеет, то согласно указанию врача он может переходить к пятому пункту — прохождению контрольного обследования и в этом случае результат окажется полученным за конечное количество выполнений 2, 3 и 4 этапов.
А что если больному лучше не станет? Если врач неправильно поставил диагноз?
Если пунктуально подходить к исполнению предписаний алгоритма (а только так и следует к ним подходить), то несмотря на то, что лекарство не помогает и больной не выздоравливает, он должен продолжать приём выписанного лекарства, вообще говоря, до бесконечности.
Пациент должен каждый день выполнять этапы два, три и четыре и никогда не сможет перейти к выполнению пятого этапа, поскольку условие завершения приёма лекарства не выполнено — выздоровление пациента не произошло.
Такую ситуацию принято называть бесконечным циклом. Отсюда следует, что корректный алгоритм не может быть сформулированным таким образом, чтобы возникал бесконечный цикл, чтобы какая-то группа этапов выполнялась бесконечно много раз.
09.11.2021
Любые современные компьютерные системы требуют не только конечного, но и явного
09.11.2021
Любые современные компьютерные системы требуют не только конечного, но и явного
Пример неявного задания этапов: 1+1/4+1/9+…+1/100 ─ подразумеваются действия по аналогии.
Детерминированность (определённость, однозначность) алгоритма означает, что алгоритм должен быть построен так, чтобы любой его исполнитель, выполняя действия алгоритма в одних и тех же исходных условиях, всегда получал один и тот же конечный результат.
Не допускается любая неопределенность, неоднозначность, случайность в выполнении действии или определении порядка их выполнения. Каждый следующий этап исполнения, а также все действия следующего этапа алгоритма должны однозначно определятся состоянием на текущем этапе.
Рассмотрим в качестве примера алгоритма инструкцию по начислению заработной платы. Допустим, что два разных бухгалтера, абсолютно точно следуя инструкции и не совершив ни одной ошибки, выполнили расчёты зарплаты для одного и того же коллектива за один и тот же период и получили при этом разные результаты, различные суммы выплат одному и тому же сотруднику.
09.11.2021
Это может означать только одно: инструкция начисления зарплаты составлена таким образом
09.11.2021
Это может означать только одно: инструкция начисления зарплаты составлена таким образом
В связи с обсуждением определённости, однозначности алгоритмов, необходимо Отметить, что существуют особые разновидности алгоритмов, которые называются вероятностными и недетерминированными.
Вероятностными называются алгоритмы, к которых имеются действия, связанные со случайными событиями.
Недетерминированными называются алгоритмы, в которых на некотором этапе их выполнения возникает несколько различных вариантов действий. После чего каждый из вариантов выполняется отдельным исполнителем.
09.11.2021
Потенциальная выполнимость (результативность, направленность, завершаемость) алгоритма подразумевает направленность, нацеленность алгоритма на
09.11.2021
Потенциальная выполнимость (результативность, направленность, завершаемость) алгоритма подразумевает направленность, нацеленность алгоритма на
Это в свою очередь означает, что алгоритм может содержать только такие действия, которые исполнитель в состоянии выполнить.
Если всё же по смыслу решаемой задачи, или по способу её решения предполагается, что появление невыполнимого действия возможно, то такая ситуация должна специальным образом контролироваться и в алгоритме должно быть указано, что в этом случае следует считать результатом исполнения алгоритма.
Например, алгоритм не должен содержать этапов, на которых от исполнителя потребуется выполнить деление на нуль, вычислить логарифм отрицательного числа и т.д.
Наличие, скажем, действия деления в том случае, если знаменатель всё таки может оказаться равным нулю, означает, что в таком алгоритме должна быть предусмотрена проверка знаменателя на равенство нулю.
09.11.2021
И при обнаружении такого равенства должно быть определено, что считать результатом,
09.11.2021
И при обнаружении такого равенства должно быть определено, что считать результатом,
Обычно, в таких ситуациях в алгоритме предусматривается выдача диагностического сообщения с указанием места появления невыполнимого действия, после чего выполнение алгоритма завершается. Результатом исполнения алгоритма при этом считается диагностическое сообщение.
Алгоритм не содержит ошибок, если он даёт правильные результаты для любых допустимых исходных данных
Возникновение в алгоритме неконтролируемых действий, которые исполнитель не может выполнить, означает наличие в алгоритме ошибок. Кроме того, алгоритм содержит ошибки, если приводит к получению неправильных результатов либо вообще не даёт результатов.
Итак, исполнение алгоритма может завершиться за конечное время с получением требуемого результата только в том случае, если: 1) алгоритм не содержит ошибок, 2) алгоритм применяется к корректным, допустимым входным данным и 3) в алгоритме предусмотрена реакция на возникновение невыполнимых действий.
В противном случае исполнение алгоритма за конечное время может не завершится, будет получен неверный результат, либо результат вообще не будет получен, так как исполнение алгоритма прервется невыполнимым действием.
09.11.2021
Понятность (элементарность) алгоритма предполагает что на каждом этапе правило выполнения действий
09.11.2021
Понятность (элементарность) алгоритма предполагает что на каждом этапе правило выполнения действий
Это требование также означает, что любой этап алгоритма должен содержать только такие действия, способ выполнения которых известен исполнителю. Иначе говоря, все предусмотренные в алгоритме действия должны входить в систему команд исполнителя.
Кроме того, алгоритм должен быть задан в форме, которая известна исполнителю. Например, для исполнителя-компьютера алгоритм должен быть в конечном счете задан в двоичном алфавите. Получается, что требование понятности, элементарности относительно, оно всегда зависит от исполнителя алгоритма.
Массовость (универсальность) алгоритма означает, что набор исходных величин алгоритма может выбираться из некоторого, возможно, бесконечного множества наборов.
Для каждого алгоритма существует некоторое множество наборов величин, которые допустимы в качестве исходных данных. Например, в алгоритме деления вещественных чисел делимое может быть любым числом, а делитель не может быть равен нулю.
09.11.2021
Алгоритм служит, как правило, для решения не одной конкретной задачи, а
09.11.2021
Алгоритм служит, как правило, для решения не одной конкретной задачи, а
Интуитивного понятия алгоритма, применяемого совместно с перечисленными требованиями, оказывается достаточно для большинства практических проблем информатики — разработки алгоритмов решения самых разных задач и написания работоспособных программ для компьютера.
С другой стороны, система правил, инструкций, указаний, которая не удовлетворяет этим требованиям, не обладает описанными свойствами, не может считаться алгоритмом. Такую систему правил невозможно записать в форме программы, пригодной для исполнения на компьютере.
09.11.2021
Алгоритмизация
Использование компьютеров для решения различных задач, обработка любых данных на
09.11.2021
Алгоритмизация
Использование компьютеров для решения различных задач, обработка любых данных на
Следовательно, возникает необходимость построения алгоритма, который служит для решения поставленной задачи. После того, как алгоритм построен, соответствующую ему программу можно реализовать на любой конкретной модели компьютера.
Изучение и развитие методов и приёмов построения алгоритмов являются содержанием отдельного раздела информатики, который принято называть алгоритмизацией.
Построение алгоритма на основе методов предлагаемых алгоритмизацией является первым и обязательным этапом в процессе разработки программ и решении задач на компьютере.
Модель компьютера или язык программирования заранее могут быть неизвестны, кроме того, может понадобиться перенос реализации с одной модели на другую или же с одного языка на другой.
09.11.2021
Поэтому разработку алгоритма предпочитают не привязывать ни к моделям компьютеров, ни
09.11.2021
Поэтому разработку алгоритма предпочитают не привязывать ни к моделям компьютеров, ни
Именно в связи с этим возникло понятие алгоритмизации, когда сначала разрабатывается, строится алгоритм, а затем на его основе как результат программирования (часто говорят кодирования) получают программу для любой модели компьютера или на любом желательном языке.
Построенный алгоритм необходимо некоторым образом фиксировать, записывать просто для его сохранения, для передачи его другому человеку или для предоставления во всеобщее использование, а также для передачи конкретному исполнителю, например, компьютеру, чтобы получать решения конкретных задач.
Способы задания алгоритмов
Алгоритм может быть сформулирован устно, в виде письменного сообщения, задан в виде картинки или какой-либо их последовательности и т.д. Но в любом случае алгоритм представляет собой сообщение, зафиксированное в некотором алфавите, а его запись подчиняется определённым правилам.
09.11.2021
В информатике предъявляются особые требования к заданию алгоритмов в связи с
09.11.2021
В информатике предъявляются особые требования к заданию алгоритмов в связи с
Поэтому используемые в информатике способы задания алгоритмов должны наделять записываемые алгоритмы всеми необходимыми свойствами, обеспечивать удовлетворение всех предъявляемых к ним требований
Наиболее важные для информатики способы:
словесный;
двоичное кодирование;
графические;
словесно-формульные.
09.11.2021
Словесный способ задания алгоритма состоит в его формулировке средствами естественного языка
09.11.2021
Словесный способ задания алгоритма состоит в его формулировке средствами естественного языка
В общем случае алгоритм есть сообщение, заданное в некотором алфавите. Известно, что его можно закодировать в двоичном алфавите. В этом случае может быть получен алгоритм, который может быть использован для непосредственного исполнения на компьютере.
Недостаток ─ непосредственное восприятие человеком алгоритма, заданного в двоичном алфавите, затруднено.
Более точно: для исполнения на компьютере алгоритм должен быть представлен в специальной форме, в которой его этапы имеют вид двоичных машинных команд, принадлежащих системе команд процессора этого компьютера.
Такую форму записи, обеспечивающую свойство понятности алгоритма исполнителю — компьютеру, принято называть машинным языком (машинным кодом). Алгоритм, представленный на машинном языке, называют машинной программой.
Процессор компьютера ничего кроме машинного языка «не понимает».
09.11.2021
Блок-схемой называется графическое изображение структуры алгоритма. Блок –схема представляет собой группу
09.11.2021
Блок-схемой называется графическое изображение структуры алгоритма. Блок –схема представляет собой группу
Начало
Конец
Основные элементы блок-схем
Основными достоинствами этого способа является его простота, гибкость, высокая степень наглядности. Однако, задание достаточно сложных алгоритмов на этом уровне затруднено из-за существенно возрастающей громоздкости. Кроме того, алгоритмы, заданные в таком виде непосредственно не воспринимаются компьютером.
09.11.2021
Выявленные особенности блок-схем определяют характер их применения: в настоящее время блок-схемы
09.11.2021
Выявленные особенности блок-схем определяют характер их применения: в настоящее время блок-схемы
Практически сразу после того, как обнаружились проблемы и сложности программирования на машинном языке, а также неприспособленность блок-схем для автоматического перевода на машинный язык специалисты начали такие искать способы задания алгоритмов, которые:
более удобны для людей, чем сам машинный язык;
не зависят от системы команд конкретных моделей компьютеров;
обеспечивают возможность автоматического преобразования алгоритмов на машинный язык.
Вначале на этом пути появились очень близкие к машинным языкам автокоды (от автоматические коды) и ассемблеры (от англ. assemble — сборка, соединение). В этих системах задания алгоритмов для записи команд программы используются не двоичные строки, а некоторые эквивалентные им словесные обозначения. Пример таких обозначений можно найти на рисунке, содержащем способы задания алгоритмов.
09.11.2021
Основным достоинством таких способов задания алгоритмов является то, что преобразование на
09.11.2021
Основным достоинством таких способов задания алгоритмов является то, что преобразование на
Автокоды и ассемблеры всегда связаны с машинным языком конкретной модели компьютера, и как только происходит появление новой более мощной модели, приходится, вообще говоря, разрабатывать и новые языки-ассемблеры, и новые программы-переводчики.
Поэтому довольно быстро возникло желание иметь способы задания алгоритмов, независящие от систем команд конкретных моделей компьютеров, но сохранившие при этом возможность автоматического перевода на машинный язык любой модели компьютера.
09.11.2021
Словесно-формульный способ базируется на естественном или узко-профессиональном языке. Чтобы избежать неоднозначности,
09.11.2021
Словесно-формульный способ базируется на естественном или узко-профессиональном языке. Чтобы избежать неоднозначности,
Кроме автоматизации перевода выявилась возможность значительно упростить разработку алгоритмов, в которых требуется выполнять множество вычислений по различным математическим формулам. Затем появились другие проблемные области такие как, физика, обработка текстов, экономика, в которых обнаружилась возможность применения компьютеров.
Всё это учитывалось специалистами, и по мере развития способов задания алгоритмов и расширения их возможностей, эти способы всё больше удалялись от машинных языков и приближались к естественным и профессиональным языкам, используемым в различных проблемных областях. Таким образом возникло множество вариантов словесно-формульного способа задания алгоритмов, которые впоследствии получили название алгоритмических языков.
09.11.2021
Алгоритмическим языком называется формальная система представления (записи) алгоритмов, которая может быть
09.11.2021
Алгоритмическим языком называется формальная система представления (записи) алгоритмов, которая может быть
Программы, которые осуществляют автоматический перевод, получили название компиляторов (англ. compile — компилятор, переводчик), часто их называют ещё и трансляторами (англ. translator — переводчик).
Автоматическое преобразование на машинный язык программы, которая перед этим сформулирована на алгоритмическом языке, называется трансляцией или компиляцией.
09.11.2021
Разберём подробнее общую схему использования алгоритмических языков. Для любого использования компьютера
09.11.2021
Разберём подробнее общую схему использования алгоритмических языков. Для любого использования компьютера
Записывать алгоритмы сразу же на машинном языке очень сложно. Поэтому сначала специалист разрабатывает и записывает алгоритм на некотором более удобном, чем машинный алгоритмическом языке, получая тем самым исходную программу.
Исходную программу компьютер выполнить не может, она написана не в двоичной системе, поэтому сначала её необходимо преобразовать на машинный язык. Для такого преобразования применяются программы-переводчики — трансляторы, которые должны быть предварительно установлены на компьютер.
Подчеркнём, что трансляторы — это специализированные машинные программы, то есть программы, которые уже представлены на машинном языке и потому они могут непосредственно выполняться процессором компьютера.
Транслятор запускается на выполнение и на его вход передается исходная программа на алгоритмическом языке. Во время выполнения трансляции исходная программа преобразуется (переводится) на машинный язык. Результатом такого автоматического перевода как раз и является формируемая на выходе транслятора целевая машинная программа, которая уже может быть воспринята, «понята» и выполнена процессором компьютера.
09.11.2021
Для выполнения целевой программы её необходимо определённым образом передать компьютеру и
09.11.2021
Для выполнения целевой программы её необходимо определённым образом передать компьютеру и
Не следует путать алгоритмический язык с родственным ему понятием язык программирования. Язык программирования это любой язык для представления программ, которые сразу же или после ряда преобразований могут быть исполнены компьютером.
Таким образом, все машинные языки автоматически считаются языками программирования. Далее из этого определения следует, что языками программирования могут считаться только те алгоритмические языки, для которых существует возможность их автоматического перевода на машинный язык некоторого компьютера. Это, например, такие языки как Паскаль, Delphi, Cи, Java и т.д.
09.11.2021
Однако не любой алгоритмический язык может считаться языком программирования, и точно
09.11.2021
Однако не любой алгоритмический язык может считаться языком программирования, и точно
Можно указать на группу так называемых императивных языков программирования, которые одновременно являются алгоритмическими языками.
При этом существует много других групп языков программирования: функциональных, логических, скриптовых и т.д., которые построены на абсолютно других принципах по сравнению с алгоритмическими языками, но при этом обеспечивают возможность получения полноценной машинной программы.
Ещё на начальном этапе развития в качестве основы для построения алгоритмических языков были выбраны естественный и математический языки. Близость к естественному языку предоставляет необходимый уровень удобства человеку, а математическая строгость — возможность последующего автоматического преобразования на машинный язык.
В этой форме алгоритмы и программы записываются как некоторые, довольно близкие к естественному языку тексты, как последовательности слов и математических формул, поэтому читать, да и создавать их значительно проще, чем машинные программы.
09.11.2021
Самое главное в этом способе задания алгоритмов состоит в том, что:
09.11.2021
Самое главное в этом способе задания алгоритмов состоит в том, что:
Важно подчеркнуть, что правила алгоритмических языков, в отличие от грамматических правил естественных языков не допускают никаких исключений.
В общем случае система любого языка программирования включает в себя как обязательные элементы:
алфавит, содержащий множество знаков, которые могут использоваться при записи текста алгоритма (программы);
множество правил, обеспечивающих дискретность, конечность, однозначность и понятность алгоритма, а также возможность перевода на машинный язык;
комплексы программ, которые выполняют автоматический перевод исходных программ на машинный язык.
09.11.2021
Отметим терминологическую разницу в применении в информатике слов «алгоритм» и «программа».
09.11.2021
Отметим терминологическую разницу в применении в информатике слов «алгоритм» и «программа».
Завершая обсуждение способов задания алгоритмов, сравним запись алгоритма на алгоритмическом языке с другими способами задания:
по сравнению с естественными языками, алгоритмические языки обеспечивают наличие у алгоритмов всех необходимых свойств, в том числе однозначность, дискретность и т.д., а также возможность автоматического перевода на машинный язык;
в отличие от машинного языка программа на алгоритмическом языке непосредственно процессором компьютера не воспринимается, нужен дополнительный этап трансляции на машинный язык, но писать и читать программы на алгоритмических языках несоизмеримо легче, чем на машинных языках;
09.11.2021
в отличие от ассемблеров написание программы на высокоуровневых языках ориентировано
09.11.2021
в отличие от ассемблеров написание программы на высокоуровневых языках ориентировано
по сравнению с блок-схемами запись на алгоритмическом языке отличается компактностью, удобочитаемостью, и что самое главное, возможностью автоматического перевода на машинный язык.
09.11.2021
Линейные алгоритмы. Отличительным свойством линейных алгоритмов является выполнение этапов алгоритма в
09.11.2021
Линейные алгоритмы. Отличительным свойством линейных алгоритмов является выполнение этапов алгоритма в
Ветвления. Отличительным свойством является наличие в алгоритме хотя бы одного этапа, на котором происходит выбор одного из нескольких возможных дальнейших вариантов выполнения действий. В простейшем случае ветвления в алгоритме предусматривается два варианта.
Циклы. Отличительным свойством является наличие этапа или группы этапов алгоритма, которые выполняются неоднократно.
Типы алгоритмов
09.11.2021
Начальные понятия алгоритмических языков
Алгоритмический язык представляет собой систему, которая включает
09.11.2021
Начальные понятия алгоритмических языков
Алгоритмический язык представляет собой систему, которая включает
Из этого определения следует, что в системе правил, совокупность которых, собственно говоря, и образует алгоритмический язык, можно выделить две группы: синтаксические правила, которые определяют возможные способы записи текстов алгоритмов, и семантические правила, связывающие конструкции алгоритма с их смыслом и способом выполнения.
Синтаксис (греч. syntaxes — составлять) языка представляет собой множество правил, определяющих комбинации знаков алфавита, которые считаются для этого языка правильно записанным алгоритмом или же некоторым его правильным фрагментом
Семантика (греч. semanticos — обозначающий) языка представляет собой множество правил, объясняющих смысл и свойства конструкций этого языка.
09.11.2021
Следует напомнить, что наличие у алгоритма свойства однозначного задания действий, является
09.11.2021
Следует напомнить, что наличие у алгоритма свойства однозначного задания действий, является
Каждое синтаксическое правило алгоритмического языка представляет собой точное определение, которое должно обеспечивать однозначное понимание любых возможных способов построения и записи соответствующей языковой конструкции.
Но сами эти правила также необходимо каким-то образом формулировать, причём способ их задания должен обеспечивать однозначность понимания самих правил. Другими словами нужен язык для описания синтаксиса алгоритмических языков. Такие языки существуют и их принято называть метаязыками.
Метаязыком называется система правил описания синтаксиса алгоритмических языков. Эти правила определяют все возможные способы записи любых допустимых конструкций в программах на описываемом алгоритмическом языке
09.11.2021
Одним из самых распространённых метаязыков является универсальный язык БНФ (от Бекуса
09.11.2021
Одним из самых распространённых метаязыков является универсальный язык БНФ (от Бекуса
В метаязыке БНФ правило, определяющее способ построения конструкции алгоритмического языка, состоит из двух частей, которые отделяются друг от друга знаком . Это знак понимается как «есть по определению». Слева от него в уголковых скобках указывается название определяемой конструкции или понятия, а справа — собственно определение:
<имя понятия> → определение 1 | определение 2 …
Текст определения может состоять из знаков используемого алфавита и других понятий, которые должны быть определены в каком-либо другом синтаксическом правиле языка.
При наличии нескольких вариантов определения одного и того понятия варианты отделяются друг от друга вертикальной чертой, которая понимается как союз «или».
Во всех правилах действует общее соглашение: названия определяемых или уже определённых понятий заключаются в уголковые скобки, а знаки алфавита — не заключаются.
09.11.2021
Разберём пример определения:
<цифра>→ 0 | 1 | 2 | 3
09.11.2021
Разберём пример определения:
<цифра>→ 0 | 1 | 2 | 3
Здесь определяемым является понятие цифра, а справа десять различных вариантов его определения. Понимается этот текст следующим образом: «Цифра есть по определению знак 0, либо знак 1, либо знак 2, либо знак 3 и т.д.».
Таким образом, римские цифры I, V, X, а также «цифры» шестнадцатеричной системы счисления A, B, C, D, F и E с точки зрения этого определения не являются цифрами.
Комментарии
Текст программы на любом алгоритмическом языке предназначен не только для передачи его транслятору. Этот текст приходится неоднократно читать, во-первых, самому автору, причём это может потребоваться спустя некоторое, возможно значительное время, когда многое из того, что было сделано ранее уже забылось, а, во-вторых, другим программистам, заказчику работы, а также во многих других случаях.
Поэтому в тексты алгоритмов и программ целесообразно включать различные пояснения на естественном языке, которые предназначены читающим эти тексты людям.
09.11.2021
Формой включения пояснений в текст программы являются комментарии, которые представляют собой
09.11.2021
Формой включения пояснений в текст программы являются комментарии, которые представляют собой
В различных языках правила включения комментариев в текст программы различны. Но в любом случае комментарий представляет собой произвольную цепочку знаков, которая некоторым образом выделена из остального текста алгоритма.
//так выглядит однострочный комментарий и в Паскале и в Си
{ так оформляется многострочный комментарий в Паскале }
(* другой способ оформления многострочного комментария в Паскале *)
/* а это оформление многострочного комментария в Си */
Существует два основных способа включения комментариев: однострочный и многострочный:
09.11.2021
Присутствие комментариев в алгоритме или программе не является обязательным. Однако полное
09.11.2021
Присутствие комментариев в алгоритме или программе не является обязательным. Однако полное
Алфавит языка
Алфавит любого языка программирования, как и вообще любой алфавит, представляет собой точно зафиксированное множество знаков
Следует иметь ввиду, что в отличие от естественных языков, в алгоритмических языках, во-первых, знаки алфавита в целом неупорядочены, и, во-вторых, являются знаками в некотором, обобщенном смысле, например, ключевое слово for в алгоритмических языках Паскаль и Си считается одним знаком алфавита.
Различные языки имеют, естественно, различные алфавиты, но в целом, практически любой алгоритмически язык содержит одни и те же группы знаков.
09.11.2021
Например, в языке Паскаль элементы алфавита называются основными символами:
<основной символ>→<буква>|<цифра>|<специальный
09.11.2021
Например, в языке Паскаль элементы алфавита называются основными символами:
<основной символ>→<буква>|<цифра>|<специальный
Это определение понимается следующим образом: основной символ это либо <буква>, либо <цифра>, либо <специальный знак>. Фактически понятие «основной символ» сводится к другим перечисленным справа понятиям, каждый из них, следовательно, должен иметь своё отдельное определение.
<буква>→ a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w | x | y | z | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z
<специальный знак>→<знак арифметической операции>|<знак отношения>| <разделитель>|<ключевое слово>
<знак арифметической операции>→ + | - | * | /
<знак отношения >→ = | < | <= | > | >= | <>
разделитель>→ ⎵ (знак пробела) | . | , | ; | : | ( | ) | [ | ] | { | } | ↑ | ‘ | :=
09.11.2021
<ключевое слово>→ and | array | begin | case | const
09.11.2021
<ключевое слово>→ and | array | begin | case | const
Как видно из этих определений в программах на Паскале невозможно использование каких либо надстрочечных и подстрочечных знаков. Вообще, ни один знак, кроме тех, которые перечислены в этих определениях, не может появиться в программе на этом языке. Однако, что в комментариях, которые предназначены исключительно для человека, можно использовать любой символ, имеющийся на клавиатуре компьютера.
Имя (идентификатор)
Чтобы иметь возможность как-то указывать в алгоритмах и программах, а также в операционных системах, в базах данных и в других информационных системах на нужные объекты и конструкции, их принято определенным образом обозначать, используя для этого имена.
09.11.2021
Имя или идентификатор (от англ. identification — опознание) служит для обозначения
09.11.2021
Имя или идентификатор (от англ. identification — опознание) служит для обозначения
В качестве имён могут использоваться, например, такие последовательности знаков: a, i, counter, z56yfw9q% .
Более конкретные правила образования имен регламентируются в описании языков, и в различных языках и информационных системах эти правила различны. В основном эти правила уточняют приведённое выше общее определение имени. Подробнее о выборе имен см. параграф 7.4.
Данные
В алгоритмах и программах всегда используются какие-либо данные: исходные данные вводятся, затем они как-то обрабатываются и возникают некоторые промежуточные данные, выходные данные — результаты — выводятся: отображаются на дисплее, печатаются на бумаге и т.д.
09.11.2021
Данными называются дискретные сообщения в форме, определяемой правилами используемого способа задания
09.11.2021
Данными называются дискретные сообщения в форме, определяемой правилами используемого способа задания
К данным в алгоритмах и программах относятся:
непосредственные значения — неизменяемые объекты, которые представляют сами себя;
константы — имена, закрепленные за непосредственными значениями и используемые вместо них;
переменные — объекты, значения которых при необходимости могут быть изменены;
значения выражений и функций, которые можно с определённым упрощением рассматривать как математические соотношения и формулы, определяющие способ вычисления этих значений.
09.11.2021
Основная разновидность непосредственных значений — числа, например, -5, 0, 3.1415926 и
09.11.2021
Основная разновидность непосредственных значений — числа, например, -5, 0, 3.1415926 и
Использование непосредственных значений в алгоритмах может вызвать некоторые неудобства. Если, например, одно и то же значение неоднократно встречается на различных участках алгоритма, его приходится каждый раз его заново записывать, при этом не исключено появление ошибок.
В таких случаях целесообразно закрепить за значением какое-либо имя и указывать это имя везде, где требуется использовать значение. Например, чтобы каждый раз не записывать число 3.1415926, следует закрепить за ним имя, скажем, pi и указывать его вместо числа. Такие имена принято называть константами.
09.11.2021
Переменные
В действиях, которые задаются в алгоритме, кроме непосредственных значений или заменяющих
09.11.2021
Переменные
В действиях, которые задаются в алгоритме, кроме непосредственных значений или заменяющих
В информатике для выполнения действий с такими величинами вводится понятие переменной.
Переменной называется программная конструкция, которая может: 1) принимать значение, 2) сохранять его сколько угодно долго без изменения, 3) при необходимости это значение может быть изменено требуемым образом.
Переменные в алгоритмах рассматриваются как некоторые носители значений, как своеобразные сейфы для их хранения.
Чтобы запомнить некоторое значение его закрепляют за выбранной для этой цели переменной — кладут в «сейф».
Переменная сохраняет значение в неизменном состоянии столько, сколько это требуется алгоритму.
09.11.2021
Как только по ходу выполнения алгоритма значение почему-либо следует изменить, над
09.11.2021
Как только по ходу выполнения алгоритма значение почему-либо следует изменить, над
Единственный способ сохранить в алгоритме некоторое значение, а потом его как-то использовать в вычислениях состоит в его закреплении за некоторой переменной в качестве текущего значения. Про такое действие говорят: присваивание значения переменной.
Из этого обсуждения видно, что понятие переменной в информатике практически аналогично соответствующему математическому понятию. Но в математике рассматриваются, как правило, числовые переменные, а вот в информатике природа значений переменных может быть любой. Например, множествами возможных значений переменных могут быть названия дней недели, месяцев в году, названия товаров и их цветовых оттенков и т.д.
Переменные в алгоритмах обозначаются именами, характеризуются типом и имеют, либо не имеют текущего значения
Переменные, не имеющие текущего значения, называются неопределенными, и их использование в алгоритмах существенно ограниченно
09.11.2021
Тип переменной
Любые данные в компьютере представлены некоторым двоичным кодом и для
09.11.2021
Тип переменной
Любые данные в компьютере представлены некоторым двоичным кодом и для
Однако с точки зрения программиста данные в алгоритмах и программах всегда наделены некоторым смыслом, определённым образом интерпретируются (англ. interpretation — толкование, объяснение). Скажем, одно и то же число может рассматриваться и как вес товара и как расстояние до некоторой точки.
Любая конкретная интерпретация двоичного кода определяется формой и структурой его представления в программе, которые выбраны программистом. А этот выбор, в конечном счёте, зависит от решаемой задачи и удобства выполнения действий над данными, которые, как видно из примера, могут иметь самую разную природу.
Так возникает проблема выбора формы представления данных в алгоритме, которая в наилучшей степени соответствует поставленной задаче. Решение этой задачи привело к появлению сначала понятия типа данных, а впоследствии и целостной концепции типа данных.
09.11.2021
Концепция (от лат. conceptio — понимание, система) представляет собой определённый способ
09.11.2021
Концепция (от лат. conceptio — понимание, система) представляет собой определённый способ
Основной принцип этой концепции заключается в том, что любые используемые в алгоритмах данные, то есть любое значение, любая константа и переменная, а также все используемые выражения и функции относятся к некоторому вполне определённому типу
Тип представляет собой важнейшую характеристику данных, используемых в алгоритмах или программах. Тип определяет: 1)множество допустимых значений переменой, 2)множество операций, которые могут выполняться над этими значениями, 3)структуру значения (скаляр, вектор и т.д.), а также 4) способ машинного представления значения.
В какой-то степени тип данных в алгоритмах и программах похож на базовые характеристики физических тел, такие как геометрические размеры и масса, поскольку тип фактически определяет всё, что с данными можно делать, а также как они изображаются, записываются в алгоритмах, в программах и в памяти компьютера.
09.11.2021
Различные типы данных имеют различные множества допустимых значений. Так, целые числа
09.11.2021
Различные типы данных имеют различные множества допустимых значений. Так, целые числа
Над данными разных типов допускается выполнение различных операций. Например, действия сложение и умножение допустимы над числовыми данными, а действия отрицание, конъюнкция и дизъюнкция — над логическими. При этом логические значения складываться и умножаться не могут, а для чисел не определены логические операции.
Значения разной природы имеют различную структуру, они по-разному устроены. Например, такие величины как давление, время, температура полностью задаются одним числом, а чтобы задать вектор, скажем в пространстве, необходимо указать три компоненты, три его координаты, каждое из которых фактически является вещественным числом. Без указания структуры значения невозможно обеспечить правильность выполнения действий над ним.
И, наконец, данные разной природы по-разному кодируются для их представления в памяти компьютера.
09.11.2021
Все эти четыре аспекта интегрируются, объединяются в характеристике, которая и называется
09.11.2021
Все эти четыре аспекта интегрируются, объединяются в характеристике, которая и называется
В различных алгоритмических языках используются самые разные наборы типов. Для каждого из них в языках вводятся имена и точно определяются все их характеристики. Четыре обсуждаемых ниже типа целый, вещественный, символьный и логический в той или иной форме включены практически во все современные алгоритмические языки.
Тип boolean (char, bool)
Два логических значения false и true. Причем, false В качестве машинного представления этих значений можно было бы использовать состояние одного бита: нулевое значение бита естественно считать кодом значения false, а единичное — кодом значения true. Однако минимальной доступной процессору самостоятельной единицей памяти является байт. В качестве кода значения false выбрано нулевое значение байта 0000 00002, а кодом значения true считается любой ненулевой восьмибитный код.
09.11.2021
Логические выражения, то есть выражения, которые имеют значение логического типа, играют
09.11.2021
Логические выражения, то есть выражения, которые имеют значение логического типа, играют
Тип integer, int
В информатике считается, что данные целого типа всегда задаются абсолютно точно.
Как правило, в алгоритмических языках предусматривается не один целый тип, а семейство целочисленных типов, которые отличаются друг от друга форматом и длиной поля в машинном представлении, и, как следствие, различными диапазонами возможных значений. Эти диапазоны всегда являются подмножествами математического множества Ζ.
Так у целого типа с названиями byte (Паскаль), unsigned char (Си) длина поля равна одному байту, а значение представлено в беззнаковом формате с фиксированной точкой, поэтому множество возможных значений принадлежит интервалу [0, 255].
У стандартного целого типа integer (Паскаль), int (Си) длина поля равна двум байтам и используется знаковое представление формата с фиксированной точкой, отсюда диапазон значений [–32768, 32767].
09.11.2021
Целые числа в программах на алгоритмических языках имеет вид последовательности цифр,
09.11.2021
Целые числа в программах на алгоритмических языках имеет вид последовательности цифр,
Над данными целых типов определены арифметические операции сложения ( + ), вычитания ( - ), умножения ( * ), целочисленного деления (div — Паскаль, / — Cи) и остатка от деления (mod — Паскаль, % — Cи).
Для данных целых типов определены все операции сравнения. Результат имеет логический тип.
У операций целочисленного деления и остатка от деления оба операнда обязаны быть целыми, результат также получается целый.
Важнейшим для информатики является представление о вещественных данных как о результатах всевозможных измерений или же математических операций над измеренными значениями. В связи с этим вещественные данные считаются принципиально приближенными, неточными. Именно поэтому множество R* вещественных чисел информатики не содержит целых, которые по своей природе являются точными: множество Ζ не пересекается с множеством R*.
Тип real, float
Для значений этого типа выделяются поля длиной 4 байта, точность значений равна 7–8-ми десятичным цифрам, а их модули принадлежат диапазону (1,4×10–45; 3,4× 1038).
09.11.2021
Внешним признаком вещественного числа в алгоритмических языках является наличие в его
09.11.2021
Внешним признаком вещественного числа в алгоритмических языках является наличие в его
Примеры записи вещественных чисел: 7.3 → 7,3; -5.0→ –5,0; 19E6 → 19×106,
-1.34E-20 → –1,34×10-20.
Для данных вещественного типа определены все четыре арифметические операции. Результат получается вещественного типа.
Для вещественных типов определены все операции сравнения, но их использование имеет одну особенность.
Несмотря на то, что для вещественных данных разрешается использование операций сравнения «равно» и «не равно», делать это не рекомендуется.
Применение отношений «равно» и «не равно» для вещественных данных некорректно, так как сравнение приближенных чисел в отношении «равно» обычно даёт результат false, а сравнение в отношении «не равно», как правило, имеет результат true.
09.11.2021
Вместо строгих неравенств «равно» и «не равно» для вещественных данных рекомендуется
09.11.2021
Вместо строгих неравенств «равно» и «не равно» для вещественных данных рекомендуется
Кроме того, вместо сравнения вещественных переменных на равенство более корректной является проверка их близости. Например, вместо равенства x=y лучше использовать неравенство вида |x-y| Во всех арифметических операциях и сравнениях целые и вещественные данные могут использоваться совместно. Это значит, что один из операндов может быть вещественным, а другой — целым. Эта возможность требует осторожности, так как пренебрежение принципиальным различием между целыми и вещественными данными, которое вызвано их точным и приближённым характерами, влечёт за собой неоднозначность и может привести к серьёзной ошибке во время исполнения алгоритма. Возьмём, например, отношение 5<>5.0 (Паскаль), 5!=5.0 (Си). обсуждаемое соотношение должно всегда иметь значение false, но скрытые детали реализации трансляторов могут дать любой результат вычислений, что влечёт за собой неоднозначность алгоритма, поэтому таких операций следует всемерно избегать.
09.11.2021
Тип char
Непосредственными значениями символьного типа по определению являются одиночные символы текстов.
09.11.2021
Тип char
Непосредственными значениями символьного типа по определению являются одиночные символы текстов.
п
Множество значений определяется кодовой таблицей и возможностями клавиатуры. Операции: +, =, <, и т.д. Машинное представление: текстовый формат ASCII, Unicode.
09.11.2021
Величины, используемые в различных предметных областях, в том числе в технических
09.11.2021
Величины, используемые в различных предметных областях, в том числе в технических
Структурированные типы данных
Самыми простыми являются скалярные величины, такие как давление, температура, время. Значения этих величин не имеют внутренней структуры, они неделимы на составные части. Чтобы полностью задать скалярную величину остаточно указать только одно число.
Более сложную структуру имеют, например, вектора. Значение любого вектора состоит из нескольких компонентов — его координат. Например, вектор
представлен тремя составляющими его значение координатами x1, x2 и x3.
Действия могут выполняться над вектором целиком, то есть над совокупностью всех его координат. Вместе с тем каждая координата может участвовать в вычислениях и как самостоятельная величина, а не только вместе со всем вектором
09.11.2021
Пусть, например, требуется умножить вектор на некоторое число, тогда в записи
09.11.2021
Пусть, например, требуется умножить вектор на некоторое число, тогда в записи
Эта запись означает, что на заданное число необходимо умножить все координаты вектора .
А можно, например, выяснить знак у какой-то конкретной координаты вектора, тогда с помощью номера указывается только требуемая координата: x3>0, и действие сравнения с нулём выполняется только над ней.
Необходимо понимать, что вектор может иметь только одно текущее значение, но это значение состоит из нескольких составляющих его элементов, которые могут использоваться в вычислениях как независимо друг от друга, так и совместно
Чтобы иметь возможность работать со структурированными величинами в алгоритмах необходимо точно описать внутреннюю структуру их значения: сколько элементов образует значение, какой тип они имеют, как можно выделить отдельный элемент. Такое описание связано с определением соответствующего типа данных.
Различают простые (скалярные, неструктурированные) и сложные (составные, структурированные) типы данных.
09.11.2021
Значения простых типов данных не имеют никакой внутренней структуры, это неделимые,
09.11.2021
Значения простых типов данных не имеют никакой внутренней структуры, это неделимые,
Все рассмотренные стандартные типы (целый, вещественный, символьный и логический) относятся к простым, скалярным типам данных, поскольку их значения состоят из одного элемента — числа, знака алфавита, логического значения. Переменные простых типов обычно для краткостти называют простыми переменными.
Значения сложных, структурированных типов данных составлены из нескольких значений каких-либо простых типов, они имеют некоторую внутреннюю структуру. Со значением составного, сложного типа можно работать как с единым целым, кроме того каждую его составную часть можно использовать самостоятельно, отдельно, независимо от всех остальных частей.
Значение скалярного типа представлено ровно одним компонентом (время, температура), значение структурированного типа представлено более чем одним компонентом (вектор, матрица).
09.11.2021
Примеры структурированных значений:
Структуры аналогичные векторам и матрицам в информатике принято называть
09.11.2021
Примеры структурированных значений:
Структуры аналогичные векторам и матрицам в информатике принято называть
Различные структуры отличаются друг от друга количеством компонентов в значении, способом их обозначения и выборки.
В алгоритмах переменные структурированных типов, как и простые переменные, обозначаются именами. Имя переменной структурированного типа обозначает всю совокупность элементов, из которых состоит значение переменной — все координаты вектора или всю строку таблицы.
Например, имена x и A обозначают весь вектор и всю матрицу соответственно.
09.11.2021
Для выделения элементов массивов могут использоваться не только числа, поэтому конструкцию,
09.11.2021
Для выделения элементов массивов могут использоваться не только числа, поэтому конструкцию,
Для выделения отдельного компонента массива в квадратных скобках справа от названия указывается его номер или несколько номеров через запятую: w[5]; w[i+2]; A[1,2].
В языке Си, а также во многих родственных языках при указании отдельного элемента матрицы необходимо каждый индекс записывать в отдельной паре квадратных скобок: элементу матрицы A23 соответствует обозначение A[2][3].
Если требуется выполнить действие над элементом значения, его следует указать, выделить.
Данные типа запись представляют собой набор значений возможно разных типов, помещаемых в различные столбцы таблицы. При этом каждый столбец принято называть полем записи.
09.11.2021
Например, значение даты состоит из трёх полей, названия которых указаны в
09.11.2021
Например, значение даты состоит из трёх полей, названия которых указаны в
В тех случаях, когда речь идёт о полной дате некоторого события следует использовать имя Дата.
А для обозначения отдельных полей, отдельных составляющих записи применяются составные имена, которые образуются из нескольких обычных имен отделяемых друг от друга точкой.
В рассматриваемом примере чтобы указать какой месяц входит в дату, применяется составное имя Дата.Месяц, а имя Дата.Год служит для указания на входящий в дату год. Для первой строки таблицы имени Дата соответствует полное значение «9 Мая 1945», а составное имя Дата.Месяц имеет своим значением «Мая».
Описания
Еще одним важным принципом концепции типа данных является требование того, чтобы тип непосредственного значения, константы, переменной, выражения или функции определялся по внешнему виду объекта или по его описанию без выполнения какихлибо вычислений.
09.11.2021
Тип непосредственных значений всегда можно определить по способу их записи в
09.11.2021
Тип непосредственных значений всегда можно определить по способу их записи в
Тип констант, вообще говоря, также можно определить по их значениям, но обязательно требуется указание на то, что конструкция является константой.
Для переменных и функций тип должен указываться явно. Для такого рода указаний в алгоритмах используются конструкции, которые называются описаниями. В важных частных случаях описание связывает имя константы и её значение, а также имя переменной или функции и её тип.
Описанием называется конструкция алгоритма или программы, в которой зафиксировано имя программного объекта и в зависимости от его природы указаны важнейшие его атрибуты, такие как значение, тип и т.д.
Для паскалеподобных языков характерно размещение всех описаний в начале программы, до первой конструкции, задающей какое-либо действие. В Си-подобных языках описания могут размещаться практически в любом месте программы, потому константы и переменные обычно описывают в той точке программы, в которой они впервые появляются.
09.11.2021
В описании константы необходимо указать выбранное для неё имя и значение.
09.11.2021
В описании константы необходимо указать выбранное для неё имя и значение.
<описание константы> const <имя>=<непосредственное значение> (Паскаль)
<описание константы> const <тип><имя>=<непосредствен. значение>(Си).
Пусть, например, имеются описания:
Теперь в любом месте алгоритма имя pi представляет число 3.1425926. Удобство применения констант в алгоритмах в том, что для любого непосредственного значения можно подобрать краткое и запоминающееся имя, которое в любом месте представляет это значение, причём изменить указанное в описании значение константы невозможно.
Заметим, что в этих определениях предполагается, что существуют и определения понятий <непосредственное значение>, <имя>, <тип>. Если их нет, то определение <описание константы> окажется некорректным.
const pi=3.1415926 // Па, const float pi=3.1425926 // Си.
09.11.2021
Описания переменных простых типов в Паскале имеет вид:
<описание простого типа> <список
09.11.2021
Описания переменных простых типов в Паскале имеет вид:
<описание простого типа> <список
Эта формула понимается следующим образом: «Описание простого типа есть по определению конструкция, состоящая из одного имени или перечисленных через запятую имён переменных, относящихся к одному и тому же типу, за которым через двоеточие указывается имя типа».
Описания простых переменных в Cи определяются немного по-другому:
<описание простого типа> <имя типа> <список имен через запятую>
И в Паскале и в Cи несколько подряд расположенных описаний отделяются друг от друга точкой с запятой.
y: real; b: char; i, j, n, counter: integer; // Па
float y; char a; int i, j, n, counter; // Cи
09.11.2021
В Паскале описание массивов состоит из списка имен тех массивов, которые
09.11.2021
В Паскале описание массивов состоит из списка имен тех массивов, которые
Далее в квадратных скобках для вектора указывается диапазон изменения одного индекса, а для матрицы — диапазоны изменений двух индексов через запятую, причем первый диапазон соответствует строкам матрицы, а второй — её столбцам. Диапазон изменения состоит из минимального и максимального значений индекса, которые отделяются друг от друга двумя подряд расположенными точками.
После квадратных скобок следует ключевое слово of (из) и завершается описание указанием типа элементов.
x,у: array[1..3] of real; w: array[1..9] of real; A, В, С: array[1..3, 1..3] of integer // Па
В языке Си описание массива состоит из имени типа элементов массива, за которым расположено имя массива. Далее для вектора в квадратных скобах указывается количество компонент вектора, а для матрицы записываются две пары таких скобок, в первой паре задается количество строк, а во второй — количество столбцов матрицы.
float x[3], w[9]; int A[3][3]; // Cи
Внимание! Нумерация элементов массивов в языке Cи всегда начинается с нуля.
09.11.2021
Описания играют очень важную роль, так как транслятор использует их, во-первых,
09.11.2021
Описания играют очень важную роль, так как транслятор использует их, во-первых,
Выражения
Основным способом вычисления новых значений в алгоритмах является использование функций и выражений. Понятие функции в алгоритмических языках практически совпадает с одноименным математическим понятием
Любую стандартную функцию программист может использовать в своих программах без каких-либо дополнительных пояснений. Для этого требуется указать её название, а затем записать её аргумент или список аргументов в круглых скобках. Аргументами функций могут быть непосредственные значения, константы, переменные и выражения.
Для наиболее часто используемых на практике элементарных функций в алгоритмических языках определены имена, типы аргументов и результатов, а также способы вычисления их значений. Такие функции принято называть стандартными. Например, для вычисления квадратного корня из некоторого числа можно применить стандартную функцию с названием sqrt (англ. square — квадрат).
09.11.2021
Имя функции вместе с заключённым в круглые скобки аргументом или списком
09.11.2021
Имя функции вместе с заключённым в круглые скобки аргументом или списком
Например: sqrt — это имя функции, а sqrt(4.8) — это указатель функции.
Про результат, получающийся при вычислении значения функции, говорят: функция возвращает результат.
Выражения в алгоритмических языках являются практически полным аналогом хорошо известных арифметических и алгебраических выражений. Выражением называется текст, задающий правило вычисления значения
В выражения могут входить: непосредственные значения, константы, переменные и указатели функций, соединённые знаками различных операций.
При вычислении значений выражений действует порядок старшинства операции, который в разных алгоритмических языках определяется по значительно отличающимся друг от друга правилам.
Но в любом случае эти правила обеспечивают стандартный математический порядок старшинства — сначала выполняются действия умножения и деления, а потом умножения и сложения.
09.11.2021
Операции одинакового старшинства всегда выполняются слева направо. При необходимости изменить порядок
09.11.2021
Операции одинакового старшинства всегда выполняются слева направо. При необходимости изменить порядок
Правила записи выражений в разных алгоритмических языках достаточно сильно разнятся, но вместе с тем действуют некоторые общие для всех языков правила:
запрещаются «многоэтажные» конструкции, а также любые надстрочечные и подстрочечные знаки;
знак операции умножения * пропускать и заменять его точкой ⋅, как это делается в математических текстах, нельзя;
аргументы функций заключаются в круглые скобки;
в выражении должен соблюдаться баланс скобок, то есть количество открывающих скобок должно быть в точности равно количеству закрывающих скобок и т.д.
Пусть требуется записать в программе выражение соответствующее дроби:
09.11.2021
Ещё одно важное требование: значения всех переменных, входящих в выражение, должны
09.11.2021
Ещё одно важное требование: значения всех переменных, входящих в выражение, должны
При записи выражений необходимо также следить за типами, входящих в выражение операндов: они должны обеспечивать возможность выполнения вычислений. Например, запись 'a'+4 является ошибочной, так как невозможно сложить букву с целым числом.
Поскольку «многоэтажные» конструкции в алгоритмических языках запрещены, соответствующее обсуждаемой дроби выражение должно быть записано в одну строчку: a+b/c+d.
Но эта запись ошибочна, так как с учётом старшинства операций получим, что эта строка задаёт такие вычисления:
Необходимый порядок действий можно задать только применив круглые скобки: (a+b)/(c-d).
09.11.2021
Отношение в алгоритмических языках представляет собой два выражения одного и того
09.11.2021
Отношение в алгоритмических языках представляет собой два выражения одного и того
Примеры отношений: k > i–1, j<=3, x >= sqrt(r*r – y*y)
При записи в алгоритмических языках неравенств вида 0 Ошибка здесь в том, что отношение может включать только два выражения и только один знак отношения Неравенства вида следует трактовать как два неравенства x>0 и x≤1, которые должны выполняться одновременно, то есть, связаны логической операцией конъюнкция: x>0 ∧ x≤1. Правильный вариант записи: (x>0) and (x<=1) //Па (x>0) && (x<=1) //Cи
09.11.2021
Алгоритм задает, определяет действия, которые необходимо выполнить для достижения цели, а
09.11.2021
Алгоритм задает, определяет действия, которые необходимо выполнить для достижения цели, а
Операторы и управляющие конструкции
Основной конструкцией, с помощью которой в алгоритмах и программах задаются любые действия, является оператор.
Оператором называется самостоятельная, независимая от других конструкция, определяющая некоторый набор действий.
Все рассмотренные выше понятия и конструкции в этом смысле играют вспомогательную роль, так как они либо являются составными частями операторов, либо служат для правильной интерпретации действий, задаваемых в операторах.
В различные алгоритмические языки включены разные наборы операторов. Но этот набор всегда подбирается таким образом, чтобы с их помощью можно было построить любые возникающие при решении практических и теоретических задач алгоритмы.
09.11.2021
Для определения требуемой последовательности действий в алгоритмах и программах используются управляющие
09.11.2021
Для определения требуемой последовательности действий в алгоритмах и программах используются управляющие
Конструкция алгоритмического языка или блок-схемы, которая обеспечивает требуемый порядок выполнения действий, называется управляющей конструкцией.
Собственно говоря, существует три типа управляющих конструкций, ровно столько же сколько существует различных типов алгоритмов: это конструкции, которые применяются при построении линейных алгоритмов, алгоритмов с ветвлением и циклов.
Отметим, что управляющие конструкции являются более общим понятием, чем оператор. Одна и та же управляющая конструкция может быть задана несколькими различными операторами.
09.11.2021
Закрепление за переменной некоторого текущего значения, также как и любое изменение
09.11.2021
Закрепление за переменной некоторого текущего значения, также как и любое изменение
Присваивание
Присваивание нового значения выполняется независимо от того, определена или нет переменная, которой производится присваивание.
Если переменная была определена, то есть у неё было старое значение, то оно безвозвратно теряется, и установить каким оно было невозможно.
Синтаксис оператора присваивания в простейшем случае определяется следующим образом:
<оператор присваивания> → <Имя> := <Выражение > (Паскаль)
<оператор присваивания> → <Имя> = <Выражение > (Си)
В общем случае в левой части оператора присваивания может находиться не только имя простой переменной, но и элемент массива, а также некоторые другие связанные со сложными типами данных конструкции, которые мы будем для простоты называть элементами структуры.
Справа в операторе присваивания может находиться любое выражение, в том числе непосредственное значение, переменная, указатель функции и т.д.
09.11.2021
Между левой и правой частью оператора находится знак присваивания, в качестве
09.11.2021
Между левой и правой частью оператора находится знак присваивания, в качестве
Заметим, что присваивание может изображаться и другими знаками, в частности, в языке Бейсик для этого используется ключевое слово Let, а в языках ассемблера — mov (от англ. move — движение, передача в другие руки).
Примеры присваиваний:
counter:=0; X:=10.3;Y:= 2.0*X+1.0; n:=4; n:=n+1; w[n+2]:=0.8; //Па
counter=0; X=10.3;Y= 2.0*X+1.0; n=4; n=n+1; w[n+2]=0.8; //Си
В действии присваивания необходимо различать два состояния одно –до начала выполнения действия, второе – после его завершения. Никакие промежуточные состояния не вводятся и не обсуждаются.
До начала действия переменная из левой части имеет старое значение или не имеет никакого;
После завершения действия она всегда имеет новое текущее значение.
X
10.3
X
X:=10.3
X=10.3
Неопределенное значение
Старое значение
Новое значение
4
n
Старое значение
5
n
n:=n+1n=n+1
Новое значение
09.11.2021
Порядок выполнения присваивания
вычисляется значение выражения в правой части, при этом всегда
09.11.2021
Порядок выполнения присваивания
вычисляется значение выражения в правой части, при этом всегда
для сложных типов данных определяется, какой именно элемент структуры задан в левой части, возможно, при этом вычисляются значения индексных выражений;
вычисленное значение закрепляется за указанной в левой части переменной или за элементом структуры в качестве нового текущего значения.
Действие, задаваемое оператором n:=n+1// Па, n=n+1; // Си, состоит в увеличении текущего значения переменной n на единицу. Такой оператор и аналогичные ему встречаются в алгоритмах очень часто, поэтому в языке Cи имеется короткая эквивалентная форма его записи n++;
09.11.2021
Правила задания присваивания
Тип переменной в левой части и тип значения в
09.11.2021
Правила задания присваивания
Тип переменной в левой части и тип значения в
Все переменные в правой части должны иметь типы, обеспечивающие возможность вычисления значения выражения.
Все переменные, используемые в правой части, а также в индексных выражениях должны быть определены к моменту выполнения присваивания.
w[1] w[2] w[3] w[4] w[5] w[6] w[7] w[8] w[9]
w[n+2]:=0.8w[n+2]=0.8
Выполнение действия существенно зависит от текущего значения n. Так при n=5 значение индексного выражения определяет, что получить значение 0.8 должен седьмой элемент массива w.
0.8
Неопределенные переменные или элементы структуры можно использовать только в левой части оператора для присваивания им начального значения.
X : real: C : char; I,J : integer;
X:=0.8;
C:=‘&’;
I:=6;
X:=‘&’;
C:=6;
I:=‘&’;
X:=C+I;
J:=2*J+I
09.11.2021
Отличия действия присваивания от операции сравнения
Присваивание это действие, в котором переменная
09.11.2021
Отличия действия присваивания от операции сравнения
Присваивание это действие, в котором переменная
Действие
n:=6
n=6
Сравнение n=6
n==6
4
n
Результат
6
n
4
n
Результат
false, 0
4
n
В операции сравнения левая и правая части равноправны, а в действии присваивания ─ не равноправны. В присваивании выражение слева писать нельзя, а в сравнении ─ можно.
n:=6;
n=6;
6:=n;
y:=2*x+1;
2*x+1:=y;
n:=5; j:=8; n:=j;
n:=5; j:=8; j:=n
6=n;
y=2*x+1;
2*x+1=y;
n:=5; j:=8; n=j;
n:=5; j:=8; j=n
09.11.2021
Организация обмена
В подавляющем большинстве случаев исполнителем алгоритма является компьютер, а результаты
09.11.2021
Организация обмена
В подавляющем большинстве случаев исполнителем алгоритма является компьютер, а результаты
Организация действий по обмену данными в реальных программах довольно сложна, поскольку программисту требуется множество различных возможностей для обеспечения эффективного и удобного ввода, а также хорошо оформленного вывода
Тем более, что любые действия по обмену данными связаны с конкретными особенностями аппаратных и программных средств модели компьютера, на которой фактически должно производиться выполнение вычислений.
Первая группа действий называется вводом исходных данных, а вторая — выводом результатов. А когда безразлично, о чем идёт речь используется термин обмен.
09.11.2021
Чтобы учитывать такую связь, обмен в алгоритмических языках осуществляется с помощью
09.11.2021
Чтобы учитывать такую связь, обмен в алгоритмических языках осуществляется с помощью
Эти процедуры как раз и связаны и с аппаратурой компьютера и с языковыми конструкциями программы.
Действия по обмену данными в алгоритмах будем записывать с помощью условных процедур, которые имеют некоторое сходство с реальными. Так, для ввода данных мы будем применять несуществующие в реальных языках процедуры:
read(список вводимых величин) // Па, scan(список вводимых величин) // Cи
а для вывода процедуры —
write(список выводимых величин) // Па, print(список выводимых величин) // Cи
в которых вводимые/выводимые величины представлены в виде списка, состоящего из имён этих величин, перечисляемых через запятую.
Предполагается, что вводимые значения набираются на клавиатуре компьютера, а результаты выводятся на его дисплей.
09.11.2021
Например, процедура read(y) scan(y) требует ввода одного вещественного числа — значения
09.11.2021
Например, процедура read(y) scan(y) требует ввода одного вещественного числа — значения
Структура программы — алгоритма, заданного на алгоритмическом языке, — в значительной мере зависит от используемого языка.
Общая структура программы
Программа на языке Паскаль в простейшем случае имеет вид:
var O1; O2;…;Om begin S1; S2; …; Sn end. // Па
То есть она содержит последовательность описаний O1;O2;…;Om используемых в программе переменных, и последовательность операторов S1;S2; …;Sn, которые задают нужные действия, здесь О и S — условные обозначения описания и оператора соответственно.
Любые два рядом стоящие описания или оператора разделяются точкой с запятой. Перед последовательностью описаний находится ключевое слово var (от англ. variable — переменная), последовательность операторов находится между ключевым словом begin (англ. — начало) и ключевым словом end (англ. — конец), а завершается текст программы точкой.
09.11.2021
Программа на языке Си в простейшем случае имеет вид:
main (
09.11.2021
Программа на языке Си в простейшем случае имеет вид:
main (
То есть она состоит из заключённой в фигурные скобки одной последовательности, которая включает в себя и описания, и операторы.
Более того, в языке Cи описания считаются разновидностью операторов, поэтому описания могут размещаться вперемешку с операторами, но всё-таки большая часть переменных описывается в начальной части программы.
В простейшем варианте написания программы на языке Cи перед фигурными скобками указывается имя main (англ. — главный) и пара круглых скобок, конструкции, являющейся частным случаем так называемого заголовка функции, который состоит из имени и заключаемого в круглые скобки списка параметров
Попутно отметим, что пара ключевых слов begin end в Паскале и пара фигурных скобок { } в Си называется операторными скобками, а конструкции begin S1; S2; …; Sn end и { S1; S2; …; Sn; } — составным оператором.
Важно! Заключение последовательности операторов в операторные скобки превращает эту последовательность с точки зрения синтаксических правил языка в один оператор
09.11.2021
Процедуры ввода/вывода могут помещаться в любом месте внутри последовательности S1;S2; …;Sn
09.11.2021
Процедуры ввода/вывода могут помещаться в любом месте внутри последовательности S1;S2; …;Sn
09.11.2021
…
Линейные алгоритмы. Управляющая конструкция следование.
Для реализации линейных участков алгоритмов используется
09.11.2021
…
Линейные алгоритмы. Управляющая конструкция следование.
Для реализации линейных участков алгоритмов используется
S1; S2; S3; … ;SN
S1
S2
S3
SN
09.11.2021
Построение линейных алгоритмов обычно не вызывает затруднений, и состоит из следующих
09.11.2021
Построение линейных алгоритмов обычно не вызывает затруднений, и состоит из следующих
необходимые действия определяются путем разбиения всего процесса достижения поставленной цели на отдельные самостоятельные по смыслу достаточно крупные этапы, не содержащие условий и повторов;
количество этапов не должно быть особенно большим, обычно выделяется 5–7 этапов. Выделение большого количества этапов влечет за собой потерю наглядности, понятности разрабатываемого алгоритма;
выявляется и фиксируется порядок их следования в алгоритме;
при необходимости каждый этап уточняется, разбивается на линейные последовательности всё более и более мелких этапов до тех пор, пока алгоритм не окажется состоящим из простейших, понятных исполнителю действий;
если в процессе построения на любом его этапе выявляется наличие условий или необходимость в повторах, то алгоритм не относится к линейным, и его необходимо строить по другим правилам.
09.11.2021
5
n
8
m
8
n
5
m
Исходное состояние
Требуемое результирующее состояние
Переменная n должна получить новое значение, равное старому
09.11.2021
5
n
8
m
8
n
5
m
Исходное состояние
Требуемое результирующее состояние
Переменная n должна получить новое значение, равное старому
Пример. Обмен значениями двух переменных
Буквальная реализация условия задачи
5
n
8
m
n:=m
n=m
8
8
n
8
m
m:=n
m=n
5
n
8
m
m:=n
m=n
5
5
n
5
m
n:=m
n=m
5
09.11.2021
5
n
m
Решение задачи обмена значениями
Необходимо понять причину неудачи предыдущих вариантов решения.
Дело
09.11.2021
5
n
m
Решение задачи обмена значениями
Необходимо понять причину неудачи предыдущих вариантов решения.
Дело
Вывод: чтобы решить задачу старое значение любой из переменных перед первым же присваиванием следует где-то сохранить. Такое сохранение в алгоритме может быть выполнено только с помощью присваивания этого значения какой-либо переменной.
Так как исходные переменные для этого не годятся, следует использовать вспомогательную, дополнительную переменную.
8
k
5
8
5
k=n;
k=n;
n:=m;
n=m;
m:=k;
m=k;
09.11.2021
//Паскале-подобный алгоритм обмена,
var n, m, k: integer; //Описания используемых переменных
09.11.2021
//Паскале-подобный алгоритм обмена,
var n, m, k: integer; //Описания используемых переменных
read(n, m); //Ввод исходных данных
k:=n; n:=m; m:=k; // Обмен
write (n, m) //Вывод результатов
end.
//Си-подобный алгоритм обмена
main ( ) //Обязательный заголовок
{
int n, m; //Описания основных переменных
scan (n, m); //Ввод исходных данных
int k=n; n=m; m=k; //Описание промежуточной //переменной k и обмен
print (n, m); //Вывод результатов
}
09.11.2021
Общий порядок построения алгоритма
внимательно проанализировать условие задачи выявить, что задано, какие
09.11.2021
Общий порядок построения алгоритма
внимательно проанализировать условие задачи выявить, что задано, какие
выяснить что именно необходимо получить, какие величины являются искомым результатом;
выбрать для каждой величины какое-либо имя, определить и зафиксировать в соответствующем описании её тип;
выбрать или разработать способ решения задачи;
в соответствии с этим способом определить какие действия, и в каком порядке необходимо выполнить, чтобы получить требуемый результат;
зафиксировать действия и порядок их выполнения выбранным средством записи алгоритма (блок-схема, алгоритмический язык);
выполнить проверку алгоритма, проанализировать полученный алгоритм с точки зрения его правильности и эффективности.
09.11.2021
Решение системы двух линейных уравнений с двумя неизвестнымиxx
Шаги 1-3. Когда
09.11.2021
Решение системы двух линейных уравнений с двумя неизвестнымиxx
Шаги 1-3. Когда
Исполнителю алгоритма должны быть переданы их численные значения, чтобы он имел возможность выполнить вычисления и найти искомые неизвестные.
Следовательно, все эти коэффициенты являются исходными величинами строящегося алгоритма — набор их значений является его входом.
По условию задачи также понятно, что искомыми результатами являются неизвестные x и y — их значения являются выходом алгоритма.
По общему смыслу задачи можно считать, что все коэффициенты системы, а также неизвестные относятся к вещественному типу, хотя во многих частных случаях они могут быть и целыми. Для определённости выберем вещественный тип, как более общий вариант.
09.11.2021
В данной задаче символьный, логический, а также структурированные типы для обсуждаемых
09.11.2021
В данной задаче символьный, логический, а также структурированные типы для обсуждаемых
В качестве имён искомых неизвестных можно выбрать их названия x и y, использованные в математической постановке задачи.
Проблема возникает только с выбором имен и структуры данных для коэффициентов системы. Можно предложить два варианта такого выбора. В первом варианте каждый коэффициент считается отдельной простой переменной вещественного типа.
Тогда подходящим может быть, например, такой выбор имён: a11, a12, a21, a22, b1 и b2.
Второй вариант основан на использовании сложной структуры данных — массива. В этом варианте коэффициенты левой части системы образуют матрицу A и тогда они обозначаются: A[1,1]; A[1,2], A[2,1], A[2,2], а коэффициенты правой части рассматриваются как элементы вектора b и обозначаются b[1] и b[2] соответственно.
09.11.2021
Ответ на вопрос, какой из рассмотренных вариантов предпочтительнее зависит от размерности
09.11.2021
Ответ на вопрос, какой из рассмотренных вариантов предпочтительнее зависит от размерности
Шаг 4. Решить систему — это значит найти её корни, то есть такие значения неизвестных величин x и y, при которых оба её уравнения превращаются в тождества. Каким способом можно решить эту систему?
Решение системы можно получить по правилу Крамера:
Шаги 5–6. Алгоритм определения корней складывается из ввода исходных данных, двух операторов присваивания, которые соответствуют приведённым соотношениям и вывода полученных результатов.
09.11.2021
Вспомним сказанное раньше: обычно ввод организуют в самом начале алгоритма, а
09.11.2021
Вспомним сказанное раньше: обычно ввод организуют в самом начале алгоритма, а
Для ответа на этот вопрос можно использовать следующие соображения:
Следует вообразить себя исполнителем и попытаться мысленно или явно выполнить действия алгоритма, метода на уровне числовых значений. Тогда станет понятно, численные значения каких величин необходимо знать, чтобы фактически произвести вычисления.
Важное отличие между исходными и промежуточными величинами состоит в том, что исходные величины могут принимать достаточно произвольные значения, в то время как значения промежуточных величин жестко привязаны к значениям исходных, вычисляются через них, и потому они произвольно менять свои значения не могут.
А какие величины из использованных в рассуждениях подлежат вводу и выводу?
Теперь обсудим собственно вычисления.
09.11.2021
Легко заметить, что дроби, значения которых необходимо вычислить, имеют совершенно одинаковые
09.11.2021
Легко заметить, что дроби, значения которых необходимо вычислить, имеют совершенно одинаковые
Чтобы не заставлять компьютер несколько раз вычислять значение одного и того же выражения во всех аналогичных случаях целесообразно вводить промежуточные переменные и запоминать вычисленное значение с их помощью. Этот приём носит название экономии вычислений.
Выберем для промежуточной переменной, имеющей смысл знаменателя рассматриваемых дробей, имя D. Поскольку для коэффициентов системы выбран вещественный тип, эта переменная также должна относиться к вещественному типу.
Промежуточные переменные полезно вводить не только для экономии выражений, часто они используются для упрощения чтения и понимания текста алгоритма. В этом смысле можно ввести промежуточные переменные, обозначающие числители каждой из дробей, например Dx и Dy.
09.11.2021
После этого вычисление корней сведется к очень простым действиям:
Осталось определиться
09.11.2021
После этого вычисление корней сведется к очень простым действиям:
Осталось определиться
Порядок остальных вычислений жёстко не зафиксирован. Например, после вычисления знаменателя можно найти числитель первой дроби, затем числитель второй дроби, после чего уже вычислить корни.
В рассматриваемом алгоритме порядок выполнения действий в определенных пределах можно изменять и это не повлияет на конечный результат.
Например, сначала можно найти числитель второй дроби, а затем первой, можно далее вычислить y, а затем уже x и т.д.
Но в любом случае значение переменных необходимо вычислять до их использования в каких-либо выражениях.
09.11.2021
Начало
Ввод A,b
D:=a11a22-a12a21
Dx:=b1a22-b2a12
Dy:=b2a11-b1a21
x:=Dx/D
y:=Dy/D
Вывод x,y
Конец
A : array [1..2,1..2] of real; b:array[1..2] of real;
09.11.2021
Начало
Ввод A,b
D:=a11a22-a12a21
Dx:=b1a22-b2a12
Dy:=b2a11-b1a21
x:=Dx/D
y:=Dy/D
Вывод x,y
Конец
A : array [1..2,1..2] of real; b:array[1..2] of real;
read (A,b);
{вычисление главного детерминанта системы}
D:=a[1,1]*a[2,2]-a[1,2]*a[2,1];
{вычисление вспомогательного детерминанта Dx }
Dx:=b[1]*a[2,2]-b[2]*a[1,2];
{вычисление вспомогательного детерминанта Dy }
Dy:=b[2]*a[1,1]-b[2]*a[2,1];
x := Dx/D;
y:= Dy/D;
write (x,y)
end.
09.11.2021
09.11.2021
09.11.2021
// Паскале-подобный.
var a11,a12,a21,a22,b1,b2,x,y,D,Dx,Dy: real;
begin
read(a11, a12, a21, a21, a22, b1, b2);
09.11.2021
// Паскале-подобный.
var a11,a12,a21,a22,b1,b2,x,y,D,Dx,Dy: real;
begin
read(a11, a12, a21, a21, a22, b1, b2);
D := a11*a22 – a12*a21; //Знаменатель
Dx := b1*a22 – b2*a12; //Числитель для x
Dy := b2*a11 – b1*a21; //Числитель для y
x := Dx/D; y := Dy/D; //Корни системы
write (x, y);
end.
09.11.2021
09.11.2021
09.11.2021
При записи текстов алгоритмов применяются простые графические приёмы: связанные по смыслу
09.11.2021
При записи текстов алгоритмов применяются простые графические приёмы: связанные по смыслу
Шаг 7. Тестирование алгоритма следует проводить для системы уравнений, решение которой известно. Возьмем, например, в качестве тестовой такую систему
Её корнями являются x=2 и у=4 , в чём можно убедиться непосредственной подстановкой в систему.
09.11.2021
read(a11, a12, a21, a21, a22, b1, b2);
D := a11*a22
09.11.2021
read(a11, a12, a21, a21, a22, b1, b2);
D := a11*a22
Dx := b1*a22 – b2*a12; //Числитель для x
Dy := b2*a11 – b1*a21; //Числитель для y
x := Dx/D;
write (x, y);
y := Dy/D; //Корни системы
а11 а12 а21 а22 b1 b2
D Dx Dy
x y
5
3
10
-1
22
16
-35
-70
-140
2
4
09.11.2021
Найденные в результате трассировки значения величин x и y совпали с
09.11.2021
Найденные в результате трассировки значения величин x и y совпали с
Проведём для очистки совести ещё одну проверку. Возьмём, например, такую систему:
которая имеет точно такие же корни x=2 и у=4.
09.11.2021
c
read(a11, a12, a21, a21, a22, b1, b2);
D := a11*a22
09.11.2021
c
read(a11, a12, a21, a21, a22, b1, b2);
D := a11*a22
Dx := b1*a22 – b2*a12; //Числитель для x
Dy := b2*a11 – b1*a21; //Числитель для y
x := Dx/D;
write (x, y);
y := Dy/D; //Корни системы
а11 а12 а21 а22 b1 b2
D Dx Dy
x y
5
3
10
6
22
44
0
0
0
0/0 ?
09.11.2021
Этот тест завершился выявлением в алгоритме принципиально невыполнимого действия.
Несмотря на
09.11.2021
Этот тест завершился выявлением в алгоритме принципиально невыполнимого действия.
Несмотря на
Основной целью тестирования является нахождение ошибок в алгоритме. Если выбраны исходные данные, с помощью которых удалось обнаружить ошибку, то тест признаётся полезным, так как после исправления ошибки алгоритм станет более надёжным.
Теперь необходимо выяснить причину появления ошибки. Выполнение алгоритма оказалось прерванным из-за невозможности выполнить деление на нуль. Значит необходимо проверить правильность оператора, с помощью которого вычислется значение этого знаменателя.
Проверка правильности записи выражения для оказавшегося равным нулю знаменателя D, показывает, что ошибка отсутствует.
09.11.2021
Получается, что обращение в нуль знаменателя является проявлением свойств самой системы
09.11.2021
Получается, что обращение в нуль знаменателя является проявлением свойств самой системы
Таким образом, проведённый анализ вернул нас к проверке метода решения задачи — правилу Крамера. Необходимо внимательнейшим образом проверить правильность понимания самого метода, а особенно условия его применения.
Проверка его точной математической формулировки показывает, что ошибка была допущена и заложена в самом начале построения алгоритма.
В формулировке правила Крамера указывается, что выбранные для вычисления корней системы соотношения можно применять только в том случае, когда главный определитель системы, он же знаменатель обеих дробей, D не равен нулю.
Но такая проверка в алгоритме не организована, именно поэтому во втором тестовом наборе исходных данных возникло деление на нуль.
09.11.2021
Заметим, что в проведённых рассуждениях анализ проводился в обратном направлении —
09.11.2021
Заметим, что в проведённых рассуждениях анализ проводился в обратном направлении —
Итак, тестирование показало, что при правильном построении алгоритма перед вычислением корней необходимо проверить, потенциально опасную операцию деления: отличен ли знаменатель от нуля.
Это означает, что в алгоритме появляются, по крайней мере, две ветви — одна должна описывать действия при не равном нулю знаменателе, а вторая — при его обращении в нуль. Следовательно, обсуждаемый алгоритм имеет ветвление.
Таким образом, дополнительный анализ привел к отказу от представления о линейности обсуждаемого алгоритма. Это довольно типичная ситуация.
Вопрос. А сколько именно ветвей необходимо зафиксировать в обсуждаемой алгоритме решения задачи?
И вновь лучше всего начать с математического аспекта решения рассматриваемой задачи.
09.11.2021
Если вспомнить точные математические утверждения относительно существования решений системы линейных алгебраических
09.11.2021
Если вспомнить точные математические утверждения относительно существования решений системы линейных алгебраических
главный определитель системы отличен от нуля — решение существует и единственно;
главный определитель равен нулю, а дополнительный — нет, тогда решений у системы нет;
и главный и дополнительный определители равны нулю — система имеет бесконечно много различных решений.
Полный анализ позволяет утверждать, что в строящемся алгоритме должно быть предусмотрено три ветви
Этот пример наглядно демонстрирует необходимость внимательного отношения к математическим формулировкам, используемым при построении алгоритма.
Кроме того, всегда следует помнить об обязательности проведения тестирования построенного алгоритма, которое при правильном его проведении обеспечивает нахождение большинства ошибок.
09.11.2021
Алгоритмы с ветвлениями более сложны по сравнению с линейными. В любом
09.11.2021
Алгоритмы с ветвлениями более сложны по сравнению с линейными. В любом
Алгоритмы с ветвлением
В качестве простого примера алгоритма, содержащего ветвление, рассмотрим порядок осуществления разговора по стационарному телефону.
Сначала производится подготовка к звонку, во время которой следует снять трубку телефона и набрать номер.
После чего в трубке можно услышать либо обычные гудки свободной линии, либо частые гудки занятости линии, и по их типу определяется возможность проведения разговора.
Таким образом, выявлено два варианта возможных действий, две ветви алгоритма:
при наличии обычных гудков необходимо выждать ответа абонента, затем поговорив с ним положить телефонную трубку на место;
услышав частые гудки (обнаружена занятость линии), следует положить трубку сразу.
09.11.2021
Обсудим подробнее структуру полученного алгоритма. Какой этап является этапом выбора?
Теперь обратим
09.11.2021
Обсудим подробнее структуру полученного алгоритма. Какой этап является этапом выбора?
Теперь обратим
Начальные действия, выполняемые с целью подготовки к каким-либо другим, более сложным действиям называются инициализацией (англ. initialization – инициирование): инициализация ветвления, инициализация цикла и т.д.
В общем случае инициализация представляет собой подготовку к работе, создание условий для работы или определение каких-либо параметров работы. Обычно это приведение объекта (устройства, алгоритма или программы, некоторого участка алгоритма или программы) в состояние готовности к использованию или выполнению действий.
Далее следует этап, содержащий условие выбора варианта дальнейших действий: оценка характера услышанного гудка. На этом этапе собственно происходит разделение на две ветви.
Этап определения характера гудков.
09.11.2021
Затем размещаются точные описания каждого из вариантов действий (дождаться ответа и
09.11.2021
Затем размещаются точные описания каждого из вариантов действий (дождаться ответа и
После выполнения действий по любому из вариантов ветви вновь объединяются в одну. В обсуждаемом примере заключительный участок алгоритма содержит одно и то же действие для любой ветви: необходимо положить трубку на телефонный аппарат.
Выявленная структура характерна для любого алгоритма с ветвлением:
общий участок инициализации, то есть подготовки к ветвлению;
этап выбора, содержащий одно или несколько условий;
отдельное описание каждой ветви;
общий участок, завершающий ветвление.
Рассмотренный пример содержит два варианта действий лишь на первый взгляд. Более детальный анализ показывает, что на самом деле вариантов больше, а именно: если слышны обычные гудки то абонент может ответить, а может и не ответить. Чтобы определиться в возникшей ситуации, требуется некоторое время выждать.
09.11.2021
Получается, что в результате первоначального анализа были выделены только две ветви,
09.11.2021
Получается, что в результате первоначального анализа были выделены только две ветви,
А ещё более внимательный анализ показывает, что при обсуждении характера гудков, была упущена важная для построения корректного алгоритма возможность — гудки могут вообще отсутствовать, что означает неисправность телефонного аппарата или же отсутствие связи с телефонной станцией. Тогда получается, что в алгоритме должно быть предусмотрено ещё большее количество ветвей.
Проведённые рассуждения показывают, что анализ задачи необходимо проводить полностью, детально исследуя каждую возникающую ситуацию и обеспечивая охват всей проблемной области.
Отдельные ветви алгоритма чаще всего оказываются линейными. Однако, как видно из рассмотренного примера, любая ветвь может в свою очередь содержать ветвление. Такая ситуация, когда какая-либо ветвь алгоритма содержит ветвление, называется вложением ветвлений. На любом уровне вложения любая ветвь может быть ещё раз разделена, это создает возможность реализации алгоритмов, содержащих необходимое количество ветвей.
09.11.2021
Общие рекомендации по построению
алгоритмов с ветвлениями
Участок инициализации — подготовки к
09.11.2021
Общие рекомендации по построению
алгоритмов с ветвлениями
Участок инициализации — подготовки к
В каждом конкретном случае исполнения алгоритма с ветвлением действия выполняются только по какому-то одному варианту, а действия всех остальных вариантов не затрагиваются. Указать заранее, до начала исполнения алгоритма, до появления конкретных условий, какой именно вариант придётся выбрать невозможно.
Поэтому в алгоритме с ветвлением должны быть предусмотрены и точно заданы абсолютно все возможные варианты, а также условия их однозначного выбора.
Неверное задание условий выбора ветвей, их пересечение, допускающее произвольный выбор разных ветвей, или неполный охват этими условиями всех возможных в решении задачи вариантов, приводит к неоднозначности алгоритма и к неправильному решению задачи.
09.11.2021
Завершающий участок ветвления служит для объединения всех путей исполнения алгоритма. Он
09.11.2021
Завершающий участок ветвления служит для объединения всех путей исполнения алгоритма. Он
Чтобы обеспечить выполнение этих требований целесообразно придерживаться следующих рекомендаций:
исходя из формулировки задачи и анализа проблемной области, определить точное количество различных вариантов возможных действий, неполный охват проблемной области приведёт к некорректности алгоритма;
для каждого из вариантов выявить точные условия его выбора;
для обеспечения однозначного выбора только одного из возможных вариантов, количество условий должно быть равно количеству ветвей, кроме того они не должны попарно пересекаться;
для каждого варианта точно и полно описать все реализующие его действия;
перед этапом выбора необходимо сформировать участок инициализации, на котором подготавливается возможность осуществления выбора, а также возможность выполнения всех действий во всех ветвях.
09.11.2021
Несмотря на то, что участок инициализации ветвления должен находиться перед этапом
09.11.2021
Несмотря на то, что участок инициализации ветвления должен находиться перед этапом
Для реализации алгоритмов, содержащих ветвления, используется несколько разновидностей управляющих конструкций, которые соответствуют различным количествам ветвей в алгоритмах и разным условиям их выбора. Подробное их рассмотрение связано с особенностями конкретных алгоритмических языков. Поэтому мы обсудим только простейшие, но при этом универсальные варианты управляющих конструкций, с помощью которых можно построить алгоритмы с любыми ветвлениями.
09.11.2021
Управляющие конструкции ветвлений
Заметим, что с организацией ветвлений мы уже фактически сталкивались,
09.11.2021
Управляющие конструкции ветвлений
Заметим, что с организацией ветвлений мы уже фактически сталкивались,
условие
+
-
да
нет
S1
S2
Полное ветвление
if <условие> then S1 else S2
if (<условие>) S1; else S2;
Полное ветвление используется когда в алгоритме присутствуют два непустых варианта действий
09.11.2021
Сокращенное ветвление
условие
+
-
да
нет
S1
if <условие> then S1
Сокращенное ветвление используется, если в одном из
09.11.2021
Сокращенное ветвление
условие
+
-
да
нет
S1
if <условие> then S1
Сокращенное ветвление используется, если в одном из
if (<условие>) S1;
Основной особенностью рассматриваемых управляющих конструкции ветвления является использование в ней только одного условия, хотя имеются две ветви и каждая из них выбирается с помощью своего условия.
Пусть L1 — логическое выражение соответствующие условия выбора первой ветви, а L2 — логическое выражение выбора второй ветви. В управляющих конструкциях считается, что одно из этих условий является отрицанием другого: L1= ¬ L2.
09.11.2021
Поэтому для корректного построения ветвлений с помощью этих конструкций, сформулированные в
09.11.2021
Поэтому для корректного построения ветвлений с помощью этих конструкций, сформулированные в
Как следствие в управляющих конструкциях ветвления можно использовать любое из условий L1 или L2. Фактически включённое в управляющую конструкцию условие мы будем называть условием разделения ветвей.
Для машин Поста условие разделения связано с наличием или отсутствием отметки в текущей клетке ленты. В блок-схемах такое условие может быть совершенно произвольным и его можно формулировать на естественном языке. А в условных операторах условие разделения всегда должно быть представлено выражением логического типа.
По определению условного оператора каждая из ветвей может быть представлена только одним оператором. Если по смыслу выполняемых действий одного оператора недостаточно и требуется несколько операторов, то их можно «превратить» в один, заключив в операторные скобки.
09.11.2021
Пример организации полного ветвления
Для любого заданного значения вещественного аргумента x вычислить
09.11.2021
Пример организации полного ветвления
Для любого заданного значения вещественного аргумента x вычислить
Чтобы вычислить значение функции необходимо знать конкретное числовое значение её аргумента x, который, следовательно, является входной величиной. Выходная величина прямо указана в условии задачи — это искомое значение функции y. В данном случае целесообразно выбрать имена входной и выходной величин совпадающими с их математическими обозначениями: x и у соответственно. По условию задачи они относятся к вещественному типу.
По определению функции возможны всего два варианта вычисления её значения:
Если фактическое значение аргумента x окажется больше чем 3 (x>3), то для вычисления следует выбрать верхнее определение y=2x+1.
Если заданное значение аргумента x окажется не больше чем 3 (x≤3), необходимо выбрать нижнее определение y=sin x.
09.11.2021
Условия выбора ветвей x>3 и x≤3 взаимно не пересекаются, каждое из
09.11.2021
Условия выбора ветвей x>3 и x≤3 взаимно не пересекаются, каждое из
Для вычисления значения функции в каждом из вариантов, а также для выбора ветви достаточно знать только значение аргумента, поэтому инициализацией ветвления является ввод значения x.
Действия в каждой из ветвей задаются соответствующими операторами присваивания: y:=2x+1 для x>3 и y:=sin x для x≤3.
Заметим, что для наглядности полезно выводить не только непосредственный результат, но и значение аргумента, для которого он получен. Поэтому завершается алгоритм организацией вывода значений аргумента x и функции y.
При построении ветвления в качестве условия разделения можно выбрать любое из двух имеющихся условий, требуется только внимательно следить за соответствием выбранного условия разделения и ветви.
09.11.2021
-
нет
x≤3
+
да
x>3
X>3
y:=2x+1
y:=sin x
Начало
Ввод x
Вывод x,y
Конец
var x, y: real;
begin
read(x);
If x>3 then
{x>3,
09.11.2021
-
нет
x≤3
+
да
x>3
X>3
y:=2x+1
y:=sin x
Начало
Ввод x
Вывод x,y
Конец
var x, y: real;
begin
read(x);
If x>3 then
{x>3,
else
{x≤3, берется нижняя ветвь}
y:= sin(x);
write (x,y)
end.
09.11.2021
09.11.2021
09.11.2021
-
нет
X>3
+
да
x≤3
X≤3
y:=sin x
y:=2x+1
Начало
Ввод x
Вывод x,y
Если выбрать противоположное условие x≤3, то ветви следует
09.11.2021
-
нет
X>3
+
да
x≤3
X≤3
y:=sin x
y:=2x+1
Начало
Ввод x
Вывод x,y
Если выбрать противоположное условие x≤3, то ветви следует
-
нет
x≤3
+
да
x>3
X>3
y:=2x+1
y:=sin x
Начало
Ввод x
Вывод x,y
Конец
Конец
09.11.2021
09.11.2021
09.11.2021
Ещё раз обращаю внимание на графические приёмы оформления фрагментов программ, которые
09.11.2021
Ещё раз обращаю внимание на графические приёмы оформления фрагментов программ, которые
Отметим ещё одну особенность приведённых выше алгоритмов. Оператор присваивания записан в виде y:=2.0*x+1.0, хотя проще было бы записать его так: y:=2*x+1. Правильными являются оба варианта записи операторов.
Но в выражении 2*x+1 участвуют константы целого типа и вещественная переменная. Такая запись выражений разрешена, но во время выполнения вычислений целые константы придётся преобразовать к вещественному типу, а на это компьютеру потребуется дополнительное время. Поэтому лучше использовать вариант y:=2.0*x+1.0, в котором все типы совпадают.
Для получения более эффективной машинной программы рекомендуется выбирать форму записи непосредственных данных, которая соответствует типу выражения и тем самым минимизирует затраты на преобразования типов.
09.11.2021
Особо обращаю внимание на отсутствие точки с запятой после первой ветви
09.11.2021
Особо обращаю внимание на отсутствие точки с запятой после первой ветви
Это смысловое различие как раз и проявляется в обсуждаемых фрагментах. Если на языке Паскаль поставить точку с запятой после завершения первой ветви:
то она отделит начальный участок условного оператора
if x>3.0 then y:=2.0*x+1.0; else y:=sin(x)
if x>3.0 then y:=2.0*x+1.0
от его хвостовой части
else y:=sin(x)
которая не может самостоятельно использоваться. Такая запись полной формы условного оператора в языке Паскаль является грубой ошибкой.
09.11.2021
Если на языке Си записать условный оператор без заканчивающей оператор точки
09.11.2021
Если на языке Си записать условный оператор без заканчивающей оператор точки
if (x<=3.0) y=sin(x) else y=2.0*x+1.0;
то это означает, что в оператор, задающий первую ветвь, войдут все символы текста до ближайшей точки с запятой, которой он должен заканчиваться
y=sin(x) else y=2.0*x+1.0;
Это запись также является грубой ошибкой.
09.11.2021
Для алгоритмов с ветвлением тестовые наборы должны проверить каждую из ветвей.
09.11.2021
Для алгоритмов с ветвлением тестовые наборы должны проверить каждую из ветвей.
В рассматриваемой задаче можно выбрать любое значение, меньшее чем 3, равное 3 и большее, чем 3.
Для конкретности возьмём в качестве тестовых значения x=2.0, 3.0 и 5.0. Для проведения теста необходимо заранее, до исполнения алгоритма знать каким должен быть ответ. В соответствии с определением функции, должно получиться:
y(2.0)=sin(2.0)≈0.9
y(3.0)=sin(3.0) ≈0.1
y(5.0)=11.0
09.11.2021
main( )
{
float x, y;
scan (x);
if (x<=3.0)
y=sin
09.11.2021
main( )
{
float x, y;
scan (x);
if (x<=3.0)
y=sin
else //выбрана верхняя ветвь
y=2.0*x+1.0;
print (x, y);
}
x y x<=3.0
2.0
1
0.9
2.0 0.9
09.11.2021
main( )
{
float x, y;
scan (x);
if (x<=3.0)
y=sin
09.11.2021
main( )
{
float x, y;
scan (x);
if (x<=3.0)
y=sin
else //выбрана верхняя ветвь
y=2.0*x+1.0;
print (x, y);
}
x y x<=3.0
5.0
0
11.0
5.0 11.0
09.11.2021
На основании этих трассировок можно сделать вывод: проведённое тестирование не выявило
09.11.2021
На основании этих трассировок можно сделать вывод: проведённое тестирование не выявило
09.11.2021
Пример организации неполного ветвления
Задана последовательность из двух элементов a1, a2 .
09.11.2021
Пример организации неполного ветвления
Задана последовательность из двух элементов a1, a2 .
Для ознакомления с особенностями использования сокращенной формы ветвления рассмотрим задачу упорядочивания последовательности, состоящей из двух элементов.
Элементы заданной последовательности a1, a2 являются исходными величинами алгоритма. Как и ранее, можно считать их простыми переменными или же элементами массива.
Поскольку эта задача является частным случаем общей задачи упорядочивания последовательности, состоящей из n из элементов, целесообразно рассматривать последовательность как вектор a={a1,a2}, состоящий из двух (n=2) элементов.
В задаче требуется переставить элементы последовательности. Это значит, что требуется изменить входной массив, следовательно, элементы этого же, но измененного массива являются выходными данными.
В качестве имени массива целесообразно использовать его математическое обозначение a.
09.11.2021
Для определённости будем считать элементы массива целыми. Как выглядят описания этого
09.11.2021
Для определённости будем считать элементы массива целыми. Как выглядят описания этого
Над элементами массива в процессе преобразования потребуется выполнять только операции сравнения и присваивания.
Эти операции, как правило, не определены для полных значений структурированных типов (например, для массива, взятого целиком), но допустимы для любых простых типов.
К какому типу могут относиться элементы рассматриваемого массива?
Поэтому элементы массива могут относиться к целому, вещественному, логическому или символьному типу.
var a: array[1..2] of integer; // Па, int a[2]; // Cи.
09.11.2021
Пусть a={4,8}. Компоненты вектора расположены в нужном порядке и делать ничего
09.11.2021
Пусть a={4,8}. Компоненты вектора расположены в нужном порядке и делать ничего
Пусть теперь a={5,2}. В данном случае компоненты вектора следует переставить. В результате получится вектор a={2,5} с требуемым порядком следования компонент.
Чтобы понять в чём именно состоит задача и наметить путь её решения настоятельно рекомендуется выбрать несколько конкретных и простых числовых примеров и вручную получить искомый результат.
Далее можно рассуждать опираясь на математические соображения: между введёнными элементами массива a1 и a2 могут быть только два варианта отношений: либо a1≤a2, либо a1>a2.
Вспоминая математическое определение неубывающей последовательности, получаем, что в результирующей последовательности элементы должны удовлетворять условию а1≤а2.
09.11.2021
Таким образом, получаем два варианта, две ветви алгоритма:
при удовлетворении для
09.11.2021
Таким образом, получаем два варианта, две ветви алгоритма:
при удовлетворении для
при удовлетворении неравенства а1>а2 элементы последовательности придётся выполнить дополнительное действие: поменять местами элементы последовательности (что равносильно обмену значениями между компонентами вектора).
Условия выбора ветвей а1≤а2 и а1>а2 взаимно не пересекаются, каждое из них является отрицанием другого, и вместе они охватывают все возможные варианты соотношений между элементами массива а1 и а2, поэтому с их помощью можно построить корректное ветвление.
Итак, в решении задачи один из вариантов пустой, то есть не содержит никаких действий. Эта ситуация соответствует ветвлению в сокращенной форме.
Для построения ветвления с использованием этой формы в качестве условия разделения следует взять неравенство а1>a2, при удовлетворении которого выбирается непустая ветвь
09.11.2021
Непустая ветвь представляет собой линейный алгоритм обмена значениями, который был ранее
09.11.2021
Непустая ветвь представляет собой линейный алгоритм обмена значениями, который был ранее
Только применить его требуется не к переменным n и m, а к элементам массива a1 и a2. Записать этот фрагмент алгоритма, используя для обмена вспомогательную переменную c.
Стандартным способом построения алгоритмов, является использование ранее построенных алгоритмов в качестве «кирпичиков», составных частей нового алгоритма. Поэтому программисту необходимо знать как можно больше способов решения задач и соответствующих им алгоритмов. Чтобы стать профессионалом необходимо постоянно наращивать свой личный «багаж» знаний в области алгоритмов обработки данных.
с:=a[1]; a[1]:=a[2]; a[2]:=с
При записи на алгоритмическом языке не следует забывать о необходимости описания всех появившихся по ходу рассуждений промежуточных величин.
Следует также обратить внимание на то, что действия в непустой ветви задаются более чем одним оператором, и в соответствии с правилом их необходимо заключить в операторные скобки, то есть применить составной оператор.
09.11.2021
-
нет
+
да
a1>a2
a1>a2
c:=a1
Начало
Ввод a1,a2
Вывод a
Конец
a1:=a2
a2:=c
a1≤a2
var a: array of real; c: real;
read(a);
if a[1]>a[2] then
begin
09.11.2021
-
нет
+
да
a1>a2
a1>a2
c:=a1
Начало
Ввод a1,a2
Вывод a
Конец
a1:=a2
a2:=c
a1≤a2
var a: array of real; c: real;
read(a);
if a[1]>a[2] then
begin
c:=a[1];
a[1]:=a[2];
a[2]:=c
end;
begin
write(a)
end.
09.11.2021
Записать алгоритм на СИ-подобном языке
При обсуждении вариантов построения полного ветвления было
09.11.2021
Записать алгоритм на СИ-подобном языке
При обсуждении вариантов построения полного ветвления было
Однако для сокращенной формы такие изменения делать не следует, так как получаются плохо воспринимаемые при чтении конструкции. Для сокращенной формы ветвления настоятельно рекомендуется выбирать условие разделения, которое соответствует непустой ветви.
09.11.2021
Как и в случае полной формы для тестирования построенного алгоритма необходимы,
09.11.2021
Как и в случае полной формы для тестирования построенного алгоритма необходимы,
Довольно часто встречаются ошибки, связанные с пропуском операторных скобок при построении ветвлений. По уже упоминавшемуся правилу любая ветвь условного оператора может состоять только из одного оператора.
Вместе с тем, по логике решения задачи может потребоваться (как это имеет место в рассматриваемой задаче) чтобы ветвь содержала более одного оператора.
В таких случаях применяется составной оператор, поскольку любая группа операторов, заключенная в операторные скобки, по правилам алгоритмических языков считается одним оператором. Именно поэтому при выполнении условия a[1] Теперь рассмотрим, к чему приведёт ошибка, если по невнимательности, или по незнанию в алгоритме не использовать составной оператор.
09.11.2021
-
нет
+
да
a1>a2
a1>a2
c:=a1
Начало
Ввод a1,a2
Вывод a
Конец
a1:=a2
a2:=c
a1≤a2
Невозможность выполнить присваивание для некоторых вариантов исходных данных.
Несоответствие смысла
09.11.2021
-
нет
+
да
a1>a2
a1>a2
c:=a1
Начало
Ввод a1,a2
Вывод a
Конец
a1:=a2
a2:=c
a1≤a2
Невозможность выполнить присваивание для некоторых вариантов исходных данных.
Несоответствие смысла
09.11.2021
Алгоритмы с большим количеством ветвей
В задачах часто возникают ситуации, при
09.11.2021
Алгоритмы с большим количеством ветвей
В задачах часто возникают ситуации, при
Построение алгоритмов с большим количеством ветвей базируется на том, что по правилам языка в состав условного оператора могут входить любые операторы, в том числе и опять условные. Такая подобная матрёшке конструкция называется вложенным ветвлением. Оператор, внутри которого производится вложение, называется внешним, а вкладываемый оператор — внутренним.
При вложении условного оператора в условный происходит расщепление одной из ветвей на две. В новую ветвь можно на общих основаниях вложить ещё одно ветвление и т.д. Глубина вложений обычно не ограничивается, что и позволяет строить алгоритмы с любым количеством ветвей.
Алгоритм, содержащий n ветвей, строится за n-1 шаг. На каждом шаге производится отделение одной ветви, для чего применяется одна управляющая конструкция ветвления.
09.11.2021
Конструкция первого шага образует внешнее ветвление, а каждая следующая вкладывается в
09.11.2021
Конструкция первого шага образует внешнее ветвление, а каждая следующая вкладывается в
На первом шаге выбирается любая ветвь, желательно с простым условием выбора, а все оставшиеся ветви объединяются в группу. Эта группа считается второй ветвью обычного ветвления, которое реализуется условным оператором в полной форме. В результате такого разделения в «групповой» ветви окажется n-1 исходная ветвь.
Далее точно таким же способом «групповая» ветвь вновь разделяется на две. После чего в новой «групповой» ветви останется n-2 исходные ветви.
Процесс продолжается до тех пор, пока в последней «групповой» ветви не останется только две исходные ветви. Последнее разделение приведет к тому, что все исходные ветви окажутся отделёнными друг от друга.
09.11.2021
Пример: алгоритм с тремя ветвями
Построить алгоритм вычисления значения функции
для любого вещественного
09.11.2021
Пример: алгоритм с тремя ветвями
Построить алгоритм вычисления значения функции
для любого вещественного
Рассуждая точно также как ранее. приходим к выводу о том, что входной величиной алгоритма является вещественная переменная х, а выходной — вещественная переменная у. И описания переменных и действия, связанные с вводом/выводом, записываются точно такие же, как в решении задачи о полном ветвлении.
09.11.2021
при x≤0: y(x)=0;
при 0 при x>1: y(x)=x2+sin πx.
По
09.11.2021
при x≤0: y(x)=0; По
при 0
Анализ условий выбора ветвей показывает, что они попарно не пересекаются, а их объединение охватывает всю вещественную прямую. Следовательно, эти три условия могут быть использованы для корректной организации ветвления.
По общей схеме организации ветвления вначале с помощью условия x≤0 выделим две ветви ─ одну обычную, содержащую первый вариант вычисления y:=0, а вторую ─ объединяющую все оставшиеся варианты.
09.11.2021
-
нет
x>1
+
да
0x>0 ─ уже выполнено
-
нет
x>0
+
да
x≤0
x≤0
y:=0
Остальные варианты
Начало
Ввод x
Вывод x,y
Конец
x≤1
y:=x2-x
y:=x2+sin πx
Остальные варианты
x>0 ∧
09.11.2021
-
нет
x>1
+
да
0 x>0 ─ уже выполнено - нет x>0 + да x≤0 x≤0 y:=0 Остальные варианты Начало Ввод x Вывод x,y Конец x≤1 y:=x2-x y:=x2+sin πx Остальные варианты x>0 ∧
09.11.2021
-
нет
x>1
+
да
0x>0
-
нет
+
да
x≤0
x≤0
y:=0
Начало
Ввод x
Вывод x,y
Конец
x≤1
y:=x2-x
y:=x2+sin πx
09.11.2021
-
нет
x>1
+
да
0 x>0 - нет + да x≤0 x≤0 y:=0 Начало Ввод x Вывод x,y Конец x≤1 y:=x2-x y:=x2+sin πx
09.11.2021
Обратите внимание на оформление в этой блок-схеме вложенного и внешнего ветвлений.
09.11.2021
Обратите внимание на оформление в этой блок-схеме вложенного и внешнего ветвлений.
Блоки действий в ветвях рекомендуется располагать на одном и том же уровне.
Каждое деление на две ветви завершается объединение с помощью собственного соединителя, и каждый соединитель располагается строго под своим блоком ветвления.
Такое оформление помогает лучше понять содержание ветвлений, и кроме того, соответствует технологии структурного программирования, о которой речь пойдёт в дальнейшем.
09.11.2021
// Паскале-подобный
var x, y: real;
begin
read(x);
if x<=
09.11.2021
// Паскале-подобный
var x, y: real;
begin
read(x);
if x<=
y:=0.0
else //x>0, выбрана «групповая» ветвь
{Остальные варианты}
write (x, y);
end.
Теперь, учитывая, что в точке алгоритма, обозначенной комментарием «Остальные варианты», неравенство x>0 удовлетворяется, разделим две оставшиеся ветви. Выбрав неравенство x<=1 в качестве условия вложенного ветвления, получим такое уточнение:
09.11.2021
if x<=1.0 then {0 y:=x*x–x
else {x>1
09.11.2021
if x<=1.0 then {0
else {x>1
y:=x*x+ sin(π*x);
{Остальные варианты. x уже больше нуля}
После вложения отдельно проработанного участка в заготовку получим окончательный вариант алгоритма:
09.11.2021
09.11.2021
09.11.2021
09.11.2021
09.11.2021
Для тестирования алгоритма, содержащего n ветвей необходимо подобрать 2n-1 тестовый набор,
09.11.2021
Для тестирования алгоритма, содержащего n ветвей необходимо подобрать 2n-1 тестовый набор,
Особое внимание необходимо уделять точкам ветвления, так как именно в этих точках чаще всего по невнимательности допускаются ошибки, связанные с тем, что вместо строго неравенства используется нестрогое (либо наоборот), в результате граничная точка попадает не в ту ветвь, в которой она должна быть.
Исходя из приведённых соображений для тестирования алгоритма необходимо, по крайней мере, пять тестовых наборов.
В построенном алгоритме для внешнего ветвления было выбрано условие разделения x≤0. Вообще говоря, для разделения ветвей можно выбрать любое другое условие. Исходя из того, что в рассматриваемом алгоритме три ветви и каждое вложенное ветвление можно записать двумя способами, получаем, что алгоритм можно записать шестью различными способами. Несложно доказать, что для алгоритма, содержащего n ветвей при использовании условного оператора существует n! вариантов его записи.
09.11.2021
-
нет
x≤0
+
да
0x≤1
-
нет
+
да
x>1
x>1
y:=x2+sinπx
Начало
Ввод x
Вывод x,y
Конец
x>0
y:=x2-x
y:=0
09.11.2021
-
нет
x≤0
+
да
0 x≤1 - нет + да x>1 x>1 y:=x2+sinπx Начало Ввод x Вывод x,y Конец x>0 y:=x2-x y:=0
09.11.2021
-
нет
x>1
+
да
0x>0
-
нет
+
да
x≤0
x≤0
y:=0
Начало
Ввод x
Вывод x,y
Конец
x>1
y:=x2-x
y:=x2+sin πx
09.11.2021
-
нет
x>1
+
да
0 x>0 - нет + да x≤0 x≤0 y:=0 Начало Ввод x Вывод x,y Конец x>1 y:=x2-x y:=x2+sin πx
09.11.2021
-
нет
x>1
+
да
0x≤0 ∨ x>1
-
нет
+
да
x≤0
0y:=x2-x
Начало
Ввод x
Вывод x,y
Конец
x≤0
y:=0
y:=x2+sin πx
09.11.2021
-
нет
x>1
+
да
0 x≤0 ∨ x>1 - нет + да x≤0 0 y:=x2-x Начало Ввод x Вывод x,y Конец x≤0 y:=0 y:=x2+sin πx
09.11.2021
Все построенные таким путём варианты со смысловой точки зрения одинаковы и
09.11.2021
Все построенные таким путём варианты со смысловой точки зрения одинаковы и
Например, условие выбора средней ветви использовать не следует, так как по правилам алгоритмических языков ему соответствует выражение вида (x>0.0) ∧ (x≤1.0), содержащее три операции, следовательно, соответствующий фрагмент алгоритма будет менее эффективным, чем при использовании простых выражений вида x>1.0.
09.11.2021
Построение циклических алгоритмов
Решения подавляющего большинства задач включают в себя многократно выполняющиеся
09.11.2021
Построение циклических алгоритмов
Решения подавляющего большинства задач включают в себя многократно выполняющиеся
Общую структуру циклических алгоритмов удобно проследить на примере, рассмотренном при обсуждении свойства конечности алгоритма. В этом алгоритме циклический участок образуется из трех действий: 1) приём лекарства утром, 2) приём лекарства в обед и 3) приём лекарства вечером.
Такую группу многократно выполняемых действий принято называть телом цикла. Однократное выполнение тела цикла называется итерацией (англ. iteration — повторение). В рассматриваемом примере итерация представляет собой совокупность действий по приёму дневной нормы лекарства.
С телом цикла связано условие повторения, которое определяет необходимость выполнения действий, входящих в тело. В примере условие повторения имеет вид «пока больной не выздоровеет».
09.11.2021
Фрагмент конструкции цикла, в котором находится условие повторения, обычно называют заголовком
09.11.2021
Фрагмент конструкции цикла, в котором находится условие повторения, обычно называют заголовком
Условие повторения может иметь самые разные формы. При его удовлетворении итерации продолжаются, а как только это условие нарушится, итерации прекращаются.
Поэтому с циклом можно связать ещё одно условие — условие завершения, которое является отрицанием условия повторения. Если удовлетворено условие завершения, то условие повторения не удовлетворяется, поэтому итерации прекращаются, а значит, завершается выполнение цикла в целом. В обсуждаемом алгоритме условие завершения — «больной выздоровел».
При некорректном построении цикла условие повторения может удовлетворяться всегда, а условие завершения — не удовлетворяться никогда. Такая ситуация носит название бесконечного цикла. Наличие непрекращающихся итераций, очевидно, противоречит требованию конечности алгоритма.
Перед циклом обязательно находится подготовительный (обычно линейный) участок, без которого невозможно организовать цикл. В обсуждаемом примере подготовительные действия состоят в предварительной покупке лекарства. Такого рода действия принято называть инициализацией цикла.
09.11.2021
Итак, в структуре алгоритма с циклом имеется три основных, связанных с
09.11.2021
Итак, в структуре алгоритма с циклом имеется три основных, связанных с
инициализация цикла;
условие повторения/условие завершения;
тело цикла.
Любой цикл обязательно содержит эти составные части, и от их точного построения и взаимодействия существенно зависит правильность результата исполнения цикла, да и алгоритма в целом.
Фактически мы уже сталкивались с циклами, когда обсуждали программу для машины Поста. Если проанализировать, например, ход выполнения программы увеличения заданного на ленте числа на единицу, легко заметить, что команды 1 и 2 выполняются два раза подряд, следовательно, они образуют тело цикла, в котором исполняются две итерации.
09.11.2021
условие
Тело цикла
Действия, которые требуются выполнить многократно, образуют тело цикла. Часть цикла,
09.11.2021
условие
Тело цикла
Действия, которые требуются выполнить многократно, образуют тело цикла. Часть цикла,
Инициализация
false
true
Для задания циклов в алгоритмах используются несколько управляющих конструкций. В частности, для формирования любых циклических участков алгоритмов используется универсальный цикл с предусловием.
09.11.2021
В соответствии с этой схемой вначале выполняются все связанные с инициализацией
09.11.2021
В соответствии с этой схемой вначале выполняются все связанные с инициализацией
Сама управляющая конструкция цикла с предусловием предписывает следующую последовательность шагов его выполнения:
проверяется условие повторения, и если оно удовлетворяется, то тело цикла выполняется, то есть осуществляется ровно одна итерация тела;
затем происходит возврат к проверке условия повторения и вновь при его удовлетворении выполняется одна итерация тела цикла;
эти действия — проверка условия повторения и очередная итерация — повторяются до тех пор, пока условие повторения удовлетворяется;
как только условие повторения в первый раз окажется нарушенным, (то есть как только удовлетворится условие завершения) выполнение цикла заканчивается.
Особо подчеркнём, что если условие повторения окажется нарушенным при самой первой проверке, то тело цикла не выполнится ни разу.
09.11.2021
Эта управляющая конструкция имеет практически точные аналоги почти во всех алгоритмических
09.11.2021
Эта управляющая конструкция имеет практически точные аналоги почти во всех алгоритмических
while <условие > do <тело цикла>
while (<условие >) <тело цикла>;
Так, в языке Паскаль цикл с предусловием определяется так:
В Си подобных языках:
Начальный фрагмент оператора while <логическое выражение> do // Па, while (<логическое выражение>) // Cи представляет собой заголовок цикла, а входящее в заголовок логическое выражение — это записанное по правилам соответствующего языка условие повторения тела цикла.
Завершающий фрагмент конструкции <оператор> — это тело цикла, то есть многократно повторяющееся действие. Из определений следует, что тело цикла в этой форме оператора может быть задано только одним оператором.
Если по логике решения задачи в этом месте должно находиться более одного оператора, то они должны быть заключены в операторные скобки.
09.11.2021
Значение входящего в заголовок логического выражения вычисляется перед каждым выполнением тела
09.11.2021
Значение входящего в заголовок логического выражения вычисляется перед каждым выполнением тела
Если получается логическое значение true, то оператор, задающий тело цикла, выполняется.
Как только логическое выражение получит значение false — выполнение оператора цикла завершается и наступает очередь выполнения оператора, расположенного следом за оператором цикла
09.11.2021
Общие рекомендации по построению
циклических алгоритмов
Чтобы обеспечить корректность построения циклов можно
09.11.2021
Общие рекомендации по построению
циклических алгоритмов
Чтобы обеспечить корректность построения циклов можно
исходя из формулировки задачи и анализа проблемной области, зафиксировать действия, которые должны выполняться многократно, то есть определить тело цикла;
точно сформулировать условие повторения тела цикла;
для контроля правильности выбранного условия повторения рекомендуется явно определить, что именно в терминах предметной области означает невыполнение этого условия, то есть явно сформулировать условие завершения, которое должно быть отрицанием условия повторения;
и тело цикла, и условие его повторения, как правило, зависят от некоторых начальных установок, которые должны быть заданы на участке инициализации;
действия, которые должны быть выполнены во время инициализации цикла, следует прорабатывать в последнюю очередь, когда полностью определится всё, что должно быть подготовлено как для проверки условия повторения, так и для итераций тела цикла;
полученные в результате этого анализа элементы циклической структуры фиксируются с помощью блок-схемы или выбранного алгоритмического языка.
09.11.2021
Эти рекомендации имеют весьма общий характер, и их следует тщательно соблюдать,
09.11.2021
Эти рекомендации имеют весьма общий характер, и их следует тщательно соблюдать,
Одна из самых характерных ошибок в построении циклов состоит в некорректной формулировке условия повторения.
Главное в проверке корректности условий повторения и завершения: убедится в том, что итерации (выполнения) тела цикла рано или поздно прекратятся. То есть необходимо следить за тем, чтобы на какой-либо итерации было удовлетворено условие завершения, что и обеспечивает завершаемость цикла.
Завершаемость за конченое время всего алгоритма в целом гарантируется завершаемостью каждого присутствующего в алгоритме цикла.
Построенный циклический алгоритм необходимо особенно тщательно тестировать, поскольку чаще всего ошибки возникают именно в циклах.
Проверка правильности работы цикла требует анализа трех периодов в его выполнении, которые можно условно назвать входом в цикл, рабочим периодом и выходом из цикла.
09.11.2021
Вход в цикл представляет собой выполнение всех действий участка инициализации
09.11.2021
Вход в цикл представляет собой выполнение всех действий участка инициализации
Рабочий период включает в себя проверку условия повторения и выполнения тела цикла. Цель тестирования этого периода — убедиться в наличии действий или изменений, которые после нескольких итераций приводят к удовлетворению условия завершения.
Выход из цикла включает в себя последнюю итерацию, после выполнения которой условие повторения нарушается, и работа цикла завершается. Цель тестирования выхода — убедится в том, что тело цикла выполнено ровно столько раз, сколько требуется в алгоритме.
Для проверки корректности цикла необходимо составить тестовые наборы, с помощью которых контролируется каждый из периодов его выполнения. Кроме того, необходимо проверить реакцию алгоритма или программы на случай задания бессмысленных с точки зрения решаемой задачи значений переменных, связанных с циклом.
09.11.2021
Задача о рекуррентной последовательности
Пусть элементы последовательности связаны друг с другом соотношением:
Последовательности
09.11.2021
Задача о рекуррентной последовательности
Пусть элементы последовательности связаны друг с другом соотношением:
Последовательности
Требуется найти a) 5, б) 100, в) n-й элемент последовательности.
Найти пятый элемент последовательности можно следующим способом:
Положим k=1, тогда, зная a0 можно найти a1:
Положим k=2, тогда, зная a1 можно найти a2:
a1=1*a0+1/2=1
a2=2*a1+1/3≈2,33.
Положим k=3, тогда, зная a2 можно найти a3:
a3=3*a2+1/4 ≈ 7,25
Положим k=4, тогда, зная a3 можно найти a4:
a4=4*a3+1/5≈29,2
Положим k=5, тогда, зная a4 можно найти a5
a5=5*a4+1/6 ≈ 146,17
Пример.
Подготовительные действия: положим k=0 и a0=0.5
09.11.2021
Зафиксируем вытекающие из рекуррентного соотношения важные для дальнейшего моменты в проведённых
09.11.2021
Зафиксируем вытекающие из рекуррентного соотношения важные для дальнейшего моменты в проведённых
Обратим также внимание на то, что алгоритм определения пятого элемента последовательности состоит ровно из шести шагов.
На начальном, нулевом шаге фиксируются явно заданные значения, а на оставшихся пяти определяются действия, необходимые для вычисления каждого очередного элемента. Эта связь между номером элемента и количеством шагов в линейном алгоритме сохраняется для любого другого элемента последовательности.
Отсюда следует, что аналогичный построенному линейный вариант алгоритма практически может быть использован только для тех случаев, когда требуется определить значение элемента последовательности с относительно маленьким номером.
Конечно, построить подобный алгоритм для вычисления сотого элемента (пункта б задачи) также можно, но его запись, содержащая сто один шаг, окажется очень громоздкой и неудобочитаемой.
09.11.2021
С теоретической точки зрения линейный алгоритм, несмотря на то, что он
09.11.2021
С теоретической точки зрения линейный алгоритм, несмотря на то, что он
Если номер элемента заранее не задан, и его значение необходимо вводить по ходу исполнения алгоритма или же вычислять с помощью какого-либо другого алгоритма, то записать линейный алгоритм для решения этой задачи принципиально невозможно, поскольку количество шагов такого алгоритма на этапе его построения оказывается неизвестным.
Заметим также, что у линейного варианта построения для различных значений n получаются разные алгоритмы, содержащие различное количество шагов в записи алгоритма.
А это в свою очередь означает, что использовать один и тот же линейный алгоритм для определения различных элементов последовательности невозможно — для каждого элемента потребуется свой собственный алгоритм.
Из этих рассуждений следует, что для получения решения пункта в) задачи требуется искать принципиально другой способ построения.
09.11.2021
При анализе проведённых расчётов возникает ощущение, что при вычислении каждого очередного
09.11.2021
При анализе проведённых расчётов возникает ощущение, что при вычислении каждого очередного
Чтобы это увидеть следует ввести в рассуждения переменную, которая имеет смысл текущего элемента последовательности. Назовем такую переменную, например a.
Особенность переменной а в том, что её значение совпадает с значением элемента последовательности, который рассматривается на текущем шаге:
0) а=a0
1) a=a1
2)a=a2
k)a=ak
…
Тогда, опираясь на свойства действия присваивания, вычисление очередного элемента можно записать в виде:
а:=k*a+1/(k+1)
09.11.2021
По условиям задачи в начальный момент исполнения действий к=0, а=0.5.
k :=
09.11.2021
По условиям задачи в начальный момент исполнения действий к=0, а=0.5.
k :=
k := 1; a:=k*a+1/(k+1); {Вычисление первого элемента}
k := 2; a:=k*a+1/(k+1); {Вычисление второго элемента}
k := 3; a:=k*a+1/(k+1); {Вычисление третьего элемента}
k := 4; a:=k*a+1/(k+1); {Вычисление четвертого элемента}
k := 5; a:=k*a+1/(k+1); {Вычисление пятого элемента}
Анализируя полученный фрагмент алгоритма, можно отметить, что в нем имеется группа почти одинаковых действий. Обращая внимание на то, что в каждой следующей группе значение k увеличивается ровно на единицу, приходим к выводу о том, что эту группу можно привести к совершенно одинаковой форме если использовать присваивание вида
k:=k+1
k := 0: a := 0.5: {Инициализация, задание начальных значений}
k := k+1; a:=k*a+1/(k+1); {Вычисление первого элемента}
k := k+1 ; a:=k*a+1/(k+1); {Вычисление второго элемента}
k := k+1; a:=k*a+1/(k+1); {Вычисление третьего элемента}
k := k+1; a:=k*a+1/(k+1); {Вычисление четвертого элемента}
k := k+1; a:=k*a+1/(k+1); {Вычисление пятого элемента}
09.11.2021
// Си-подобный
k = 0; a = 0.5; // Задание начальных значений
k
09.11.2021
// Си-подобный
k = 0; a = 0.5; // Задание начальных значений
k
k ++; a = k*a+1.0/(k+1); //Вычисление второго элемента
k ++; a = k*a+1.0/(k+1); //Вычисление третьего элемента
k ++; a = k*a+1.0/(k+1); //Вычисление четвертого элемента
k ++; a = k*a+1.0/(k+1); //Вычисление пятого элемента
09.11.2021
1. Устанавливаем, из каких действий состоит тело цикла:
Увидели, что имеется группа
09.11.2021
1. Устанавливаем, из каких действий состоит тело цикла:
Увидели, что имеется группа
2. Определяем условие повторения:
повторяем вычисления, пока требуемый элемент не окажется уже вычисленным, то есть, его номер k меньше номера n искомого.
Определяем действия инициализации:
k=0 и a=0.5
увеличение номера элемента k на единицу и вычисление значения очередного элемента последовательности (текущего значения a).
Теперь по общей схеме построения алгоритмов определяемся с входными, выходными и промежуточными величинами и их типами.
09.11.2021
Подготовка
Начало
kk:=k+1
false
true
a:=0.5
k:=0
Ввод N
a:=k*a+1/(k+1)
Вывод N, а
Конец
Тело цикла
N,k: integer; a:real;
read(n);
a:=0.5;
begin
k:=0;
while kbegin
{Номер очередного элемента}
k:=k+1;
09.11.2021
Подготовка
Начало
k k:=k+1 false true a:=0.5 k:=0 Ввод N a:=k*a+1/(k+1) Вывод N, а Конец Тело цикла N,k: integer; a:real; read(n); a:=0.5; begin k:=0; while k begin {Номер очередного элемента}
k:=k+1;
{вычисление очередного элемента}
a:=k*a+1/(k+1);
end;
write(N,a)
end.
{Подготовка к циклу}
09.11.2021
// Си-подобный
main ( )
{
int n;
scan(n); //Ввод заданного номера
09.11.2021
// Си-подобный
main ( )
{
int n;
scan(n); //Ввод заданного номера
// Инициализация цикла
int k=0; //Начальный номер
float a=0.5; //Начальный элемент
while (k
//Получение номера элемента
k++;
//Получение его значения
a=k*a+1.0/(k+1);
}
// Вывод номера и значения искомого элемента
print (n, a[n]);
}
09.11.2021
Условие kНачало
kk:=k+1
false
true
a:=0.5
k:=0
Ввод N
a:=k*a+1/(k+1)
Вывод N, а
Конец
N,k: integer; a:real;
read(n);
a:=0.5;
begin
k:=0;
while k≤N do
begin
{Номер очередного элемента}
k:=k+1;
09.11.2021
Условие k Начало k k:=k+1 false true a:=0.5 k:=0 Ввод N a:=k*a+1/(k+1) Вывод N, а Конец N,k: integer; a:real; read(n); a:=0.5; begin k:=0; while k≤N do begin {Номер очередного элемента}
k:=k+1;
a:=k*a+1/(k+1);{вычисление очередного элемента}
end;
write(N,a)
end.
{Подготовка к циклу}
N k a
5
0
0.5
(k=0)< (N=5) ⇒ true
1
1
(k=1)< (N=5) ⇒ true
2
2,33
(k=2)< (N=5) ⇒ true
3
7,25
(k=3)< (N=5) ⇒ true
4
29,2
(k=4)< (N=5) ⇒ true
5
146,17
(k=5)< (N=5) ⇒ false
Результат:
5
146,17
5
146,17
N a
09.11.2021
Начало
kfalse
true
a:=0.5
k:=0
Ввод N
a:=k*a+1/(k+1)
Вывод N, а
Конец
N,k: integer; a:real;
read(n);
a:=0.5;
begin
k:=0;
while kbegin
a:=k*a+1/(k+1);{вычисление очередного элемента}
end;
write(N,a)
end.
{Подготовка к
09.11.2021
Начало
k false true a:=0.5 k:=0 Ввод N a:=k*a+1/(k+1) Вывод N, а Конец N,k: integer; a:real; read(n); a:=0.5; begin k:=0; while k begin a:=k*a+1/(k+1);{вычисление очередного элемента} end; write(N,a) end. {Подготовка к
!
09.11.2021
Начало
k≤N
k:=k+1
false
true
a:=0.5
k:=0
Ввод N
a:=k*a+1/(k+1)
Вывод N, а
Конец
Начало
kk:=k+1
false
true
a:=0.5
k:=1
Ввод N
a:=k*a+1/(k+1)
Вывод N, а
Конец
!
!
09.11.2021
Начало
k≤N
k:=k+1
false
true
a:=0.5
k:=0
Ввод N
a:=k*a+1/(k+1)
Вывод N, а
Конец
Начало
k k:=k+1 false true a:=0.5 k:=1 Ввод N a:=k*a+1/(k+1) Вывод N, а Конец ! !
09.11.2021
Начало
ka:=k*a+1/(k+1)
false
true
a:=0.5
k:=0
Ввод N
k:=k+1
Вывод N, а
Конец
Начало
ka:=k*a+1/(k+1)
false
true
a:=0.5
k:=1
Ввод N
k:=k+1
Вывод N, а
Конец
!
!
!
09.11.2021
Начало
k a:=k*a+1/(k+1) false true a:=0.5 k:=0 Ввод N k:=k+1 Вывод N, а Конец Начало k a:=k*a+1/(k+1) false true a:=0.5 k:=1 Ввод N k:=k+1 Вывод N, а Конец ! ! !
09.11.2021
Начало
k≤N
a:=k*a+1/(k+1)
false
true
a:=0.5
k:=1
Ввод N
k:=k+1
Вывод N, а
Конец
N,k: integer; a:real;
read(n);
a:=0.5;
begin
k:=1;
while k≤N do
begin
{Номер следующего элемента}
k:=k+1;
a:=k*a+1/(k+1);{вычисление
09.11.2021
Начало
k≤N
a:=k*a+1/(k+1)
false
true
a:=0.5
k:=1
Ввод N
k:=k+1
Вывод N, а
Конец
N,k: integer; a:real;
read(n);
a:=0.5;
begin
k:=1;
while k≤N do
begin
{Номер следующего элемента}
k:=k+1;
a:=k*a+1/(k+1);{вычисление
end;
write(N,a)
end.
{Подготовка к циклу}
09.11.2021
Ещё раз, кратко:
Выявить группу повторяющихся действий ─ сформировать тело цикла.
Установить условия
09.11.2021
Ещё раз, кратко:
Выявить группу повторяющихся действий ─ сформировать тело цикла.
Установить условия
Установить начальные значения величин, участвующих в условии и в теле цикла ─ выполнить инициализацию цикла.
09.11.2021
Задача вычисления суммы
Исходной величиной задачи является переменная N целого типа ─
09.11.2021
Задача вычисления суммы
Исходной величиной задачи является переменная N целого типа ─
Мы можем рассматривать переменную S как текущее значение накапливаемой суммы, вычислять и по очереди добавлять к ней каждое слагаемое. Тогда после добавления последнего слагаемого значение S будет представлять собой искомый результат
Итак, тело цикла образуют следующие действия: вычисление очередного слагаемого, добавление его к текущему значению S и переход к следующему слагаемому.
Условие, при котором выполняются эти действия ─ наличие еще не вычисленных и не добавленных слагаемых.
До начала вычислений уже накопленное значение суммы равно нулю, а накапливать сумму можно начать с первого слагаемого.
09.11.2021
var S,a: real; N,I :integer;
begin
read (N); {Ввод количества слагаемых}
{Инициализация цикла}
S:=0;
09.11.2021
var S,a: real; N,I :integer;
begin
read (N); {Ввод количества слагаемых}
{Инициализация цикла}
S:=0;
i:=1; {накопление суммы с первого слагаемого }
while i≤N do {пока есть еще не рассмотренные слагаемые}
begin
a:=1/(i*i+1); {вычисление очередного слагаемого }
S:=S+a; {добавление очередного слагаемого}
i:=i+1 {переход к следующему слагаемому}
end;
write (N,S) {Вывод результатов}
end.
09.11.2021
09.11.2021
09.11.2021
S: real; N,i:integer;
begin
read (N); {Ввод количества слагаемых}
{Инициализация цикла}
S:=0; {Начальное значение
09.11.2021
S: real; N,i:integer;
begin
read (N); {Ввод количества слагаемых}
{Инициализация цикла}
S:=0; {Начальное значение
i:=1; {накопление суммы с первого слагаемого }
while i≤N do {пока есть еще не рассмотренные слагаемые}
begin
S:=S+1/(i*i+1); {добавление очередного слагаемого}
i:=i+1 {переход к следующему слагаемому}
end;
write (N,S) {Вывод результатов}
end.
В данном случае можно не использовать отдельную переменную для очередного слагаемого.
09.11.2021
S: real; N,i:integer;
begin
read (N); {Ввод количества слагаемых}
{Инициализация цикла}
S:=0.5; {Начальное значение
09.11.2021
S: real; N,i:integer;
begin
read (N); {Ввод количества слагаемых}
{Инициализация цикла}
S:=0.5; {Начальное значение
i:=2; {накопление суммы со второго слагаемого }
while i≤N do {пока есть еще не рассмотренные слагаемые}
begin
S:=S+1/(i*i+1); {добавление очередного слагаемого}
i:=i+1 {переход к следующему слагаемому}
end;
write (N,S) {Вывод результатов}
end.
В данном случае в качестве начального значения S можно выбрать первое слагаемое. Тогда циклический процесс накопления суммы нужно начинать со второго слагаемого.
!
!
09.11.2021
S: real; N,i:integer;
begin
read (N); {Ввод количества слагаемых}
{Инициализация цикла}
S:=0; {Начальное значение
09.11.2021
S: real; N,i:integer;
begin
read (N); {Ввод количества слагаемых}
{Инициализация цикла}
S:=0; {Начальное значение
i:=0; {начальное значение номера}
while i begin S:=S+1/(i*i+1); {добавление очередного слагаемого} i:=i+1 {получение номера текущего слагаемого} end; write (N,S) {Вывод результатов} end. В качестве начального значения i можно использовать нуль, а не единицу. Это повлечет за собой необходимость изменить строгое неравенство в заголовке цикла на нестрогое, а также изменить порядок выполнения действий в теле цикла. ! ! !
09.11.2021
S: real; N,i:integer;
begin
read (N); {Ввод количества слагаемых}
{Инициализация цикла}
S:=0; {Начальное значение
09.11.2021
S: real; N,i:integer;
begin
read (N); {Ввод количества слагаемых}
{Инициализация цикла}
S:=0; {Начальное значение
i:=N; {накопление суммы с последнего слагаемого }
while i≥1 do {пока есть еще не рассмотренные слагаемые}
begin
S:=S+1/(i*i+1); {добавление очередного слагаемого}
i:=i-1 {переход к предыдущему слагаемому}
end;
write (N,S) {Вывод результатов}
end.
В данном случае можно начать накопление суммы с последнего слагаемого и двигаться к первому, переходя от текущего к предыдущему
!
!
!
09.11.2021
Суммирование с рекуррентным соотношением между слагаемыми
Пусть ai ─ очередное i слагаемое
09.11.2021
Суммирование с рекуррентным соотношением между слагаемыми
Пусть ai ─ очередное i слагаемое
Таким образом, для слагаемых получено следующее рекуррентное соотношение:
Для накопления суммы переменной S присвоим значение нулевого слагаемого, а циклическое накопление начнем с первого. Кроме того, учтем, что в данном случае потребуется явное использование переменной a, служащей для хранения значения очередного слагаемого
09.11.2021
S,a: real; N,i:integer;
begin
read (N); {Ввод количества слагаемых}
{Инициализация цикла}
S:=1. {Начальное значение
09.11.2021
S,a: real; N,i:integer;
begin
read (N); {Ввод количества слагаемых}
{Инициализация цикла}
S:=1. {Начальное значение
i:=1; {накопление суммы с первого слагаемого }
while i≤N do {пока есть еще не рассмотренные слагаемые}
begin
S:=S+a; {добавление очередного слагаемого}
i:=i+1 {переход к следующему слагаемому}
end;
write (N,S) {Вывод результатов}
end.
a:=1; {Нулевое слагаемое}
a:=a/i; {Рекуррентное определение очередного слагаемого}
09.11.2021
09.11.2021
09.11.2021
Суммирование произвольных слагаемых
x: array of real; S: real; N,i: integer;
begin
read (N,
09.11.2021
Суммирование произвольных слагаемых
x: array of real; S: real; N,i: integer;
begin
read (N,
{Инициализация цикла}
S:=0; {Начальное значение накапливаемой суммы}
i:=1; {накопление суммы с первого слагаемого }
while i≤N do {пока есть еще не рассмотренные слагаемые}
begin
S:=S + x[i]; {добавление очередного слагаемого}
i:=i+1 {переход к следующему слагаемому}
end;
write (N,S) {Вывод результатов}
end.
09.11.2021
Нахождение экстремального элемента массива
Пусть задан массив x ={x1,x2,…,xn}. В простейшем случае
09.11.2021
Нахождение экстремального элемента массива
Пусть задан массив x ={x1,x2,…,xn}. В простейшем случае
Пусть max ─ переменная, которая играет роль «кандидата на должность» наибольшего элемента, i ─ номер очередного элемента массива. Если элементы массива, относятся к целому типу, то и max тоже величина целого типа.
x: array of integer; i, N, max: integer;
begin
read (N, x); {ввод размерности и значений элементов массива}
max:=x[1]; {назначение кандидатом первого элемента массива}
i:=2: {перебор остальных элементов массива, начиная со второго}
while i ≤ N do {пока есть ещё не рассмотренные элементы}
if x[i]>max then max:=x[i]; {сравнение очередного с кандидатом}
begin
i:=i+1 {переход к следующему элементу массива}
end;
write (max)
end.
09.11.2021
09.11.2021
09.11.2021
5
3
8
-1
9
7
Проведем тестирование алгоритма на примере x={5, 3, 8, -1, 9, 7}
09.11.2021
5
3
8
-1
9
7
Проведем тестирование алгоритма на примере x={5, 3, 8, -1, 9, 7}
i
max
i:=2: {перебор остальных элементов массива, начиная со второго}
while i ≤ N do {пока есть ещё не рассмотренные элементы}
if x[i]>max then max:=x[i]; {сравнение очередного с кандидатом}
begin
i:=i+1 {переход к следующему элементу массива}
end;
max:=x[1]; {назначение кандидатом первого элемента массива}
i ≤ N
x[i]>max
N
read (N, x); {ввод размерности и значений элементов массива}
x: array of integer; N, i, max: integer;
6
5
2
(i=2) ≤(N=6) ⇒ true
(x[2]=3) > (max=5)⇒ false
3
(i=3) ≤(N=6) ⇒ true
(x[3]=8) > (max=5)⇒ true
8
4
(i=4) ≤(N=6) ⇒ true
(x[4]=-1) > (max=8)⇒ false
5
(i=5) ≤(N=6) ⇒ true
(x[5]=9) > (max=8)⇒ true
9
6
(i=6) ≤(N=6) ⇒ true
(x[6]=7) > (max=9)⇒ false
7
(i=7) ≤(N=6) ⇒ false
write (max)
09.11.2021
int n, x[ ];
scan (n, x); //ввод размерности и значений элементов
09.11.2021
int n, x[ ];
scan (n, x); //ввод размерности и значений элементов
Int max=x[1]; //назначение кандидатом первого элемента массива
int i=2; //перебор остальных элементов массива, начиная со второго
while (i <=n) //пока есть ещё не рассмотренные элементы
if (x[i] { i++; //переход к следующему элементу массива } print (max); } ! main () { if (x[i]
09.11.2021
int n, x[ ];
scan (n, x); //ввод размерности и значений элементов
09.11.2021
int n, x[ ];
scan (n, x); //ввод размерности и значений элементов
int Nmax=1; //назначение кандидатом первого элемента массива
int i=2; //перебор остальных элементов массива, начиная со второго
while (i <= n) //пока есть ещё не рассмотренные элементы
{
i++; //переход к следующему элементу массива
}
print (x[Nmax]);
}
main ()
{
if (x[i]>x[Nmax]) Nmax=i; //очередной лучше (больше) - заменяем
Определение номера экстремального элемента
09.11.2021
В посленднем варианте построения алгоритма результат его выполнения при наличии одинаковых
09.11.2021
В посленднем варианте построения алгоритма результат его выполнения при наличии одинаковых
Чтобы убедиться в этом можно взять, например, такой набор входных данных n=6 и x=(4, 9, 2, 9, 0, 3). Непосредственно видно, что в этом массиве имеется два одинаковых максимальных: второй и четвёртый элементы имеет значение 9.
Если искать только значение максимального, то ответ в любом случае один и тот же — 9. Если же требуется не само значение, а его номер, то ответом может быть и 2 и 4.
Обсудим теперь зависимость результата от строгости знака. Пусть сравнение в цикле осуществляется оператором if (x[i]>x[Nmax]) Nmax=i, условие которого содержит строгое неравенство x[i]>x[Nmax].
Тогда в результате выполнения алгоритма ответом будет номер первого среди максимальных Nmax=2. В самом деле, при i=4 неравенство x[i]>x[Nmax], в котором сравниваться x[4]=9 и a[Nmax]=9, не выполняется, поэтому замены значения Nmax не произойдёт.
Если же в условном операторе использовать нестрогое неравенство x[i]>=x[Nmax], которое при i=4 выполняется, замена значения Nmax произойдёт и алгоритм выдаст в качестве ответа номер последнего среди максимальных Nmax=4.
09.11.2021
Определение экстремального элемента и его номера
int i, n, max, Nmax
09.11.2021
Определение экстремального элемента и его номера
int i, n, max, Nmax
scan (n, x); //ввод размерности и значений элементов массива
max=x[1]; Nmax=1; //назначение кандидатов
i=2; //перебор остальных элементов массива, начиная со второго
{
i++; //переход к следующему элементу массива
}
print (max, Nmax);
}
main ()
if (x[i] while (i <= n) //пока есть ещё не рассмотренные элементы { max=x[i]; Nmax=i; //очередной лучше – заменяем }
09.11.2021
Во всех рассмотренных выше вариантах алгоритма в качестве «кандидата» во время
09.11.2021
Во всех рассмотренных выше вариантах алгоритма в качестве «кандидата» во время
В частности, начинать перебор можно как обычно с первого элемента массива. Отличие этого варианта только в том, что во время выполнения цикла произойдет одно лишнее сравнение «кандидата» с самим собой. На конечный результат это дополнительное сравнение никак не повлияет.
Кроме первого элемента на этапе инициализации «кандидатом» может быть назначен любой элемент массива. Это также приведёт к одному лишнему сравнению и не повлияет на конечный результат.
Следует понимать, что выбор начального значения «кандидата» среди элементов массива возможен только том случае, если эти элементы уже известны.
То есть, чтобы назначить «кандидата» во время инициализации цикла хотя бы один элемент массива должен быть уже известен.
Если до начала вычислений элементы массива не известны можно предложить другой способ выбора «кандидата». А именно «кандидатом» назначается любое значение, которое окажется заведомо «хуже» любого возможного значения элемента массива. Такой заведомо худший «кандидат» сразу же заменится первым же вычисленным элементом массива.
09.11.2021
Например, при вычислении наибольшего среди положительных чисел, в качестве «кандидата» можно
09.11.2021
Например, при вычислении наибольшего среди положительных чисел, в качестве «кандидата» можно
09.11.2021
Задача поиска
Общая постановка. В заданной совокупности элементов требуется найти элемент, обладающий
09.11.2021
Задача поиска
Общая постановка. В заданной совокупности элементов требуется найти элемент, обладающий
Важнейший частный случай. Задан массив x, нужно определить имеет ли в нем элемент, совпадающий с заданным числом a. Если такой элемент обнаружен, то в качестве дополнительной информации следует получить номер совпадающего с заданным элемента массива
43
55
82
42
94
18
x[1] x[2] x[3] x[4] x[5] x[6] x[7] x[8]
6
63
25
a
Ответ: В рассматриваемом массиве x элемента, совпадающего с заданным a =25 нет.
18
a
Ответ: В рассматриваемом массиве x есть элемент, совпадающий с заданным a=18. Его номер k=6.
09.11.2021
a)Классический алгоритм
Предлагается очевидный подход к решению задачи: последовательное сравнение каждого очередного
09.11.2021
a)Классический алгоритм
Предлагается очевидный подход к решению задачи: последовательное сравнение каждого очередного
43
55
82
42
94
18
x[1] x[2] x[3] x[4] x[5] x[6] x[7] x[8]
6
63
25
a
Ответ
Не совпадают
43
55
82
42
94
18
x[1] x[2] x[3] x[4] x[5] x[6] x[7] x[8]
6
63
18
a
Ответ
Не совпадают
Не совпадают
Совпадают, k=6
Совпадают
09.11.2021
25
x :array of integer; a, k, i,n :integer; flag: boolean;
begin
read(n,x,a);
09.11.2021
25
x :array of integer; a, k, i,n :integer; flag: boolean;
begin
read(n,x,a);
flag:=false; k:=0; {элемент не найден}
while (i<=N) and not flag do {Поиск продолжается}
if x[i]=a then begin {элемент найден} k:=i; flag:=true end
else {переход к следующему элементу} i:=i+1;
{вывод результатов flag и k}
i:=1; {поиск начинается с первого элемента}
x[1] x[2] x[3] x[4] x[5] x[6] x[7] x[8]
a
Ответ
i
k
flag
n
43
55
82
42
94
18
6
63
8
1
false
0
((i=1) ≤ (n=8))∧ not flag ⇒ true
(x[i]=43) = (a=25) ⇒ false
2
((i=2) ≤ (n=8))∧ not flag ⇒ true
(x[i]=55) = (a=25) ⇒ false
3
((i=3) ≤ (n=8))∧ not flag ⇒ true
(x[i]=82) = (a=25) ⇒ false
4
((i=4) ≤ (n=8))∧ not flag ⇒ true
(x[i]=42) = (a=25) ⇒ false
5
((i=5) ≤ (n=8))∧ not flag ⇒ true
(x[i]=94) = (a=25) ⇒ false
6
((i=6) ≤ (n=8))∧ not flag ⇒ true
(x[i]=18) = (a=25) ⇒ false
7
((i=7) ≤ (n=8))∧ not flag ⇒ true
(x[i]=6) = (a=25) ⇒ false
8
((i=8) ≤ (n=8))∧ not flag ⇒ true
(x[i]=63) = (a=25) ⇒ false
9
((i=9) ≤ (n=8))∧ not flag ⇒ false
false
09.11.2021
18
x :array of integer; a, k, i,n :integer; flag: boolean;
begin
read(n,x,a);
09.11.2021
18
x :array of integer; a, k, i,n :integer; flag: boolean;
begin
read(n,x,a);
flag:=false; k:=0; {элемент не найден}
while (i<=N) and not flag do {Поиск продолжается}
if x[i]=a then begin {элемент найден} k:=i; flag:=true end
else {переход к следующему элементу} i:=i+1;
{вывод результатов flag и k}
i:=1; {поиск начинается с первого элемента}
x[1] x[2] x[3] x[4] x[5] x[6] x[7] x[8]
a
Ответ
i
k
flag
n
43
55
82
42
94
18
6
63
8
1
false
0
((i=1) ≤ (n=8))∧ not flag ⇒ true
(x[i]=43) = (a=18) ⇒ false
2
((i=2) ≤ (n=8))∧ not flag ⇒ true
(x[i]=55) = (a=18) ⇒ false
3
((i=3) ≤ (n=8))∧ not flag ⇒ true
(x[i]=82) = (a=18) ⇒ false
4
((i=4) ≤ (n=8))∧ not flag ⇒ true
(x[i]=42) = (a=18) ⇒ false
5
((i=5) ≤ (n=8))∧ not flag ⇒ true
(x[i]=94) = (a=18) ⇒ false
6
((i=6) ≤ (n=8))∧ not flag ⇒ true
(x[i]=18) = (a=18) ⇒ true
true
6
true
((i=6) ≤ (n=8))∧ not flag ⇒ false
09.11.2021
i:=1; x[N+1]:=a; while x[i]<>a do i:=i+1
б)Быстрый алгоритм
Идея быстрого алгоритма состоит в
09.11.2021
i:=1; x[N+1]:=a; while x[i]<>a do i:=i+1
б)Быстрый алгоритм
Идея быстрого алгоритма состоит в
i:=1;
while (i<=N) and (x[i]<>a) do i:=i+1; {пока номер не превосходит последний и искомый элемент не найден перейти к следующему элементу}
в)Алгоритм с барьером
Следующее улучшение состоит в упрощении условия в заголовке цикла. Целевым является условие x[i]<>a, которое убрать или упростить невозможно. Следовательно, можно рассматривать только условие i<=N, обеспечивающие прекращение просмотра после исчерпания всех элементов цикла. Идея состоит в выставлении в конце массива «барьера». Для этого в массив добавляется N+1 элемент, значение которого приравнивается к искомому.
В алгоритмах линейного поиска максимальное количество операций, которое приходится проделать для определения результата поиска пропорционально N.
09.11.2021
Дальнейшее улучшение алгоритма поиска, который можно было бы использовать для работы
09.11.2021
Дальнейшее улучшение алгоритма поиска, который можно было бы использовать для работы
г)Бинарный поиск.
Областью поиска называется группа элементов массива, среди которых производится поиск. Для произвольного массива область поиска совпадает со всем массивом.
Существуют алгоритмы, в которых область поиска на каждом шаге выполнения уменьшается. Но для их использования массив, в котором производится поиск, должен быть упорядоченным.
Массив x называется отсортированным или упорядоченным, если для всех его элементов выполняется какое-либо одно из неравенств: x[i] Если выполняется неравенство x[i]≤x[i+1], ∀ i=1,2,…,n-1, то массив называется упорядоченным (отсортированным) по возрастанию. Если выполняется неравенство x[i]≥x[i+1], ∀ i=1,2,…,n-1, то массив называется упорядоченным (отсортированным) по убыванию.
09.11.2021
Свойство упорядоченности у элементов массива обеспечивает возможность использования общематематического приёма деления
09.11.2021
Свойство упорядоченности у элементов массива обеспечивает возможность использования общематематического приёма деления
1. Выбирается один из элементов массива, который объявляется «средним» (то есть, находящимся примерно посередине списка элементов массива).
Существуют различные способы выбора такого элемента. В простейшем варианте «средний» элемент выбирается точно так же как вычисляется координата с середины отрезка [a, b]: c=(a+b)/2. Так как номера элементов могут быть только целыми, то номер M выбранного «средним» элемента массива, состоящего из n элементов, можно найти с помощью оператора M:=( n+1) div 2.
2. Выбранный элемент x[M] сравнивается с искомым a и если x[M]=a, то задача поиска считается решённой с положительным результатом и M есть номер найденного элемента.
43
55
82
42
94
18
x[1] x[2] x[3] x[4] x[5] x[6] x[7] x[8]
6
63
43
a
М=4, x[4]=43
09.11.2021
43
55
82
42
94
18
x[1] x[2] x[3] x[4] x[5] x[6] x[7] x[8]
6
63
25
a
3. При
09.11.2021
43
55
82
42
94
18
x[1] x[2] x[3] x[4] x[5] x[6] x[7] x[8]
6
63
25
a
3. При
В противном случае, если средний элемент массива меньше искомого, то все элементы, расположенные левее, будут также меньше его и дальнейший поиск следует выполнять в правой половине массива.
А именно, если средний элемент массива больше искомого, то все элементы, расположенные правее его, также будут больше искомого и дальнейший поиск следует осуществлять в левой половине массива.
Действия пунктов 1–3 применяются к выбранной для продолжения поиска части массива, затем к половине этой части и т.д., до тех пор, пока искомый элемент не будет найден, или же область поиска не окажется пустой. В последнем случае задача поиска считается решённой с отрицательным результатом.
09.11.2021
Итак, во время поиска приходится повторять следующие действия: 1) выбирать средний
09.11.2021
Итак, во время поиска приходится повторять следующие действия: 1) выбирать средний
Так как начальный и конечный элементы рассматриваемой части массива при отбрасывании одной из половин массива будут изменяться, то для записи алгоритма следует использовать переменные, имеющие смысл номеров начального (левого) L и конечного (правого) R элементов массива. Поскольку в начале рассматривается весь массив, то L=1, а R=N. Номер среднего элемента M можно найти стандартным способом: M=(R+L) div 2.
43
55
82
42
94
18
x[1] x[2] x[3] x[4] x[5] x[6] x[7] x[8]
6
63
25
a
1
8
L
R
M
4
В данном случае выбранный элемент массива не совпадает с искомым. Он больше его. Следовательно для поиска нужно выбрать левую половину таблицы.
09.11.2021
Выбор левой половины массива означает, что его правая граница перемещается к
09.11.2021
Выбор левой половины массива означает, что его правая граница перемещается к
43
42
18
6
25
a
1
8
L
R
M
4
4
Но уже известно, что средний элемент не совпадает с искомым, следовательно, область поиска можно ёще больше сузить и считать правой границей элемент, стоящий перед средним: R:=M-1
42
18
6
25
a
1
8
L
R
M
4
3
x[1] x[2] x[3] x[4]
x[1] x[2] x[3]
09.11.2021
42
18
6
25
a
1
8
L
R
M
2
3
x[1] x[2] x[3]
Вновь находим средний элемент рассматриваемой части массива:
M:=(L+R)
09.11.2021
42
18
6
25
a
1
8
L
R
M
2
3
x[1] x[2] x[3]
Вновь находим средний элемент рассматриваемой части массива: M:=(L+R)
Опять не совпадение среднего элемента с искомым. Так как он меньше искомого (x[2]=18,a=25), то для дальнейшего поиска следует выбрать правую половину массива, сместив левую границу L к среднему. Учитывая, предыдущее соображение относительно выбранного элемента, получим, что нужно взять следующий за средним L:=M+1
42
25
a
1
8
L
R
M
2
3
x[3]
3
09.11.2021
Вновь находим средний элемент рассматриваемой части массива:
M:=(L+R) div 2, M=3.
42
25
a
1
8
L
R
M
2
3
3
x[3]
3
И
09.11.2021
Вновь находим средний элемент рассматриваемой части массива:
M:=(L+R) div 2, M=3.
42
25
a
1
8
L
R
M
2
3
3
x[3]
3
И
25
a
L
R
2
3
M
3
Пришли к ситуации, когда дальнейший поиск невозможен, так как левая граница массива стала больше правой L>R ─ массив исчерпан.
09.11.2021
{flag — показывает результат поиска.}
Таким образом, повторяющиеся действия состоят в выборе
среднего
09.11.2021
{flag — показывает результат поиска.}
Таким образом, повторяющиеся действия состоят в выборе среднего
L:=1; {левая граница отрезка поиска совпадает с 1}
R:=N; {правая граница отрезка поиска совпадает с N}
…
flag:=false;{элемент еще не найден}
while (L<=R) and not flag do
begin
M:=(L+R) div 2; {определение номера среднего элемента}
if x[M]=a then {элемент найден}
flag:=true
else {элемент не найден} else {перенос правой границы отрезка поиска} end;
if x[M] L:=M+1
R:=M-1
09.11.2021
Эффективность алгоритмов
Нами были построены различные алгоритмы решения одной и той же
09.11.2021
Эффективность алгоритмов
Нами были построены различные алгоритмы решения одной и той же
В связи с этим возникает ряд вопросов. Что понимать под эффективностью алгоритма? Как можно выяснить, какой алгоритм лучше, эффективнее, а какой хуже? Вообще, как можно сравнивать алгоритмы между собой?
В настоящее время алгортмы принято сравнивать друг с другом по двум критериям — затраченному на выполнение алгоритма времени и потребовавшийся для этого выполнения объём памяти. Первый критерий связан с временной эффективностью алгоритма, а второй — с объёмной эффективностью или эффективностью по памяти.
При сравнении нескольких алгоритмов решения одной и той же задачи по критериию временной эффективности лучшим считается тот алгоритм, на выполнение которого одним и тем же исполнителем на одном и том же наборе исходных данных требуется меньшее время. Аналогичным образом по критерию объёмной эффективности лучшим является тот алгоритм, на выполнение которого одним и тем же исполнителем на одном и том же наборе исходных данных потребовался меньший объём памяти.
09.11.2021
Временная и объёмная эффективности довольно сложным образом связаны и с самим
09.11.2021
Временная и объёмная эффективности довольно сложным образом связаны и с самим
Приведённое выше определение и рассмотренные ранее примеры трассировок алгоритмов показывают, что важнейшим фактором, влияющим на время выполнения алгоритма, а также на требуемую память является набор исходных данных, для которого осуществляется исполнение алгоритма. Такой набор состоит из значений переменных, имена которых указаны в процедурах ввода алгоритма.
Пусть DA— множество допустимых для данного алгоритма A наборов исходных данных. Конкретный набор исходных данных d∈DA, для которого осуществляется фактическое исполнение алгоритма, принято для краткости называть входом алгоритма. Например, входом алгоритма поиска является набор входных данных d= {n → 6 ,x → (4, 9, 2, 9, 0, 3)}.
Фактически затраченное на выполнение алгоритма время, которое определяет его временную эффективность, существенно зависит от конкретного исполнителя, например, от модели компьютера, от его возможностей, скоростей выполнения различных действий и т.д.
Чтобы при анализе алгоритма отделить его собственные свойства от неодинаковых свойств различных исполнителей для сравнения между собой алгоритмов используется не время как таковое в секундах, минутах или часах, а общее количество действий, которые должны быть осуществлены при исполнении алгоритма.
09.11.2021
Это даёт возможность не учитывать различную скорость работы исполнителей. Однако
09.11.2021
Это даёт возможность не учитывать различную скорость работы исполнителей. Однако
Пусть имеется несколько алгоритмов решения одной и той же задачи и для их выполнения используется один и тот же вход d. Тогда более эффективным по времени считается тот алгоритм, при исполнении которого для получения результата требуется выполнить меньше действий.
К отдельным действиям алгоритма при таком подсчёте относятся: арифметические операции (+, –, ×, /), операции сравнения (=, ≠, >, < , ≤, ≥), логические операции (∧, ∨, ¬ ), а также присваивание и некоторые другие действия. А вот действия, связанные с организацией обмена (ввода или вывода данных), как правило, не учитываются.
Таким образом, для улучшения алгоритма, для повышения его временной эффективности следует каким-либо образом уменьшить общее количество действий, связанных с его исполнением, но при этом правильность результата не должна пострадать. Описанный подход позволяет в основном исключить влияние индивидуальных особенностей исполнителя на сравнение алгоритмов и принимать во внимание только важнейшие особенности самих алгоритмов.
09.11.2021
В связи с тем, что временная эффективность алгоритма и количество действий
09.11.2021
В связи с тем, что временная эффективность алгоритма и количество действий
Трудоёмкостью алгоритма A называется характеристика, численно равная количеству действий, которые потребуется выполнить для получения результа во время исполнения алгоритма A на некотором его входе d∈DA.
Трудоёмкость противоположна эффективности: чем больше операций приходится выполнять для получения результата, тем выше трудоёмкость алгоритма, и тем менее он эффективен по времени.
Поскольку на различных входах d∈DA трудоёмкость одного и того же алгоритма A различна, естественно ввести в рассмотрение функцию трудоёмкости, отражающую эту зависимость.
Функция трудоёмкости TA(d) представляет собой отображение множества допустимых наборов данных DA на множество целых положительных чисел N, которое для каждого конкретного входа d∈DA определяет трудоёмкость алгоритма .
09.11.2021
Таким образом, можно утверждать, что вход алгоритма d является аргументом, а
09.11.2021
Таким образом, можно утверждать, что вход алгоритма d является аргументом, а
В качестве характерного примера определения вида функции трудоёмкости, рассмотрим алгоритм накопления суммы. В соответствии с приведёнными выше пояснениями для определения трудоёмкости требуется подсчитать только количество действий из фрагмента алгоритма, в который не входят описания и операции обмена:
S=0.0; i=1; while (i<=n) { a=1.0/(i*i+1.0); S=+a; i++; }
Этот фрагмент содержит:
два действия присваивания на этапе инициализации (S=0.0 и i=1);
одну операцию сравнения, входящую в условие повторения i<=n;
три арифметические операции и присваивание в операторе a=1.0/(i*i+1.0);
одну арифметическую операцию и присваивание в операторе S=S+a;
одну арифметическую операцию и присваивание в операторе i=i+1 (i++).
Суммарное количество перечисленных в пунктах 1–5 действий равно одиннадцати.
09.11.2021
Но девять действий пунктов 2–5 (определение значения условия повторения и действия,
09.11.2021
Но девять действий пунктов 2–5 (определение значения условия повторения и действия,
В рассматриваемом случае любой вход алгоритма состоит из одной переменной n, значение которой определяет количество слагаемых в сумме. Естественно, что она же и оказалась аргументом функции трудоёмкости TA(d)=TA(n)=9n+2 .
Объёмная эффективность
При анализе эффективности алгоритма определение необходимого для его выполнения объёма памяти не менее важно, чем определение затрат времени. Это связано с тем, что в большинстве случаев уменьшение затрат времени на исполнения алгоритма приводит к необходимости соответствующим образом увеличить объём памяти.
Можно, например, хранить таблицу ответов для некоторой задачи, и почти не затрагивать времени на получение результата. Тогда времени потебуется мало, но зато необходимо много памяти на хранение всех ответов.
Другой вариант возникает если отказаться от хранения ответов, а сохранить только небольшой текст программы, которая по сути дела представляет собой набор правил определения ответа. Но при этом каждый раз необходимо тратить время на получение результата, поэтому времени потребуется больше, а памяти — меньше.
09.11.2021
Следовательно, совершенно некорректно говорить об общей эффективности алгоритма, учитывая при этом
09.11.2021
Следовательно, совершенно некорректно говорить об общей эффективности алгоритма, учитывая при этом
Для описания эффективности алгоритма по памяти, то есть требований алгоритма к необходимому для его выполнения объёму памяти, целесообразно ввести функцию объёма памяти, аналогичную функции трудоёмкости.
Функция объёма памяти VA(d) представляет собой отображение множества допустимых наборов данных DA на множество целых положительных чисел N, которое для каждого конкретного входа d∈DA определяет объём памяти (оперативной и внешней), необходимой для выполнения алгоритма A.
Заметим, что при таком подсчёте необходимо учитывать все без исключения константы и переменные, участвующие в вычислениях.
Для определения вида функции объёма памяти следует использовать описания алгоритма, поскольку практически в любом алгоритмическом языке существует требование, в соответствии с которым должным быть описаны все объекты, в том числе все константы и переменные, используемые в алгоритме. В этих описаниях тем или иным образом указывается тип объекта, используемого в алгоритме, а тип в свою очередь определяет необходый для хранения объём памяти.
09.11.2021
Так, например, из описаний алгоритма накопления суммы
int i,n; float a,
09.11.2021
Так, например, из описаний алгоритма накопления суммы
int i,n; float a,
следует, что в нём используется четыре переменные скалярного типа.
Получается, что в этом алгоритме требуется память для хранения только четырёх чисел — значений используемых переменных. Если считать, что для хранения значения каждой из переменных алгоритма выделяются поля длиной четыре байта, то получим, что общий требуемый объём равен 16 байтам, и, следовательно, функция объёма памяти имеет вид: VA(n)=16.
Из общих соображений понятно, что отдельно взятый набор входных данных некоторого алгоритма может состоять из любого конечного количества значений. При этом не все входящие в набор исходных данных величины оказывают одинаково существенное влияние на трудоёмкость алгоритма и объём требуемой памяти.
Характерный размер входа
09.11.2021
main ( )
{
int n, m; //Описания основных
09.11.2021
main ( )
{
int n, m; //Описания основных
scan (n, m); //Ввод исходных данных
int k=n; n=m; m=k; //Описание промежуточной переменной k и обмен
print (n, m) //Вывод результатов
}
Например, для линейного алгоритма
Функции трудоёмкости объёма памяти являются константами: TA(d)=3 и VA(d)=6.
То есть они вообще не зависят от исходных данных.
Отсюда следует, что набор фактических аргументов функции трудоемкости и функции объёма памяти не обязательно совпадает с полным набором исходных данных алгоритма.
09.11.2021
Обычно как для функции трудоёмкости, так и для функции объёма всё
09.11.2021
Обычно как для функции трудоёмкости, так и для функции объёма всё
Возьмем, например, задачу скалярного уножения векторов a и b, состоящих из n компонент.
Любой вход d= (n, a, b) у этого алгоритма состоит из 2n+1-го числа: значения переменной n, которая определяет размерность векторов, а также компонентов этих векторов — элементов массивов a и b.
main ( )
{ int n; float a[ ], b[ ];
// Ввод размерности n и элементов векторов
scan (n, a. b);
// Инициализация цикла
float p=0.0; //Начальное значение суммы
int k=1; //Номер начальной координаты
while (k<=n) //Перебор координат векторов
{
p=+a[k]*b[k]; //Добавление слагаемого
k++; //Номер следующей координаты
}
print (n, a, b, p);
}
Найти функцию трудоёмкости и функцию объёма памяти для этого алгоритма.
09.11.2021
Его фунция трудоёмкости имеет вид TA(d)=TA(n)=6n+2, зависит только от одной входной
09.11.2021
Его фунция трудоёмкости имеет вид TA(d)=TA(n)=6n+2, зависит только от одной входной
Определяя функцию объёма памяти, следует учесть, что если в алгоритме используются данные структурированных типов, например, массивы, то необходимо выделять поле соответствующе длины для хранения каждого из элементов структуры.
В рассматриваемой задаче используются два массива, водержащие по n элемен- тов каждый. Таким образом, на хранение элементов этих массивов требуется 8n байтов памяти. Вся функция объёма памяти, следовательно, имеет вид:
VA(d)=VA(n)=8n+16.
Вход алгоритма обычно может быть охарактеризован некоторым числовым параметром. Чаще всего в качестве такой характеристики используется целое число, которое определённым образом связано со всем набором исходных данных алгоритма . Такую характеристику называют характерным размером входа и обозначают n . Размер входа является аргументом функций эффективности.
09.11.2021
Так, в алгоритме вычисления суммы размер входа определяет количество слагаемых, а
09.11.2021
Так, в алгоритме вычисления суммы размер входа определяет количество слагаемых, а
Заметим, что вход любого алгорима можно представить в виде двоичного кода и задавать его длину в битах. В этом случае характерный размер входа принято называть длиной входа. Этот вариант задания входа характерен для теоретических исследований.
Наилучший и наихудший случаи
Не для всех алгоритмов функция трудоёмкости является непрерывной функцией своих аргументов. Так в алгоритме сортировки двух элементов последовательности, основная часть которого представляет собой сокращённое ветвление
if (a[1]>a[2]) { c=a[1]; a[1]=a[2]; a[2]=c; }
функция трудоёмкости TA(d)=1 в случае выполнения условия a[1]>a[2], а при его невыполнении TA(d)=4.
09.11.2021
Конечно, можно записать такую функцию в традиционном для кусочно-непрерывных функций виде:
09.11.2021
Конечно, можно записать такую функцию в традиционном для кусочно-непрерывных функций виде:
Но это более или менее приемлемый способ для двух-трёх ветвей, а при наличии большого их количества работать с функцией в таком виде становится очень неудобно.
Важно понимать, что в подавляющем большинстве случаев точное распределение значений функции по ветвям не представляет никакого практического интереса.
Как правило, для практических целей важно знать наименьшее и наибольшее количество операций, которые придётся выполнить для получения результата. При этом наименьшее значение считается лучшим случаем и обозначается TAν(d) , а наибольшее считается худшим случаем и обозначается TA∧(d).
С использованием введённых обозначений для алгоритма сортировки получим: TAν(d) =1 и TA∧(d) =4.
09.11.2021
для содержащего три ветви алгоритма вместо уже достаточно неудобного вида обычной
09.11.2021
для содержащего три ветви алгоритма вместо уже достаточно неудобного вида обычной
=
получается короткая, информативная запись: TAν(d) =2 и TA∧(d) =7, которая имеет очень прозрачный смысл: в лучшем случае при исполнении алгоритма потребуется выполнить две операции, а в худшем — семь
Используем теперь введенные понятия для анализа алгоритма определения экстремального элемента массива, основная часть которого имеет вид:
{ … max=x[1]; i=2; while (i <= n) {if (x[i]>max) max=x[i]; i++;} …}
В целом функция трудоёмкости как будто может быть определена по описанной методике. Но при подсчёте количества действий, выполняемых на одной итерации цикла, возникает осложнение, связанное с тем, что внутри цикла имеется ветвление if (x[i]>max) max=x[i];
09.11.2021
В этом ветвлении неравенство x[i]>max удовлетворяется для одних элементов массива и
09.11.2021
В этом ветвлении неравенство x[i]>max удовлетворяется для одних элементов массива и
Получается, что в этом алгоритме невозможно даже определить вид обычной функции трудоёмкости. Но зато очень просто определить лучший и худший случаи. А именно: в лучшем случае оператор max=x[i] не выполнится ни разу, а в худшем случае этот оператор будет выполняться каждый раз, для каждого очередного элемента массива.
Лучший случай возникает, когда первый элемент массива оказывается наибольшим. Тогда в результате первого присваивания мax=x[1] значение переменной max оказывается равным значению этого первого элемента массива и неравенство x[i]>max не удовлетворяется ни одним из последующих элементов массива.
В этом случае на каждой итерации выполняется всего четыре действия i<=n x[i]>max и i++, следовательно, функция трудоёмкости лучшего случая имеет вид: TAν(n)=4n+2.
09.11.2021
Худший случай возникает, когда каждый следущий элемент массива оказывается больше предудущего,
09.11.2021
Худший случай возникает, когда каждый следущий элемент массива оказывается больше предудущего,
Именно в этой ситуации неравенство x[i]>max удовлетворяется каждым следующим элементом массива и, следовательно, на каждой итерации цикла добавляется ещё одно действие max=x[i]. Отсюда функция трудоёмкости худшего случая имеет вид TA∧(n)=5n+2.
Можно предположить, что аналогичные ситуации возникникают и для функции объёма памяти и из тех же самых соображений рассматривать наименьший и наибольший объём памяти, который потребуется алгоритму, и обсуждать функции объёма памяти лучшего и худшего случаев.
При анализе алгоритмов обычно интересуются самым плохим вариантом — худшим случаем, в котором для получения результата требуется выполнить максимально возможное количество действий, или выделить максимально возможный объём памяти.
09.11.2021
Теперь мы можем применить введённые понятия для сравнения между собой различных
09.11.2021
Теперь мы можем применить введённые понятия для сравнения между собой различных
Выберем для этого построенные выше алгоритмы задачи поиска и подсчитаем трудоёмкости и объёмы памяти для каждого из фрагментов, которые представляют основу алгоритмов линейного поиска. Классчический поиск:
flag:=false; k:=0; i:=1;
while (i<=n) and not Flag do
begin
if x[i]=a then begin flag:=true; k:=i end else i :=i+1
end,
быстрый поиск: i:=1; while (i<=n) and (x[i]<>a) do i:=i+1
поиск с барьером i:=1; x[n+1]:=a; while x[i]<>a do i:=i+1
В этих фрагментах невозможно определить точное количество итераций цикла. Поиск зависит как от заданного массива, так и от искомого элемента, и он может быть закончен на любом из элементов массива, в том числе и на самом первом, и на самом последнем.
09.11.2021
Расчёты лучших и худших случаев провсети самостоятельно.
Во всех рассмотренных вариантах построения
09.11.2021
Расчёты лучших и худших случаев провсети самостоятельно.
Во всех рассмотренных вариантах построения
09.11.2021
Опираясь на проведённый для алгоритмов поиска анализ, мы можем уточнить использованные
09.11.2021
Опираясь на проведённый для алгоритмов поиска анализ, мы можем уточнить использованные
Чтобы сформулировать такое определение найдём, например, трудоёмкость худшего случая для классического алгоритма, если на его вход подается массив с рамерностью, скажем, n=10. По второй строке таблицы находим, что трудоёмкость классического алгоритма в этом случае равна 63.
Теперь найдем трудоёмкость худшего случая алгоритма с барьером для массива из 20 элементов (то есть для n=20). По этой же таблице получаем, что трудоёмкость в этом случае равна 84. Другими словами, получается, что не для любых входов алгоритм с барьером лучше, чем классический.
Легко, конечно, заметить, что этот пример не совсем корректен, поскольку для сравниваемых алгоритмов выбраны неодинаковые входы. Однако же для определения лучшего и худшего случаев также выбираются неодинаковые входы.
Отсюда следует, что для того чтобы результат сравнения оказался корректным у всех неодинаковых входов , которые используются для выбора лучшего и худшего случаев функции трудоёмкости алгоритма , должно быть нечто общее, чтобы разница, например, в количестве элементов в массиве не повлияла на значение функции.
09.11.2021
Это же пример даёт требуемый ответ: корректно выбирать лучший и худший
09.11.2021
Это же пример даёт требуемый ответ: корректно выбирать лучший и худший
09.11.2021
На первом шаге количество k рассматриваемых элементов массива равно n
После первого
09.11.2021
На первом шаге количество k рассматриваемых элементов массива равно n
После первого
После второго шага ─ в четыре раза k=n/22.
Вообще, после шага с некоторым номером m: k=n/2m.
В худшем случае процесс поиска закончится после того, как останется один элемент: n/2m=1. Отсюда: m=log2n.
Например, при n=1024 для линейного поиска в худшем случае потребуется 1023 шага, а в среднем 512 шагов. А для бинарного поиска в худшем случае потребуется 10 шагов.
Трудоёмкость (сложность) алгоритма линейного поиска пропорциональна n, а сложность алгоритма бинарного поиска пропорциональна log2n.
Эффективность алгорима бинарного поиска
09.11.2021
Практически важный аспект анализа трудоёмкости связан с классификацией алгоритмов по типу
09.11.2021
Практически важный аспект анализа трудоёмкости связан с классификацией алгоритмов по типу
Существуют алгоритмы, в которых TA(d) растет линейно, квадратично, имеет кубическую зависимость и т.д. Такие алгоритмы принято называть полиномиальными или алгоритмами с полиномиальной сложность и говорить, что алгоритм относится к классу сложности P.
Существую алгоритмы, временная сложность которых растет быстрее полинома любой степени, как an c некоторым основанием a. Такие алгоритмы принято называть алгоритмами с экспоненциальной сложностью и говорить, что алгоритм относится к классу сложности EXP.
При неорганиченном увеличения длины входа n алгоритма, функцию его трудоёмкости принято называть сложностью алгоритма.
09.11.2021
09.11.2021
09.11.2021
В качестве образцов скорости роста функций трудоёмкостей обычно выбирают следующий набор
09.11.2021
В качестве образцов скорости роста функций трудоёмкостей обычно выбирают следующий набор
log a n, a>1
n
n log a n, a>1
nk, k≥1
an, a>1
n!
nn
09.11.2021
Алгоритм, использующий прямое вычисление p(x)=anxn+an-1xn-1+…+a1x1+a0.
Для вычисления anxn требуется n умножений.
Для
09.11.2021
Алгоритм, использующий прямое вычисление p(x)=anxn+an-1xn-1+…+a1x1+a0.
Для вычисления anxn требуется n умножений.
Для
Для вычисления окончательного значения еще n сложений.
Обще количество операции n(n+1)/2+n – имеет место квадратичная функция трудоёмкости.
Алгоритм, использующий схему Горнера, например, для полинома 4 степени:
p(x)=(((a4x+a3)x+a2)x+a1)+a0 требует 4 сложения и 4 умножения.
В общем случае по методу индукции получим n умножений и n сложений, или всего 2n операций.
Таким образом имеется линейная трудоёмкость алгоритма. Но класс сложности также полиномиальный.
Важно подчеркнуть, что для решения одной и той же задачи можно построить алгоритмы с разной трудоёмкостью.
Пример: трудоёмкость алгоритма вычисления значения полинома в точке.
09.11.2021
Кратные (вложенные) циклы
Структура алгоритма, в котором внутри цикла находится другой цикл,
09.11.2021
Кратные (вложенные) циклы
Структура алгоритма, в котором внутри цикла находится другой цикл,
Пример: задача сложения матриц.
Пусть имеются две матрицы An×m и Bn×m. Требуется найти их сумму.
Во-первых, из определения суммы матриц следует, что суммировать можно только матрицы одинаковой размерности, то есть матрицы, состоящие из одинакового количества строк n и столбцов m. Следовательно, исходными данными задачи являются n ─ общее для A и B количество строк, и m ─ общее количество столбцов. Элементы матриц A и B могут быть целого или вещественного типов. Для определенности будем считать, что эти элементы относятся к вещественному типу.
Во-вторых, из того же определения следует, что сумма матриц A и B есть матрица C той же самой размерности Cn×m, элементы которой cij определяются как сумма соответствующих элементов матриц слагаемых: aij и bij
09.11.2021
Можно рассуждать следующим образом. Чтобы получить все элементы матрицы C следует
09.11.2021
Можно рассуждать следующим образом. Чтобы получить все элементы матрицы C следует
i:=1;{перебор начнем с первой строки матриц}
while i ≤ n do {номер текущей строки меньше номера последней, то есть имеются еще не рассмотренные строки}
begin
{Действия с элементами текущей i строки}
end;
i:=i+1{переход к следующей строке]
09.11.2021
Теперь следует уточнить действия с каждой текущей строкой, то есть со
09.11.2021
Теперь следует уточнить действия с каждой текущей строкой, то есть со
Из определения следует, что нужно перебрать все её элементы и осуществить сложение соответствующих элементов матриц слагаемых.
Пусть j ─ номер текущего элемента i строки матрицы, то есть j ─ это номер столбца, в котором находится элемент cij.
Перебор столбцов можно осуществить стандартным образом: начать перебор с первого столбца (j:=1)и перебирать столбцы, пока номер текущего столбца не превосходит номер последнего столбца (j ≤ m). То есть перебирать следует пока имеются еще не рассмотренные элементы i -й строки матрицы.
Во время перебора следует получить каждый текущий элемент cij матрицы С как сумму соответствующих элементов матриц слагаемых aij и bij , а затем перейти к следующему столбцу:
09.11.2021
{Действия с элементами i строки}
j:=1;{перебор столбцов i-й строки, начиная с первого}
while
09.11.2021
{Действия с элементами i строки}
j:=1;{перебор столбцов i-й строки, начиная с первого}
while
begin
c[i,j]:=a[i,j]+b[i,j]; {получение текущего элемента матрицы C}
j:=j+1 {переход к следующему столбцу i-й строки}
end;
Осталось вставить уточняющий фрагмент в основной цикл.
09.11.2021
i:=1;{начнем с получения элементов первой строки матрицы C}
while i ≤ n
09.11.2021
i:=1;{начнем с получения элементов первой строки матрицы C}
while i ≤ n
begin
{Действия с элементами текущей i строки}
end;
i:=i+1{переход к следующей строке]
A,B,C: array of real; n, m, i, j : integer;
begin
read (n. m, A, B); {Ввод количество строк, столбцов и всех элементов матриц слагаемых}
end;
j:=1;{перебор столбцов i-й строки начиная с первого}
while j ≤ m do {есть еще не просмотренные столбцы}
begin
c[i,j]:=a[i,j]+b[i,j]; {получение текущего элемента матрицы C}
j:=j+1 {переход к следующему столбцу i-й строки}
write (C)
end.
09.11.2021
Оцените функцию трудоёмкости и объёма памяти для полученного алгоритма.
TA(d)=5mn+4n+1 ~ 5N2+4N+1,
09.11.2021
Оцените функцию трудоёмкости и объёма памяти для полученного алгоритма.
TA(d)=5mn+4n+1 ~ 5N2+4N+1,
VA(d)=12mn+4 ~12N2+16, где N=max(n,m)
09.11.2021
Задача сортировки элементов массива
Сортировкой в информатике называется переупорядочение рассматриваемых объектов по
09.11.2021
Задача сортировки элементов массива
Сортировкой в информатике называется переупорядочение рассматриваемых объектов по
Существует три базовых способа сортировки массивов: прямым выбором, прямыми вставками и обменная, а также больше количество их модификаций.
Рассмотрим способ сортировки массива прямым выбором. Идея алгоритма состоит в том, чтобы на каждом шаге переупорядочения выбирать наименьший элемент в массиве и помещать его в начальную позицию с тем, чтобы на следующем шаге его уже не рассматривать.
Более подробно. На первом шаге ищется минимальный элемент во всем рассматриваемом массиве.
x[1] x[2] x[3] x[4] x[5] x[6] x[7] x[8]
43
55
82
42
94
18
6
63
В данном случае это x[7]=6. Чтобы массив был упорядоченным этот элемент должен стоять на первом месте. Поэтому, совершим обмен значениями между найденным и начальным элементом массива.
6
43
09.11.2021
x[1] x[2] x[3] x[4] x[5] x[6] x[7] x[8]
43
55
82
42
94
18
6
63
6
43
Наименьший элемент
09.11.2021
x[1] x[2] x[3] x[4] x[5] x[6] x[7] x[8]
43
55
82
42
94
18
6
63
6
43
Наименьший элемент
Итак, на втором шаге ищется минимальный элемент в части массива, начинающейся со второго элемента. В данном примере это x[6]=18. И менять шестой элемент нужно с начальным элементом рассматриваемого участка массива, то есть со вторым элементом массива.
18
55
Теперь уже два элемента стоят на своих местах.
x[1] x[2] x[3] x[4] x[5] x[6] x[7] x[8]
43
55
82
42
94
18
6
63
6
43
18
55
09.11.2021
x[1] x[2] x[3] x[4] x[5] x[6] x[7] x[8]
43
55
82
42
94
18
6
63
6
43
18
55
Третий шаг.
09.11.2021
x[1] x[2] x[3] x[4] x[5] x[6] x[7] x[8]
43
55
82
42
94
18
6
63
6
43
18
55
Третий шаг.
42
82
x[1] x[2] x[3] x[4] x[5] x[6] x[7] x[8]
43
55
82
42
94
18
6
63
6
43
18
55
42
82
Четвертый шаг. Минимальный элемент x[7]=43
43
82
x[1] x[2] x[3] x[4] x[5] x[6] x[7] x[8]
43
55
82
42
94
18
6
63
6
43
18
55
42
82
43
82
09.11.2021
x[1] x[2] x[3] x[4] x[5] x[6] x[7] x[8]
43
55
82
42
94
18
6
63
6
43
18
55
42
82
43
82
Пятый шаг.
09.11.2021
x[1] x[2] x[3] x[4] x[5] x[6] x[7] x[8]
43
55
82
42
94
18
6
63
6
43
18
55
42
82
43
82
Пятый шаг.
55
94
x[1] x[2] x[3] x[4] x[5] x[6] x[7] x[8]
43
55
82
42
94
18
6
63
6
43
18
55
42
82
43
82
55
94
Шестой шаг. Минимальный элемент x[8]=63
63
94
x[1] x[2] x[3] x[4] x[5] x[6] x[7] x[8]
43
55
82
42
94
18
6
63
6
43
18
55
42
82
43
82
55
94
63
94
09.11.2021
x[1] x[2] x[3] x[4] x[5] x[6] x[7] x[8]
43
55
82
42
94
18
6
63
6
43
18
55
42
82
43
82
55
94
63
94
Седьмой шаг.
09.11.2021
x[1] x[2] x[3] x[4] x[5] x[6] x[7] x[8]
43
55
82
42
94
18
6
63
6
43
18
55
42
82
43
82
55
94
63
94
Седьмой шаг.
x[1] x[2] x[3] x[4] x[5] x[6] x[7] x[8]
43
55
82
42
94
18
6
63
6
43
18
55
42
82
43
82
55
94
63
94
Массив упорядочен.
09.11.2021
{вывод (использование) результатов}
Первый набросок алгоритма
Пусть массив содержит N элементов и i
09.11.2021
{вывод (использование) результатов}
Первый набросок алгоритма
Пусть массив содержит N элементов и i
begin
{ввод (формирование) исходных данных}
i:=1; {Начальный номер шага}
while i<=N-1 do {Не все шаги сделаны. Номер текущего шага не превосходит номер предпоследнего шага}
begin
{найти номер k наименьшего элемента на участке от i до N}
{выполнить обмен значениями между i и k элементами}
i:=i+1;
end;
end.
09.11.2021
end.
Уточнение алгоритма
begin
{ввод (формирование) исходных данных}
i:=1; {Начальный номер шага}
while i<=N-1 do {Не
09.11.2021
end.
Уточнение алгоритма
begin
{ввод (формирование) исходных данных}
i:=1; {Начальный номер шага}
while i<=N-1 do {Не
begin
{найти номер k наименьшего элемента на участке от i до N}
k:=i; {номер кандидата — первый элемент участка}
j:=i+1; {начинаем со следующего элемента участка}
while j<=N do {Есть непросмотренные элементы на участке}
begin if x[j]< x[k] then {замена кандидата} k:=j; j:=j+1 end;
{выполнение обмена значениями между i и k элементами}
a:=x[k]; x[k]:=x[i]; x[i]:=a
i:=i+1;
end;
{вывод (использование) результатов}
09.11.2021
Оценка функции трудоёмкости алгоритма сортировки прямым выбором
Подсчёт трудоёмкости удобнее начать с
09.11.2021
Оценка функции трудоёмкости алгоритма сортировки прямым выбором
Подсчёт трудоёмкости удобнее начать с
Теперь необходимо подсчитать количество итераций вложенного цикла. Его тело выполняется для каждого j от i+1 до n, где i ― номер шага. Это означает, что количество итераций внутренного цикла зависит от номера шага. А именно:
на первом шаге, когда i=1 параметр j пробегает все значения от 2 до n выполняется n-1 итерация:
на втором шаге i=2, поэтому параметр j пробегает все значения от 3 до n, следовательно, выполняется n-2 итерации;
вообще, на шаге с любым номером i выполняется n-i итерации;
на последнем шаге с номером n-1 выполняется только одна итерация
09.11.2021
Эта закономерность дает возможность подсчитать общее количество итераций вложенного цикла на
09.11.2021
Эта закономерность дает возможность подсчитать общее количество итераций вложенного цикла на
Легко увидеть, что это выражение представляет собой сумму членов арифметической прогрессии, у которой первый и последний члены равны соответственно a1 =1 и al =n-1, разность d равна 1 и количество членов равно n-1.
По известной формуле эта сумма в данном случае M=(1+(n-1))×(n-1)/2=n×(n-1)/2.
Таким образом, общее количество связанных с вложенным циклом действий равно M=5×n×(n-1)/2.
К этому результату необходимо добавить количество действий, связанных с внешним циклом. К ним относится два действия в условии повторения цикла
i<=n-1, три действия участка инициализации вложенного цикла k:=i; j:=i+1, три действия, связанные с обменом a:=x[i]; x[k]:=x[i]; x[i]:=a, и два действия оператора i:=i+1. Итого 10 действий, каждое из которых выполняется на каждом шаге, то есть n-1 раз.
09.11.2021
Кроме того имеется еще одно действие инициализации внешнего цикла i:=1, поэтому
09.11.2021
Кроме того имеется еще одно действие инициализации внешнего цикла i:=1, поэтому
Таким образом, трудоёмкость худшего случая сортировки массива прямым выбором описывается квадратичной функцией количества элементов в массиве.
Описания этого алгоритма дают нам линейую функцию объёма памяти: VA(n)=4n+20, что совершенно естественно, так как в алгоритме используется только один вектор — одномерный массив.
09.11.2021
Подпрограммы
Описанием подпрограммы называется поименованная часть алгоритма (программы), которая может быть использована
09.11.2021
Подпрограммы
Описанием подпрограммы называется поименованная часть алгоритма (программы), которая может быть использована
Описание подпрограммы может содержать список входных и выходных величин, который принято называть списком формальных параметров.
Пример
Предположим, что в рассматриваемом алгоритме в разных его местах приходится вычислять значение факториалов различных целых чисел.
{Нужно вычислить 8!}
P8:=1; i:=2: while i≤8 do begin P8:=P8*i;i:=i+1 end
…
…
{Нужно вычислить 6!}
P6:=1; i:=2: while i≤6 do begin P6:=P6*i;i:=i+1 end;
…
{Нужно вычислить 10!}
P10:=1; i:=2: while i≤10 do begin P10:=P10*i;i:=i+1 end
09.11.2021
Целесообразно задать ─ описать такую последовательности действий только один раз ─
09.11.2021
Целесообразно задать ─ описать такую последовательности действий только один раз ─
procedure Факториал (k, var P);{подпрограмма вычисления P=k!}
begin
P:=1; i:=2; while i ≤ k do begin P:=P*i;i:=i+1 end
end;
Описание подпрограммы
Название подпрограммы
Список формальных параметров
Параметры называются формальными потому, что в описании подпрограммы они никаких конкретных значений не имеют. Они служат для того, чтобы задать, записать последовательность действий. Конкретные имена параметров не имеют никакого значения.
Тело
подпрограммы
Заголовок подпрограммы:
procedure Факториал (k, var P);{подпрограмма вычисления P=k!}
Входной параметр
Выходной параметр (запоминание результата)
09.11.2021
{Нужно вычислить 8! и приписать значение переменной P8}
Факториал(8,P8);
…
Факториал(6,P6);
…
Факториал(10,P10);
Теперь, используя обращение к
09.11.2021
{Нужно вычислить 8! и приписать значение переменной P8}
Факториал(8,P8);
…
Факториал(6,P6);
…
Факториал(10,P10);
Теперь, используя обращение к
Название подпрограммы
Список фактических параметров
Факториал(10,P10);
Вызов подпрограммы (обращение к подпрограмме):
begin
P:=1; i:=2; while i ≤ k do begin P:=P*i;i:=i+1 end
end;
Факториал(10,P10);
procedure Факториал (k, var P);
{Нужно вычислить 6! и приписать значение переменной P6}
{Нужно вычислить 10! и приписать значение переменной P10}
09.11.2021
Итерация и рекурсия
В математике для решения подавляющего большинства задач используются методы,
09.11.2021
Итерация и рекурсия
В математике для решения подавляющего большинства задач используются методы,
Итерация означает неоднократное повторение одних и тех же действий, которое после некоторого количества шагов приводит к желаемому результату. Характерным примером итерационного способа решения задачи являются методы последовательных приближений решения нелинейных уравнений, в том числе метод касательных, метод хорд и т.д.
С точки зрения структуры алгоритма итерация представляет собой циклический алгоритм
Рекурсия представляет собой ссылку при описании объекта, действия на описываемый объект, действие. Рекурсия означает решение задачи с помощью сведения решения к самому себе. Полностью аналогичные механизмы используются в базовой теории рекурсивных функций, в методе математической индукции, а также в рекуррентных последовательностях.
09.11.2021
begin
P:=1; i:=2; while i ≤ k do begin P:=P*i;i:=i+1 end
end;
procedure Факториал
09.11.2021
begin
P:=1; i:=2; while i ≤ k do begin P:=P*i;i:=i+1 end
end;
procedure Факториал
Выше рассматривался итерационный способ вычисления факториала, основанный на многократном домножении величины, в которой накапливается результат, на очередной сомножитель: Pi := Pi-1 × i, i=2,3,…,k.
Эту задачу можно решить и с помощью рекурсии, базируясь на следующих соображениях:
Следовательно, P(k)=k! можно определить таким образом:
procedure Факториал1 (k, var P);{рекурсивная подпрограмма вычисления P=k!}
begin
if k=1 then P:=1 else begin Факториал1(k-1,P1); P:=P1*k end
end.
09.11.2021
Основные структуры данных
В информатике используется большое количество различных структур данных, которые
09.11.2021
Основные структуры данных
В информатике используется большое количество различных структур данных, которые
Если структура данного по ходу выполнения алгоритма не изменяется, то такая структура считается статической, в противном случае структуру относят к динамическим. Статические структуры данных существуют в неизменном виде в течение всего времени выполнения алгоритма. Динамические структуры создаются, изменяются и уничтожаются по мере необходимости в любой момент исполнения алгоритма.
К данным со статической структурой относятся:
скалярные типы:
целый;
вещественный;
логический (булевский);
символьный;
структурированные типы:
массив;
запись;
файл (последовательность);
множество;
всевозможные комбинации скалярных и структурированных типов.
09.11.2021
Значение скалярного типа представлено ровно одним компонентом (время, температура). Значение структурированного
09.11.2021
Значение скалярного типа представлено ровно одним компонентом (время, температура). Значение структурированного
Структурированные типы характеризуются: количеством и возможным типом компонентов значения, а также способом доступа к отдельному компоненту значения.
Структуры аналогичные векторам и матрицам в информатике принято называть массивами. Все элементы массива должны быть одного и того же типа. Для доступа (обращения) к отдельному элементу массива используется индекс или несколько индексов (w[5]; w[i+2]; A[1,2]). Индексы могут быть выражениями, значения которых могут произвольным образом изменяться в заранее заданных границах. Поэтому говорят, что к элементам массивов имеется прямой доступ.
Массив
w[1] w[2] w[3] w[4] w[5] w[6] w[7] w[8] w[9]
6
18
42
43
82
55
63
94
42
09.11.2021
Структуры, аналогичные строкам таблицы, называют записями. Компоненты записей принято называть полями.
09.11.2021
Структуры, аналогичные строкам таблицы, называют записями. Компоненты записей принято называть полями.
Запись
День Победы:
Файл (последовательность)
Основной структурой данных, которая используется для хранения информации на внешних устройствах (магнитных дисках, лентах и т.д.) являются файлы или последовательности. Считается, что файл всегда находится на внешнем устройстве. При этом количество компонентов файла неизвестно, все компоненты должны быть одного и того же типа. Доступ к компонентам ─ последовательный.
Полёт Гагарина:
09.11.2021
Множество
Во многих математических и информационных задачах возникает необходимость в прямом или
09.11.2021
Множество
Во многих математических и информационных задачах возникает необходимость в прямом или
X1 X5 X4
X17
X2
X3
?
X17
?
X3
X
09.11.2021
Динамические структуры данных
У данных с динамической структурой с течением времени
09.11.2021
Динамические структуры данных
У данных с динамической структурой с течением времени
линейный список;
дерево;
граф.
У линейного списка каждый элемент связан с предшествующим ему. У линейного списка известно, какой элемент находится в начале списка, какой в конце, а также, какой элемент стоит перед текущим. В линейном списке переходить от текущего элемента к следующему можно только с помощью указанных связей между соседними элементами.
Линейный список
В целом получается цепочка элементов, в которой можно осуществлять поиск, куда можно вставлять элементы или откуда исключать их.
09.11.2021
На базе линейного списка организуются много других типов динамических структур. Это
09.11.2021
На базе линейного списка организуются много других типов динамических структур. Это
Структура кольца
Отличие кольца от линейного списка в том, что у кольца имеется связь между последним элементов списка и его первым элементом.
У линейного списка и у кольца возможен доступ к любому элементу структуры. Для этого нужно последовательно перемещаться от одного элемента к другому. Во многих реальных ситуациях такой доступ отсутствует. Можно взаимодействовать только с первым и последним элементами или же только с одним из них. Для моделирования таких объектов используются очереди, деки и стеки.
09.11.2021
Структура очереди
У очереди доступен для включения конец, а для исключения (выборки)
09.11.2021
Структура очереди
У очереди доступен для включения конец, а для исключения (выборки)
Структура дека
У дека оба конца доступны, как для включения, так и для выборки. Таким образом, можно сказать, что дек ─ это двусторонняя очередь.
09.11.2021
Структура стека
У стека для взаимодействия доступна только один конец структуры ─
09.11.2021
Структура стека
У стека для взаимодействия доступна только один конец структуры ─
Деревом называется структура данных, элементы которой связаны отношениями подчиненности, когда одному элементу может быть подчинено несколько, но при этом он может сам быть подчинен только одному. В структуре имеется только один элемент, не подчиняющийся никаким другим. Это элемент называется корнем дерева.
Структура дерева
09.11.2021
Корнем дерева является элемент a, он находится на самом высоком уровне.
09.11.2021
Корнем дерева является элемент a, он находится на самом высоком уровне.
Структура графа
Структурой данных наиболее общего вида является граф. Любые элементы графа могут быть связаны с любыми другими элементами.
09.11.2021
Модели и моделирование
В любой научной дисциплине часто приходится использовать важнейшие общенаучные
09.11.2021
Модели и моделирование
В любой научной дисциплине часто приходится использовать важнейшие общенаучные
большая часть детских игрушек — машинки, куклы, кубики, всевозможные конструкторы и т.д. являются моделями реальных объектов;
разнообразные тренажеры для водителей автомобилей, летчиков и космонавтов также представляют собой модели реальных автомобилей, самолётов и космических аппаратов;
к моделям относятся и манекены в магазинах, и макеты зданий и географические карты, и самые разные чертежи;
картины художников, скульптуры, памятники также можно считать моделями природных пейзажей, животных, людей, а литературные произведения — моделями различных жизненных ситуации;
многие простые понятия, которыми оперируют люди, такие как, например, точка, прямая, окружность, куб и т.д. являются идеализацией реальных объектов, их моделями;
моделями являются представления человека о строении атома, о происхождении различных видов растений и животных, да и самой жизни на Земле;
исторические представления — это модели событий прошлого.
09.11.2021
различные системы заполняют наш дом: электрическая, отопительная, водопроводная, газоснабжения;
кровеносная,
09.11.2021
различные системы заполняют наш дом: электрическая, отопительная, водопроводная, газоснабжения;
кровеносная,
общегосударственные системы, такие как образовательная, здравоохранения, оборонительная, продовольственного снабжения и т.д. обеспечивают существование всего общества в целом;
файловая и операционная системы, базы данных, интернет – примеры программных и аппаратных систем.
Различные системы используются в быту, в общественном устройстве, в науке и технике. Например:
09.11.2021
Важнейшая роль понятия «модель» является, по-видимому, следствием самого способа мышления человека.
09.11.2021
Важнейшая роль понятия «модель» является, по-видимому, следствием самого способа мышления человека.
Следовательно, на понятии «модель» базируется по существу любой теоретический или экспериментальный метод научного и технического исследования, в котором вместо реальных объектов используются их идеальные или материальные образы.
Важнейшая роль понятия «система» вытекает из того, что реальные объекты, явления и процессы всегда существуют как совокупности взаимосвязанных, взаимодействующих между собой элементов. В результате взаимодействия у этой совокупности появляются некоторые новые качества, она начинает вести себя как целое, а не как совокупность разрозненных элементов, что и обозначают термином «система».
09.11.2021
Объект (от лат. objectum — предмет) — существующий в реальной действительности
09.11.2021
Объект (от лат. objectum — предмет) — существующий в реальной действительности
Часть реального мира, рассматриваемая, изучаемая в рамках какой-либо деятельности или решаемой задачи, совокупность объектов, явлений свойства которых и отношения между которыми рассматриваются в рамках некоторой задачи, называется предметной областью.
Любое изучение или использование предметной области, так или иначе, связано с формированием её упрощенного образа в сознании человека, то есть её модели.
Модель — это некоторый заместитель оригинала, с помощью которого осуществляется изучение важных для решаемой задачи свойств оригинала. При этом термин «модель» используется для обозначения устройства-аналога, каким-либо образом воспроизводящего реальный объект, или же его чертежа, схемы, макета, словесного или математического описания реального объекта
Характерные, неотъемлемые черты, свойства, качества принято называть атрибутами объектов, явлений, предметной области.
09.11.2021
Модель считается адекватной, если она верно отображает важнейшие с точки зрения
09.11.2021
Модель считается адекватной, если она верно отображает важнейшие с точки зрения
Отвлечение от несущественных деталей принято называть абстрагированием. При абстрагировании осуществляется определенное огрубление реальной действительности. Абстрагирование является одним из важнейших инструментов при построении модели какой-либо предметной области.
Моделью (от лат. modulus — образец) называется материальный или идеальный образ реального объекта или некоторой совокупности объектов, который при определенных обстоятельствах используется в качестве заменителя или представителя исходных объектов. Это образ, полученный с помощью концентрации внимания только на некоторых важнейших с точки зрения решаемой задачи свойствах рассматриваемых объектов и отбрасыванием всех их несущественных свойств. Реальный объект, для которого построена модель, называется оригиналом или прототипом модели. Моделированием называется процесс построения и использования модели.
09.11.2021
Наличие адекватной модели позволяет спрогнозировать свойства и поведение реального объекта в
09.11.2021
Наличие адекватной модели позволяет спрогнозировать свойства и поведение реального объекта в
Заметим, что построение абсолютно адекватной модели принципиально невозможно, поскольку в этом случае модель просто окажется тождественной реальному объекту, полностью совпадёт с ним. Поэтому речь может идти только о большей или меньшей адекватности модели. Ясно, что для обеспечения большей адекватности необходимо учитывать как можно больше факторов, свойств реального объекта.
С другой стороны желательно, чтобы построенная модель была проста в использовании и изучении, чтобы полученную на её основе задачу можно было решить существующими способами. Но практика показывает, что большинство задач, которые в полном объеме учитывают основные влияющие факторы, точно решить невозможно.
Но практика показывает, что большинство задач, которые в полном объеме учитывают основные влияющие факторы, точно решить невозможно. Кроме того, некоторые факторы могут быть либо вообще неизвестны, либо невозможно получить их значения.
09.11.2021
В таких случаях формируется более простая модель, постановка задачи упрощается и
09.11.2021
В таких случаях формируется более простая модель, постановка задачи упрощается и
Очевидным образом наблюдаем противоречие между требованиями адекватности и простоты: чем адекватнее модель, тем она сложнее, чем проще модель, тем она менее адекватна. Ясно, что между этими свойствами модели приходится искать компромисс.
Основой для такого компромисса может служить точность модели, которую можно характеризовать степенью совпадения полученных в процессе моделирования результатов с наблюдаемыми свойствами реальных объектов. При этом необходимая степень совпадения определяется решаемой задачей.
Обсуждая точность модели и моделирования важно помнить о том, что точность результатов расчетов не может превысить точность исходных данных, приборов, измерительных инструментов, используемых для наблюдения за реальными объектами.
Кроме того, точность модели должна быть согласована с желательной точностью результатов, которые должны соответствовать реальным потребностям практики. Скажем, бессмысленно стремиться составлять прогноз температуры воздуха на следующий день с точностью 0,1 градуса, достаточно указать прогнозное значение с разбросом в 2–3 градуса.
09.11.2021
Одним из самых важных свойств модели является её потенциальность (от лат.
09.11.2021
Одним из самых важных свойств модели является её потенциальность (от лат.
Ярким примером предсказательной мощи моделей является периодический закон, на основании которого Д.И. Менделеев предсказал существование элементов экаалюминия, экабора и экасицилия. Спустя несколько лет были найдены элементы галлий, скандий и германий, физические и химические свойства которых с удивительной точностью соответствовали предсказаниям Д.И. Менделеева.
Французский учёный У. Леверье на основании математических расчётов, выполненных с использованием закона всемирного тяготения и экспериментально полученных данных о движении уже известной планеты Уран, предсказал положение ещё неизвестной планеты Солнечной системы Нептун.
Применяя для решения той или иной задачи некоторую модель необходимо всегда оценивать правомерность её использовании. Эта оценка всегда производится на основании анализа области применимости модели и существующих ограничений на её применение, так или иначе вытекающих из принятых при её построении упрощений и предположений. Необоснованное применение модели, пренебрежение ограничениями на её применение является очень распространённой ошибкой, которая может привести к очень неприятным последствиям.
09.11.2021
Моделирование это всегда упрощение. Это замена сложного более простым. Получается решение
09.11.2021
Моделирование это всегда упрощение. Это замена сложного более простым. Получается решение
Модель есть упрощение некоторого оригинала и без оригинала не может быть построена.
Моделирование является единственным способом описания и изучения реального мира.
Моделирование это обязательный, необходимый этап решения любой задачи.
Одна и та же проблемная область может иметь несколько различных моделей, описывающих ее с различных точек зрения. Разные задачи изучающие одну и ту же проблемную область могут потребовать построения различных моделей.
При наличии нескольких моделей и возможности сопоставления их с оригиналом обычно считается, что та модель лучше, которая более точно соответствует оригиналу, более адекватна реальности.
09.11.2021
Классификация моделей
Классификацией называется распределение рассматриваемых объектов по группам в соответствии с
09.11.2021
Классификация моделей
Классификацией называется распределение рассматриваемых объектов по группам в соответствии с
Любая классификация включает выделение общих свойств, признаков у рассматриваемых объектов и, при необходимости, определение значений классификационных признаков, по которым объекты будут распределяться в различные группы, классы, категории
Классификация может быть представлена в виде графа (чертежа), в виде таблицы, списка или группы списков.
Натурные модели
Натурные модели представляют собой материальные объекты, которые адекватно отображают выбранные свойства объекта, предметной области.
Примеры натурных моделей: игрушечные или действующие модели автомобиля, самолета и т.д., манекены, фотографии, макеты зданий, тренажеры, протезы, заменяющие и частично выполняющие функции настоящих органов.
09.11.2021
Информационные модели
Информационная модель представляет собой нематериальный, воображаемый образ объекта, явления, предметной
09.11.2021
Информационные модели
Информационная модель представляет собой нематериальный, воображаемый образ объекта, явления, предметной
Математическая модель это разновидность информационной модели, в которой для описания предметной области используется математический формализм ─ математические соотношения, уравнения, зависимости. Формальным или формализованным называется представление подчиняющееся фиксированной систем правил. Пример: математическое описание движения спутника Земли.
Математические модели
Математическая модель (в узком смысле, с точки зрения математики) ─ это одно или несколько множеств элементов произвольной природы, на которых определено конечное множество отношений.
Структурные модели
Модели, в которых отображается структура и состояние предметной области, называются структурными. Пример: чертеж, макет.
09.11.2021
Имитационные модели
Функциональные модели
Модели, в которых отображается изменение состояния изучаемых объектов, явлений,
09.11.2021
Имитационные модели
Функциональные модели
Модели, в которых отображается изменение состояния изучаемых объектов, явлений,
Имитационными моделями считаются натурные или информационные модели, которыми заменяются реальные изучаемые объекты или явления в ходе проведения натурных или вычислительных экспериментов с целью получения информации об структуре и поведении изучаемых объектов, явлений. Примеры: натурная модель самолета в аэродинамической трубе, математическая модель атмосферы в задачах метеопрогноза.
09.11.2021
Системы
Системой называется сложная структура, состоящая из взаимодействующих компонентов, каждый из которых
09.11.2021
Системы
Системой называется сложная структура, состоящая из взаимодействующих компонентов, каждый из которых
Целостность системы означает, что удаление из нее какого-либо компонента приводит к тому, что система теряет определенное системное свойство, т.е. фактически приводит к исчезновению системы.
В общем случае системы строятся из простых объектов, которые не имеют внутренней структуры, и из сложных, которые в свою очередь состоят из взаимодействующих простых, и, следовательно, являются системами. Системы, являющиеся компонентами других систем, принято называть подсистемами. .
Изучение системы осуществляется с помощью построения ее модели. Модель сложного объекта также будет сложной структурой, это значит, что сама модель может быть системой.
09.11.2021
Выделение систем связано с постановкой и решением следующих задач:
Изучение предметной области,
09.11.2021
Выделение систем связано с постановкой и решением следующих задач:
Изучение предметной области,
Описание системы языковыми или графическими средствами.
Построение новой системы.
Использование существующей системы в практических целях.
Для решения задач, связанных с системами, используются методы анализа и синтеза систем.
Анализ представляет собой метод исследования, основанный на выделении отдельных компонентов системы, изучении их свойств и взаимосвязей.
Синтез представляет собой метод исследования системы в целом, то есть всех ее компонентов во всех их взаимосвязях. Синтезом также считается создание системы путем соединения всех ее компонентов на основании законов, задающих их взаимосвязь.
09.11.2021
Статические и динамические системы
Система называется статической если множество компонентов, из которых
09.11.2021
Статические и динамические системы
Система называется статической если множество компонентов, из которых
Любое изменение указанных множеств считается процессом, происходящим в системе, а сама система становится динамической.
Статическую систему можно рассматривать как мгновенное состояние динамической системы.
Частным случаем динамической системы является равновесная система, в которой одновременно происходит несколько уравновешивающих друг друга процессов. Равновесная система может также считаться частным случаем статической системы, если рассматривать неизменность ее состояния в течение длительного отрезка времени.
Замкнутые и незамкнутые системы
Система считается замкнутой, если ее компоненты не взаимодействуют с внешним миром, с объектами, не принадлежащими системе. Это значит, что отсутствуют потоки вещества, энергии и информации из системы или в систему. В противном случае система считается незамкнутой.
09.11.2021
Различают естественные, искусственные и информационные системы. Естественные и искусственные системы материальны,
09.11.2021
Различают естественные, искусственные и информационные системы. Естественные и искусственные системы материальны,
Частным случаем информационных систем являются формальные системы. Точнее, формальная система является разновидностью математической модели. В формальной системе фиксируется исходное множество компонентов и связей (отношений) между ними, а также множество правил порождения новых объектов. Формальные системы служат для создания различных математических дисциплин (математическая логика, теория множеств), а также являются важным инструментом информатики, служащим для создания языков программирования и трансляторов.
09.11.2021
Одно и то же дискретное сообщение можно представить в различных алфавитах,
09.11.2021
Одно и то же дискретное сообщение можно представить в различных алфавитах,
Для естественных языков это преобразование представляет собой перевод с одного языка на другой. Для алфавитов, используемых в технических устройствах и в компьютерах, такое преобразование называется кодированием сообщений.
Вопросы, связанные с кодированием сообщений, рассматриваются в теории информации и теории кодирования — двух важных составных частях теоретической информатики
Теория кодирования предлагает конкретные, готовые варианты построения кодов и определяет условия их применимости.
Тема 4. Введение в теорию информации и теорию кодирования
Теория информации определяет предельные возможности эффективности кодирования. Она определяет границы возможного, но не дает никаких практических рецептов, как достичь желаемого результата.
09.11.2021
Для решения многих практических задач информатики, например, для определения места на
09.11.2021
Для решения многих практических задач информатики, например, для определения места на
Количество информации
Следовательно, необходимо иметь некоторую количественную характеристику сообщений и располагать способом её определения или измерения. Такой характеристикой сообщений является количество информации.
Количество информации представляет собой количественную характеристику сообщений, численную меру, связанную с объёмом носителя (жёсткого или оптического диска, «флешки» и т.д.), необходимого для хранения сообщения, требуемым временем передачи сообщения между источником и приёмником и другими параметрами хранения, передачи и обработки сообщений.
09.11.2021
Эта характеристика не имеет ничего общего с измерением информации, понимаемой как
09.11.2021
Эта характеристика не имеет ничего общего с измерением информации, понимаемой как
Существует два основных способа определения количества информации, один из которых называется объемным, а другой, рассматриваемый в этом и последующих разделах, называется вероятностным. Более простой объёмный подход чаще всего применяется в практических приложениях информатики, а вероятностный — в теоретических её разделах.
Вероятностный подход, предложенный К. Шенноном в 1948 году, базируется на следующих исходных представлениях.
При выяснении свойства полноты информации, было отмечено, что если принятое сообщение содержит неполную информацию, то остается некоторая неопределённость, которая в свою очередь приводит к необходимости выбирать действие из некоторого набора вариантов.
Если в сообщении о встрече приезжающего указана только дата встречи, то можно выбрать наугад один из приходящих в указанный день поездов и, кроме того, какой-либо вагон этого поезда. Ясно, что такой произвольный выбор, скорее всего, окажется неудачным. Поэтому для получения гарантированного результата необходимо организовать полный перебор всех приходящих поездов и всех вагонов в каждом из них, что потребует значительных ресурсов.
09.11.2021
Теперь представим, что получено сообщение, содержащее более полную информацию — указаны
09.11.2021
Теперь представим, что получено сообщение, содержащее более полную информацию — указаны
И, наконец, при получении сообщения, содержащего всю необходимую информацию (день, номер поезда, время прибытия, номер вагона), неопределённость ситуации полностью исключена, выбор варианта действий отсутствует.
Имеющуюся в сообщении неопределённость, недостающую информацию принято называть информационной энтропией или просто энтропией.
Итак, между понятиями информация, энтропия (неопределенность) и возможность выбора существует тесная связь. Наличие любой неопределённости, то есть ненулевая энтропия, предопределяет необходимость и возможность выбора, а отсутствие неопределённости, то есть нулевая энтропия — исключает возможность выбора.
Получение в сообщении некоторой дополнительной информации приводит к соответственному уменьшению имеющейся энтропии, а получение полной информации сводит энтропию к нулю.
09.11.2021
Проведённые выше качественные рассуждения представляют собой близкую к существу дела, но
09.11.2021
Проведённые выше качественные рассуждения представляют собой близкую к существу дела, но
Мы установили, что любые дискретные сообщения могут быть представлены в виде конечной последовательности знаков, принадлежащих некоторому конечному алфавиту.
Перед приёмом сообщения естественно считать, что существует полная неопределенность в том какие знаки и в каком порядке поступят. Это означает, что энтропия сообщения равна некоторому исходному значению.
После получения первого знака неопределенность уменьшается, то есть исходная энтропия убывает на какую-то величину.
Но ещё останется неопределенность с получением второго и всех последующих знаков. Получение второго, третьего и каждого из последующих знаков также приведёт к соответствующим уменьшениям энтропии. После получения последнего знака энтропия окажется равной нулю.
Итак, с появлением каждого очередного знака сообщения связано некоторое количество полученной информации, приводящей к соответствующему уменьшению исходной энтропии.
09.11.2021
Всё количество полученной информации оказывается равным исходному значению энтропии только после
09.11.2021
Всё количество полученной информации оказывается равным исходному значению энтропии только после
Вместо измерения количества информации можно измерять энтропию, считая, что количество полученной информации численно равно исходной энтропии сообщения.
Целесообразность измерять количество информации с помощью энтропии основано на том, что определение энтропии относится к задачам, способы решения которых хорошо известны.
Энтропия является числовой характеристикой так называемых случайных событий, которые отличаются принципиальной неопределенностью в их появлении.
Измерить каким бы то ни было способом информацию в её смысловом аспекте, измерить нематериальное понимание человеком содержания принятого сообщения в принципе невозможно. Как-то измерить можно только материальное её представление — сообщение.
09.11.2021
Изучение присущих природе закономерностей, выявление существующих взаимосвязей, взаимозависимостей в тех или
09.11.2021
Изучение присущих природе закономерностей, выявление существующих взаимосвязей, взаимозависимостей в тех или
Вероятность
Результаты таких наблюдений, испытаний или опытов принято называть событиями (или исходами) и обозначать большими латинскими буквами A, B, C и т.д.
Детерминированными называются события, которые определяется однозначными причинно-следственными связями и всегда воспроизводятся в неизменном виде. То есть исходы всех опытов оказываются одинаковыми при любом количестве их наблюдений или повторений.
Все события можно разделить на две группы — детерминированные и случайные.
В качестве примера детерминированных событий можно рассмотреть результаты бросаний металлической монеты в воду. Сколько бы наблюдений над такими бросаниями не производилось, исход будет один и тот же — монета тонет в воде.
09.11.2021
События, исход которых существенно зависит от множества неизвестных или трудно учитываемых
09.11.2021
События, исход которых существенно зависит от множества неизвестных или трудно учитываемых
Случайным событием называется опыт, который можно повторять любое количество раз, и каждый раз исход опыта может отличаться от предыдущего ⎯ имеется неопределенность в исходе единичного опыта, при возрастании количества опытов наблюдается стабилизация их результатов
Множество всех возможных исходов опыта называется пространством элементарных исходов.
Элементарные исходы, во-первых, должны быть неразложимы на более простые, во-вторых, должны взаимно исключать друг друга и, в-третьих, в любой опыт обязательно должен заканчиваться одним из элементарных исходов.
09.11.2021
Подбрасывая монету, несложно убедиться в том, что результатом может быть выпадение
09.11.2021
Подбрасывая монету, несложно убедиться в том, что результатом может быть выпадение
Каждый такой результат и есть элементарный исход. Видно, что любой из исходов исключает другой, и оба они не сводятся к более простым. Пространством элементарных исходов этого опыта является множество {«выпал герб», «выпала решка»}, а общее количество исходов равно двум.
Попутно заметим, что два — это минимально необходимое количество возможных исходов для существования случайного события.
Если пространство элементарных исходов состоит только из одного элемента, то это детерминированное событие.
Пусть опыт заключается в бросании игрального кубика, тогда выпадение одного очка, двух очков, трёх очков и т.д. — это элементарные исходы, а множество {1, 2, 3, 4, 5, 6} — представляет собой пространство элементарных исходов опыта с количеством элементов равным шести.
Вытаскивание наугад игральной карты из колоды в 36 карт имеет пространство из 36 элементарных исходов вида {6♠, 7♠, …,T♠, 6♣, 7♣, …,T♣, 6♦, 7♦, …,T♦, 6♥, 7♥, …,T♥}.
Пусть в ящике находятся десять шаров из них два белых, три зелёных и пять красных. Пространством элементарных исходов для опыта, состоящего в вытаскивании наугад одного шара, является множество с десятью исходами.
09.11.2021
Дело в том, что, например, исход «вынут белый шар» не является
09.11.2021
Дело в том, что, например, исход «вынут белый шар» не является
В общем случае наступление изучаемого события может быть связано как с одним, так и с несколькими элементарными исходами, так что появление любого из них приводит к наступлению события.
Например: событие «выпадение чётного количества очков» при бросании игрального кубика происходит при наступлении любого из трёх элементарных исходов: выпадение двух, четырёх или шести очков.
Событие «выбор карты красной масти» происходит в результате наступления любого из 18 элементарных исходов: {6♦, 7♦, …,T♦, 6♥, 7♥, …,T♥}, а «выбор чёрной восьмерки» — только в результате двух исходов {8♠, 8♣}.
Событие «вынут белый шар» происходит при выборе любого из двух, имеющихся в ящике белых шаров.
Элементарные исходы, при осуществлении которых происходит событие называются благоприятствующими этому событию. Элементарные исходы, при осуществлении которых событие не происходит называются неблагоприятствующими.
09.11.2021
Событие Z считается невероятным (невозможным), если его наступление не происходит ни
09.11.2021
Событие Z считается невероятным (невозможным), если его наступление не происходит ни
Два события считаются совместными, если они могут произойти одновременно. Два события называются несовместными, если они не могут произойти одновременно ни при каких обстоятельствах.
Два события считаются зависимыми, если появление одного из них влияет на появление другого. Два события называются независимыми, если между ними отсутствует причинно-следственная связь и появление одного из них не влияет на появление другого.
Суммой двух событий A и В считается событие C=A ∨ B, состоящее в том, что произошло либо событие A, либо событие B, либо и то и другое. Произведением двух событий A и B считается событие C=A ∧ B, состоящее в том, что произошли оба события.
Часто приходится рассматривать два или более случайных события, которые происходят одновременно или последовательно друг за другом. Например, можно бросать два кубика одновременно или рассматривать два последовательных бросания одного. Можно изучать последовательные вытаскивания карт из колоды, цветных шаров из ящика, выстрелы орудия, приём последовательных знаков дискретного сообщения и т.д.
09.11.2021
Измерение вероятностей
Вероятность p(A) случайного события A является численной мерой возможности осуществления
09.11.2021
Измерение вероятностей
Вероятность p(A) случайного события A является численной мерой возможности осуществления
Пусть пространство элементарных исходов содержит N исходов, а событию A благоприятствуют NA исходов, тогда:
Пусть в K опытах событие A произошло KA раз. Отношение KA/K называется частотой события, при этом:
09.11.2021
Вероятность суммы двух несовместных событий A и B равна:
Вероятность произведения двух
09.11.2021
Вероятность суммы двух несовместных событий A и B равна:
Вероятность произведения двух
Если все элементарные исходы, опыта обладают равными возможностями для осуществления, то они называются равновероятными.
Если разные элементарные исходы опыта имеют различные вероятности, то их называют неравновероятными.
Сумма вероятностей всех элементарных исходов любого опыта всегда равна единице
09.11.2021
Анализируя и сравнивая между собой различные опыты, можно заметить, что опыты
09.11.2021
Анализируя и сравнивая между собой различные опыты, можно заметить, что опыты
Энтропия
Численная мера этой неопределённости, характеризирующая опыт в целом со всеми его исходами, представляет собой величину, которую называют энтропией.
Вероятность характеризует отдельный исход опыта, или некоторое событие, связанное с несколькими исходами, в то время как энтропия характеризует весь опыт в целом, а не отдельные его исходы
Наблюдение о неопределенностях при бросаниях кубика и монеты даёт основание предположить, что чем больше количество исходов, тем больше энтропия, то есть неопределённость в результате опыта.
Неопределённость в исходе опыта зависит ещё и от вероятностей его элементарных исходов — неопределённость опытов с равновероятными исходами выше неопределённости опытов с неравновероятными исходами
09.11.2021
Свойства, которыми должна обладать функция определяющая энтропию:
Единица измерения энтропии называется бит
Если
09.11.2021
Свойства, которыми должна обладать функция определяющая энтропию:
Единица измерения энтропии называется бит
Если
В информатике энтропию принято обозначать буквой H.
По определению энтропия любого опыта с n равновероятными исходами равна:
Единственной функцией, которая обладает всеми перечисленными свойствами является функция
Один бит равен энтропии любого опыта с двумя равновероятными исходами.
Эта формула называется формулой Хартли.
09.11.2021
Если исходы равновероятны, то их энтропии одинаковы, поэтому энтропии h, вносимые
09.11.2021
Если исходы равновероятны, то их энтропии одинаковы, поэтому энтропии h, вносимые
Пусть некоторый опыт имеет n элементарных исходов {A1, A2, … , An }. Тогда по определению энтропия всего опыта равна сумме энтропий каждого из его n его исходов: H=h(A1)+h(A2)+…+h(An).
Так как вероятность p каждого из исходов в этом случае р=1/n, можно записать:
09.11.2021
Тогда полная энтропия опыта с n неравновероятными исходами {A1, A2, …,
09.11.2021
Тогда полная энтропия опыта с n неравновероятными исходами {A1, A2, …,
Для опытов с неравновероятными исходами энтропию отдельного исхода с учетом того, что вероятности p(Ai) различных исходов Ai различны, также можно записать в виде
Эта формула называется формулой Шеннона.
Энтропия является мерой неопределенности опыта, в котором проявляется случайные события. Энтропия равна средней неопределенности всех возможных его исходов.
По определению энтропия произведения независимых опытов равна сумме энтропий отдельных опытов.
09.11.2021
Количество информации это числовая характеристика, отображающая ту меру неопределенности опыта, которая
09.11.2021
Количество информации это числовая характеристика, отображающая ту меру неопределенности опыта, которая
Следовательно, количество информации I, которое оказывается полученным в результате осуществления опыта, численно равно его исходной энтропии H.
Отсюда следует, что количество информации, как и энтропия измеряется в битах.
Энтропия и количество информации
Количество информации, которое получено в результате осуществления опыта численно равно его исходной энтропии.
формуле Хартли:
формуле Шеннона:
Для опытов с n равновероятными исходами количество информации подсчитывается по
Для опытов с n неравновероятными исходами и вероятностями исходов p(A1), p(A2), ,…, p(An) количество информации подсчитывается по
09.11.2021
Значение входящего в каждое слагаемое выражения –log2p(Ai) можно рассматривать, как частную
09.11.2021
Значение входящего в каждое слагаемое выражения –log2p(Ai) можно рассматривать, как частную
А общее количество информации как среднее этих частных информаций по всем возможным исходам опыта.
В качестве примера, определим количество информации, полученное в результате опытов с монетой и с вытаскиванием карты из колоды в 32 карты.
В каждом из этих случаев элементарные исходы равновероятны, поэтому применяя формулу Хартли для опыта с монетой, получим 1 бит, а для опыта с вытаскиванием карты 5 бит.
09.11.2021
Пусть вероятность перегорания лампочки при её включении равна p=1/1000, то есть
09.11.2021
Пусть вероятность перегорания лампочки при её включении равна p=1/1000, то есть
Так как исходы неравновероятны, то расчёт информации следует проводить по формуле Шеннона. Её применение дает 1/1000log2(1/1000)-999/1000log2(999/1000) ≈0,0014 бита.
Обратите также внимание на частную информацию исхода, приводящего к перегоранию Ip= log2(1/1000) ≈9,96 бита, и на частную информацию исхода, не приводящего к перегоранию: Iq= log2(999/1000) ≈0,001 бита
Появление редко встречающегося исхода несет с собой гораздо больше количество информации, чем появление часто встречающегося исхода.
Для практики это означает, что сообщение о редко встречающемся исходе окажется, вообще говоря, длиннее и на его передачу потребуется больше времени, чем для сообщения о более часто встречающемся исходе.
09.11.2021
Количество информации и алфавит
Приём дискретного сообщения можно рассматривать как последовательное осуществление
09.11.2021
Количество информации и алфавит
Приём дискретного сообщения можно рассматривать как последовательное осуществление
Для каждого такого опыта можно определить его энтропию, которая определяется количеством элементарных исходов — количеством знаков в алфавите и вероятностями их появления в сообщениях.
Следовательно, можно найти численно равное энтропии количество информации, получаемое с каждым очередным знаком сообщения.
А из этого вытекает, что количество информации, связанное с одним знаком сообщения, зависит только от используемого алфавита и совершенно не зависит от конкретного принимаемого сообщения.
Если известно, что все знаки алфавита имеют равную вероятность появиться в сообщении, то определить количество информации, которое несёт с собой каждый знак любого сообщения можно по формуле Хартли
09.11.2021
Разумеется, из этих результатов не следует делать вывод о том, что
09.11.2021
Разумеется, из этих результатов не следует делать вывод о том, что
Лингвистическое богатство языка определяется количеством различных слов и их сочетаний, а это мало связано с количеством букв в алфавите.
С точки зрения практики этот результат означает, что сообщения из равного количества букв на английском и русском языках имеют разную длину в битах (и соответственно, разное время передачи), при этом большие длины (и времена передачи) имеют сообщения на русском языке.
Вместе с тем, хорошо известно, что одни буквы встречаются в текстах гораздо чаще, чем другие. Например, чаще всего в русских текстах встречается буква «о», а реже всего — буква «ф». Таким образом предположение о равной вероятности появления знаков алфавита несправедливо, и формула Хартли может использоваться только для вычисления максимального количества информации, которое приходится на один знак.
К сожалению, определить реальные вероятности появления, например, букв русского алфавита в различных текстах невозможно, поскольку общее количество всевозможных текстов бесконечно и, следовательно, невозможно определить ни общее количество элементарных исходов, ни количество благоприятствующих исходов.
09.11.2021
Поэтому путём анализа большого количества разных текстов специалисты определяют частоты появления
09.11.2021
Поэтому путём анализа большого количества разных текстов специалисты определяют частоты появления
Частоты некоторых букв русского алфавита
Соображение о неравновероятных исходах появления знаков алфавита в принимаемых сообщениях приводит к выводу о необходимости использования для подсчёта количества информации формулы Шеннона.
Вместе с тем, анализ текстов показывает, что для любого естественного языка существуют более часто встречающиеся пары знаков, так же как существуют и такие пары, которые нигде и никогда не встречаются. Так, в русском языке пары букв «щц» и «фъ» не встречаются ни в каких словах.
Следствием из этих рассуждений является вывод о том, что необходимо проводить более тонкие расчеты, считая независимыми появление уже всевозможных пар соседних знаков и отслеживая частоты их появления.
09.11.2021
I0,I1,I2,… ─ убывающая последовательность.
Подобные рассуждения можно распространить не только на соседние
09.11.2021
I0,I1,I2,… ─ убывающая последовательность.
Подобные рассуждения можно распространить не только на соседние
С практической точки зрения вычисление количества информации с учётом связей между отдельными знаками естественных алфавитов, то есть вычисление значений I2, I3, I4 … и т. д. вызывает значительные сложности, поэтому, как правило, ограничиваются расчётом I0(A) или I1(A), для которых появление каждого следующего знака происходит независимо от всех предшествующих.
Итак, будем считать, что каждый знак дискретного сообщения несёт с собой количество информации I0(A) или I1(A), которое полностью определяется только свойствами используемого алфавита A.
Общее количество информации IS в сообщении S равно сумме количеств информации от всех его знаков: IS=L*I(A) , где L — количество знаков в сообщении, а сомножитель I(A) равен I0(A) или I1(A) в зависимости от выбранного способа подсчёта.
09.11.2021
Количество информации в сообщении численно равно минимально необходимому количеству двоичных цифр,
09.11.2021
Количество информации в сообщении численно равно минимально необходимому количеству двоичных цифр,
Этот подход позволяет рассматривать понятие «информации» (точнее — сообщения) только с количественной стороны, безотносительно к её смысловому содержанию и ценности для получателя.
При таком подходе одна страница печатного текста содержит одно и то же количество информации, которое определяется только количеством знаков на странице и её оформлением, вне зависимости от того, что на этой странице напечатано: бессмысленный, случайный набор знаков, отрывок из романа «Война и мир» или же доказательство математической теоремы.
Такой подход вполне правомерен для решения сугубо технических вопросов, связанных с организацией безошибочной и экономичной передачи сообщений по каналам связи, а также задач их хранения и обработки
09.11.2021
Правило, описывающее соответствие между знаками первичного алфавита и знаками или сочетаниями
09.11.2021
Правило, описывающее соответствие между знаками первичного алфавита и знаками или сочетаниями
Кодирование сообщений
Исходный алфавит A1, в котором записано сообщение, называется первичным алфавитом. Целевой алфавит A2, в который преобразуется сообщение называется вторичным алфавитом.
Слова записанные в двоичном, шестнадцатеричном и некоторых других алфавитах, принято называть кодом (двоичное слово ─ двоичный код и т.д.).
Дискретное сообщение исходя из технических соображений или из особенностей органов чувств человека, участвующих в приеме или передаче сообщений, разбивают на конечные подпоследовательности знаков, которые принято называть словами. Количество знаков в слове называется длиной слова. Если все слова языка имеют одно и то же количество знаков, то такие слова называются n-разрядными (n ─ длина слова)
Совокупность всех используемых в преобразовании соответствий называется кодовой таблицей. Для обеспечения необходимых свойств операции кодирования между знаками первичного и знаками или группами знаков вторичного алфавитов должно быть установлено взаимно однозначное соответствие (биекция), при этом кодовая таблица представляет собой способ задания этого соответствия.
09.11.2021
Пример таблицы кодирования:
Последовательность знаков вторичного алфавита A2, которыми представлен один знак
09.11.2021
Пример таблицы кодирования:
Последовательность знаков вторичного алфавита A2, которыми представлен один знак
09.11.2021
Кодированием называется последовательность действий по переводу сообщения из первичного во вторичный
09.11.2021
Кодированием называется последовательность действий по переводу сообщения из первичного во вторичный
Существует огромное количество способов построения кодов при выбранных или заданных первичном и вторичном алфавитах. Поэтому возникает проблема выбора оптимального, то есть в некотором смысле наилучшего кода.
Декодирование представляет собой операцию, обратную кодированию, то есть это последовательность действий по восстановлению сообщения в исходном алфавите по его виду во вторичном.
Операции кодирования и декодирования считаются обратимыми, если их последовательное применение обеспечивает восстановление исходной информации без потерь.
Кодером называется устройство, обеспечивающее выполнение операции кодирования. Декодером называется устройство, обеспечивающее выполнение операции декодирования.
Оптимальным называется кодирование сообщения, результат которого обеспечивает минимально возможное для используемых алфавитов и передаваемого сообщения время передачи по каналам связи и минимальные требования к памяти при хранении.
Эффективным считается кодирование с результатом достаточно близким к оптимальному. Эффективное кодирование применяется в тех случаях, когда для получения оптимального кода требуются значительные временные ресурсы или не хватает каких-либо данных для его построения.
09.11.2021
Задачи эффективного и оптимального кодирования часто решаются с помощью сжатия сообщений.
09.11.2021
Задачи эффективного и оптимального кодирования часто решаются с помощью сжатия сообщений.
Различают два вида сжатия — без потери информации и с потерей информации.
Сжатие без потери информации применяется при кодировании текстовых и числовых видов данных, то есть там, где потеря информации недопустима, поскольку может привести к неправильному пониманию текста или к вычислениям с непредсказуемым результатом.
Сжатие с потерей информации широко применяется при кодировании графики, звука и видео, так как в этих случаях возможно удаление некоторой части данных без существенных отличий для восприятия человеком оригинала от полученного результата сжатия. В основе применения сжатия с потерями лежит естественное квантование органами слуха и зрения человека сообщений, получаемых из внешней среды.
Выбор оптимального кода это технический и экономический фактор, поскольку касается затрат (и не только временных) на выполнение кодирования и декодирования, на хранение и на передачу кода из одного места в другое и т.д. Естественно желание сделать такие затраты минимально возможными.
Однако свести их к нулю в принципе невозможно. Существующие границы эффективности кодирования, которые могут быть достигнуты, а также условия, при выполнении которых эти границы достижимы, определены в работах К. Шеннона, сформулировавшего и доказавшего ряд базовых теорем кодирования.
09.11.2021
Пусть в качестве первичного используется алфавит A1, в котором количество информации
09.11.2021
Пусть в качестве первичного используется алфавит A1, в котором количество информации
Пусть далее вторичным является алфавит A2, в котором количество приходящейся на один знак информации равно I(A2) бит.
Если длина исходного сообщения равна L1, то общее количество информации, которое связано с сообщением в первичном алфавите, равно L1×I(A1) бит .
Допустим, что во вторичном алфавите на преобразованное сообщение потребовалось L2 знаков. Тогда общее количество информации, связанное с этим же сообщением во вторичном алфавите, равно L2×I(A2).
09.11.2021
Рассмотрим, например, алфавиты A1={А, К, М, Н, У} и A2={0, 1}.
09.11.2021
Рассмотрим, например, алфавиты A1={А, К, М, Н, У} и A2={0, 1}.
Пусть требуется закодировать исходное сообщение «НАУКА».
Во вторичном алфавите это сообщение получим в виде «1010 1110 001001 10001 1110» (пробелы между кодами соседних знаков сообщения включены только для удобства чтения). Рассчитайте количество информации на один знак и общее количество информации в сообщении в первичном и вторичном алфавитах.
Используя для подсчёта количества информации формулу Хартли, получим: I0(A1)=log25≈2,32 бита, I0(A2)=log22=1 бит.
09.11.2021
Длины сообщений равны соответственно L1=5 и L2=23 знака (пробелы не учитываются,
09.11.2021
Длины сообщений равны соответственно L1=5 и L2=23 знака (пробелы не учитываются,
Таким образом, количество информации, связанное с сообщением, в первичном алфавите равно I(A1)≈ 11,6 бита, а во вторичном — I(A2)= 23 бита.
Это результат означает, что при использовании первичного алфавита требуется примерно в два раза меньше места для хранения (или времени для передачи), чем при использовании вторичного алфавита.
В соответствии с определением, операция обратимого кодирования не может уменьшить количество информации в сообщении, потому что в этом случае будет потеряна некоторая часть исходного сообщения. Связанная с этой потерянной частью сообщения информация (смысл этой части) будет также утеряна.
Условие неисчезновения информации при кодировании:
09.11.2021
Отношение L2/L1 имеет смысл количества знаков вторичного алфавита, которое требуется для
09.11.2021
Отношение L2/L1 имеет смысл количества знаков вторичного алфавита, которое требуется для
В обсуждавшемся примере L2/L1=23/5=4,6, то есть на один знак исходного алфавита потребовалось 4,6 двоичных знака.
Значение L2/L1 существенно зависит от кодируемого сообщения. Например, для сообщения «МАМА» и результата кодирования «10101 1110 10101 1110» получим L1=4, L2=18 и L2/L1 = 18/4=4,5.
Усреднённый коэффициент может пониматься как среднее количество знаков вторичного алфавита A2, которое требуется на кодирование одного знака первичного алфавита A1, при передаче любых сообщений.
Среднее количество знаков вторичного алфавита A2, которое приходится использовать для кодирования одного знака первичного алфавита A1, зависит только от выбранного способа кодирования и совершенно не зависит от конкретных кодируемых сообщений. Эта величина называется средней длиной кодового слова, средней длиной кодовой цепочки, длиной кодового слова, длиной кодовой цепочки
09.11.2021
Обычно I(A1)>I(A2) , следовательно Lmin>1
Неравенство
, выражающее условие неисчезновения
количества информации при кодировании,
09.11.2021
Обычно I(A1)>I(A2) , следовательно Lmin>1
Неравенство
, выражающее условие неисчезновения
количества информации при кодировании,
или
Введём обозначение
Тогда получим, что для любых вариантов кодирования без потери количества информации длина кодовой цепочки выбранного способа кодирования ограничена снизу значением:
При преобразовании сообщений без потери количества информации из алфавита A1 в алфавит A2 минимально возможная средняя длина кодовой цепочки Lmin равна отношению количеств информации, которые в этих алфавитах приходятся на один знак: I(A1)/I(A2).
09.11.2021
Теорема Шеннона о кодировании при отсутствии помех
При отсутствии помех всегда возможен
09.11.2021
Теорема Шеннона о кодировании при отсутствии помех
При отсутствии помех всегда возможен
или
Математически содержание этой теоремы можно выразить следующим образом: для любого сколь угодно малого наперёд заданного числа ε можно построить способ кодирования, для которого средняя длина кодовой цепочки удовлетворяет неравенству
Обратите внимание! Здесь обозначает фактически полученную при выбранном способе кодирования среднюю длину кодовой цепочки,
а обозначает минимально возможную для используемых алфавитов длину кодовой цепочки.
09.11.2021
Относительной избыточностью кода Q(A1,A2) называется отношение
Второй вариант формулировки теоремы Шеннона: «При
09.11.2021
Относительной избыточностью кода Q(A1,A2) называется отношение
Второй вариант формулировки теоремы Шеннона: «При
Если относительная избыточность в точности равна нулю, то кодирование называется оптимальным.
Способы кодирования без потери информации, обеспечивающие минимизацию относительной избыточности, принято называть энтропийным кодированием в связи с тем, что энтропия источника сообщения дает нижнюю границу средней длины кодовых цепочек, меньше которой её сделать невозможно.
09.11.2021
из сравнения двух используемых вариантов расчёта I(A) вытекает, что для получения
09.11.2021
из сравнения двух используемых вариантов расчёта I(A) вытекает, что для получения
для первичного алфавита — как можно меньшую меру I(A1)=I1(A1), которая подсчитывается по формуле Шеннона,
для вторичного алфавита — как можно большую меру определения количества информации I(A2)=I0(A2), которая подсчитывается по формуле Хартли.
Для подсчёта минимальной возможной длины кодовой цепочки
Тогда при переходе из первичного алфавита A1 во вторичный алфавит A2, состоящий из M знаков, получим:
Если вторичный алфавит является двоичным, то:
Третий вариант формулировки теоремы Шеннона: «При отсутствии помех средняя длина двоичного кода может быть сколь угодно близкой к среднему количеству информации, приходящемуся на знак первичного алфавита».
09.11.2021
Пусть каждому знаку первичного алфавита A1 с известными частотами
появления знаков в
09.11.2021
Пусть каждому знаку первичного алфавита A1 с известными частотами
появления знаков в
а фактическая средняя длина кодовой цепочки равна
Пример. Пусть первичный алфавит состоит из пяти знаков с известными частотами появления в сообщениях, а в качестве вторичного выбран двоичный алфавит. Найти минимально возможную длину кодовой цепочки и фактическую среднюю длину, а также относительную избыточность кода.
Ответ: 2,19 знака; 4,51 знака; 106%.
На практике вероятности появления знаков алфавита в сообщении, как правило, неизвестны, поэтому в формуле Шеннона используются частоты знаков и количество информации определяется приближённо:
09.11.2021
В своей теореме К. Шеннон только доказал теоретическую возможность построения кода
09.11.2021
В своей теореме К. Шеннон только доказал теоретическую возможность построения кода
Из общих соображений можно заметить, что для построения эффективного кода следует:
учитывать частоты появления знаков первичного алфавита в сообщениях, то есть для знаков, имеющих высокую частоту появления в текстах, следует выбирать коды с меньшей длиной, тогда, естественно, для редко встречающихся знаков придётся выбирать коды с большей длиной;
добиваться равной вероятности (частоты) использования знаков вторичного алфавита;
при необходимости группировать символы первичного алфавита в блоки и каждому блоку выделять отдельный код.
Фундаментальный смысл обсуждаемой теоремы Шеннона в том, что она, во-первых, определяет минимально возможную для выбранных алфавитов длину кодовой цепочки, а, во-вторых, утверждает, что путем выбора подходящего способа кодирования к этой границе можно приблизиться как угодно близко.
09.11.2021
Алфавитное неравномерное двоичное кодирование
Основной принцип неравномерного кодирования: коды, встречающиеся в
09.11.2021
Алфавитное неравномерное двоичное кодирование
Основной принцип неравномерного кодирования: коды, встречающиеся в
00100010000111010101110000110
Способы распознавания кодовых цепочек отдельных знаков:
Проблема распознавания кодовых цепочек
Использование разделительных знаков
Применение префиксных кодов
Пример неравномерного кода с разделителями: 00 ─ код разделителя
Код разделителя (признак конца знака) можно включить в код знака;
Код разделителя не должен находится в середине кода знака;
Код знака (кроме пробела) должен начинаться с 1;
09.11.2021
K(r,2)=4,964;
Q(r,2)=4,964/4,356-1=0,14
Код с разделителями для русского алфавита
09.11.2021
K(r,2)=4,964;
Q(r,2)=4,964/4,356-1=0,14
Код с разделителями для русского алфавита
09.11.2021
Префиксные коды. Условие Фано.
Неравномерный код может быть однозначно декодирован, если никакой
09.11.2021
Префиксные коды. Условие Фано.
Неравномерный код может быть однозначно декодирован, если никакой
Например, если некоторому знаку выделен код 110, то недопустимы такие коды:
1, 11 ─ совпадают с начальными битами 110;
1100, 1101, 11011 и т.д. ─ их начало совпадает с 110.
Пример декодирования кода, подчиняющегося условию Фано:
Рабочее слово
0
нет
Знак
м
Код
Текст
00
м
00100010000111010101110000110
0100010000111010101110000110
100010000111010101110000110
00010000111010101110000110
1
нет
0010000111010101110000110
10
а
ма
010000111010101110000110
0
нет
10000111010101110000110
00
м
мам
10000111010101110000110
09.11.2021
Префиксный код Шеннона - Фано
0,5
0,5
0
0
1
1
1
1
0
1
0
1
1
1
0
1
1
0
1
00
01
10
110
1110
1111
К(A,2)=2,45; I1(A)=2,390; Q(A,2)=0,0249; p(0)=0,35; p(1)=0,65;
Применение
09.11.2021
Префиксный код Шеннона - Фано
0,5
0,5
0
0
1
1
1
1
0
1
0
1
1
1
0
1
1
0
1
00
01
10
110
1110
1111
К(A,2)=2,45; I1(A)=2,390; Q(A,2)=0,0249; p(0)=0,35; p(1)=0,65;
Применение
09.11.2021
Префиксный код Хаффмана
Исходный A1 A2 A3 A4
Прямой ход
09.11.2021
Префиксный код Хаффмана
Исходный A1 A2 A3 A4
Прямой ход
09.11.2021
Обратный ход построения кода Хаффмана
Исходный A1 A2 A3 A4
К(A,2)=2,45; I(A)=2,390; Q(A,2)=0,0249;
09.11.2021
Обратный ход построения кода Хаффмана
Исходный A1 A2 A3 A4
К(A,2)=2,45; I(A)=2,390; Q(A,2)=0,0249;
09.11.2021
Код Хаффмана для русского алфавита
09.11.2021
Код Хаффмана для русского алфавита
09.11.2021
Блочное кодирование
Коды, в которых кодовая цепочка ставится в соответствие последовательности из
09.11.2021
Блочное кодирование
Коды, в которых кодовая цепочка ставится в соответствие последовательности из
Пример блочного кодирования для алфавита {a,b}
Алфавитное кодирование
Блочное кодирование
a 0,75 0
b 0,25 1
I(A)=0,811; K(A,2)=1; Q(A,2)=0,233
aa 0,5625 0
ab 0,1875 11
ba 0,1875 100
bb 0,0625 101
I(A)=0,811, K(A,2)=0,844; Q(A,2)=0,04
Пусть словарный запас некоторого языка составляет A составляет 200000 слов. При равномерном двоичном кодировании слов K(A,2)≥log2200000; K(A,2)=18. Средняя длина русских слов считается равной 6,3 знака (вместе с пробелом между словами). Таким образом, среднее количество информации составляет 2,85 бит на знак. При равномерном алфавитном кодировании ─ 5 бит на знак.
09.11.2021
несет I0(A) = log2n = 5 бит информации и
09.11.2021
несет I0(A) = log2n = 5 бит информации и