Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Информатика.-5

.pdf
Скачиваний:
6
Добавлен:
05.02.2023
Размер:
528.67 Кб
Скачать

1

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

Федеральное государственное бюджетное образовательное учреждение высшего образования

Томский государственный университет систем управления и радиоэлектроники (ТУСУР)

Кафедра радиоэлектроники и защиты информации (РЗИ)

УТВЕРЖДАЮ Зав. кафедрой РЗИ

__________ А.С. Задорин

ИНФОРМАТИКА

Конспект лекций для студентов специальностей 11.03.01 «Радиотехника» и

11.03.02 «Инфокоммуникационные технологии и системы связи»

Разработчик доцент кафедры РЗИ

__________ Д.В. Дубинин "___"_________ 2016 г.

2016

2

Дубинин Д.В. Информатика. Конспект лекций: учебное пособие – Томск: Томский государственный университет систем управления и радиоэлектроники, 2016. – 73 с.

Конспект лекций по дисциплине «Информатика и информационные технологии» для студентов специальностей 11.03.01 «Радиотехника» и 11.03.02 «Инфокоммуникационные технологии и системы связи». В конспекте рассматриваются численные методы решения задач, которые наиболее часто встречаются в практике радиоинженеров.

©Дубинин Д.В., 2016.

©Томский государственный университет систем управления и радиоэлектроники, 2016.

 

 

 

3

 

 

ОГЛАВЛЕНИЕ

 

1.

Сортировка данных...............................................................................................................

4

 

1.1

Сортировка подсчетом..................................................................................................

5

 

1.2

Сортировка вставками...................................................................................................

6

 

1.3

Сортировка выбором.....................................................................................................

8

 

1.4

Сортировка обменом...................................................................................................

10

 

1.5

Сравнение алгоритмов сортировки ...........................................................................

13

2.

Численное решение уравнений..........................................................................................

15

 

2.1

Метод половинного деления (дихотомия) ................................................................

16

 

2.2

Метод хорд (ложного положения) .............................................................................

18

 

2.3

Метод Ньютона (касательных)...................................................................................

19

 

2.4

Модифицированный метод Ньютона........................................................................

22

 

2.5

Метод секущих............................................................................................................

23

 

2.6

Метод итераций...........................................................................................................

24

 

2.7

Эффективность численных методов решения уравнений.......................................

27

3.

Решение систем уравнений.................................................................................................

28

 

3.1

Метод Крамера.............................................................................................................

28

 

3.2

Метод Гаусса................................................................................................................

30

 

3.3

Итеративный метод Якоби.........................................................................................

35

 

3.4

Итеративный метод Гаусса-Зейделя..........................................................................

36

4.

Численное интегрирование ................................................................................................

38

 

4.1

Метод прямоугольников.............................................................................................

39

 

4.2

Метод трапеций...........................................................................................................

43

 

4.3

Метод парабол (Симпсона или Ньютона-Симпсона) ..............................................

45

 

4.4

Метод Симпсона 3/8....................................................................................................

48

 

4.5

Метод Буля...................................................................................................................

49

 

4.6

Сравнение различных методов по точности приближения.....................................

49

 

4.7

Численное интегрирование методом Гаусса-Лежандра..........................................

50

 

4.8

Численное решение интеграла методом Монте-Карло............................................

55

5. Интерполяция и приближение полиномами.....................................................................

58

 

5.1

Интерполяция алгебраическим полиномом..............................................................

58

 

5.2

Интерполяционный полином Лагранжа....................................................................

59

 

5.3

Интерполяционный полином Ньютона.....................................................................

60

 

5.4

Интерполяция параболическим сплайном................................................................

62

 

5.5

Интерполяция кубическим сплайном........................................................................

65

 

5.6

Метод наименьших квадратов ...................................................................................

68

 

5.7

Интерполяция тригонометрическим полиномом.....................................................

72

4

1. Сортировка данных

Сортировка – один из основных алгоритмов обработки информации, состоящий в переупорядочении по нужному признаку заданной последовательности величин.

Наиболее полно алгоритмы сортировки изложены в книге Дональда Кнута «Искусство сортировки».

Постановка задачи: необходимо упорядочить N элементов R1, R2 ,..., RN , которые

называются записями. Каждая запись Rj имеет ключ K j , который управляет процессом

сортировки. Помимо ключа запись может содержать побочную информацию, которая не влияет на сортировку, но всегда остается в этой записи.

Отношение порядка < (меньше) на множестве ключей вводится таким образом, что для трех разных ключей a, b, c выполнялись следующие условия:

справедливо одно и только одно соотношение a < b , a = b , a > b (закон трихотомии),

если a < b и b < c , то a < c (закон транзитивности).

Эти два свойства определяют математическое понятие линейного упорядочения. Задача сортировки – найти такую перестановку записей p(1), p(2),..., p(N ) , после

которой ключи расположились в неубывающем порядке Kp(1) Kp(2) ... Kp( N ) .

Сортировка называется устойчивой, если она удовлетворяет дополнительному условию, что записи с одинаковыми ключами остаются в прежнем порядке, т.е.

p(i) < p( j) , если Kp(i) = Kp( j) и i < j .

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

Эффективность алгоритма сортировки оценивается двумя показателями: количеством сравнений и количеством обменов.

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

сортировка подсчетом,

сортировка вставками,

сортировка посредством выбора,

обменная сортировка.

Для объяснения особенностей того или иного алгоритма сортировки будет использоваться последовательность записей, ключи которых образуют последовательность, приведенную в таблице 6.1.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5

 

Таблица 1.1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

K1

K2

K3

K4

K5

K6

K7

K8

K9

K10

K11

K12

K13

K14

K15

K16

503

087

512

061

908

170

897

275

653

426

154

509

612

677

765

703

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1.1 Сортировка подсчетом

Для сортировки методом подсчета записей R1, R2 ,..., RN по ключам K1, K2 ,..., KN

используется вспомогательный массив C(1),C(2),...,C(N ) . Изначально элементы массива

C(1),C(2),...,C(N ) равны нулю. Все ключи попарно сравниваются. Если ключ Ki больше ключа K j , то элемент C(i) увеличивается на единицу. В противном случае на единицу увеличивается элемент C( j) . После завершения алгоритма величина C( j) +1 определяет окончательное положение записи Rj .

Продемонстрируем изложенный алгоритм с помощью последовательности ключей, приведенных ранее.

Таблица 1.2

ключи

503

087

512

061

908

170

897

275

653

426

154

509

612

677

765

703

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

C (нач)

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

C (i=N)

0

0

0

0

1

0

1

0

0

0

0

0

0

0

1

12

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

i=N-1

0

0

0

0

2

0

2

0

0

0

0

0

0

0

13

12

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

i=N-2

0

0

0

0

3

0

3

0

0

0

0

0

0

11

13

12

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

i=N-3

0

0

0

0

4

0

4

0

1

0

0

0

9

11

13

12

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

i=N-4

0

0

1

0

5

0

5

0

2

0

0

7

9

11

13

12

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

i=N-5

1

0

2

0

6

1

6

1

3

1

2

7

9

11

13

12

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

·····

·····

·····

·····

·····

·····

·····

·····

·····

·····

·····

·····

·····

·····

·····

·····

·····

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

C (i=2)

6

1

8

0

15

3

14

4

10

5

2

7

9

11

13

12

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Приведем фрагмент программы сортировки подсчетом.

Фрагмент программы на языке Си

for(i=1; i<=n; i++) c[i]=0;

for(i=n; i>1; i--)

{

for(j=i-1; j>0; j--)

{

if (k[i]<k[j]) c[j]++; else c[i]++;

}

}

1.2 Сортировка вставками

6

Фрагмент программы на языке Паскаль

for i:=1 to n do c[i]:=0;

for i:=n downto 2 do begin

for j:=i-1 downto 1 do begin

if (k[i]<k[j])

then c[j]:=c[j]+1 else c[i]:=c[i]+1;

end end

Сортировка вставками основана на свойстве, которым пользуются игроки в карточной игре бридж (или кинг, преферанс). Перед рассмотрением записи Rj считается,

что предыдущие записи R1, R2 ,..., Rj1 уже упорядочены. Запись Rj вставляется в

соответствующее место. Простейшая сортировка вставками является очевидной.

Пусть записи R1, R2 ,..., Rj1 размещены так, что K1 K2 ... K j1 . Сравнивая по

очереди K j с K j1, K j2 ,... до тех пор, пока не обнаружим, что запись Rj необходимо вставить между записями Ri и Ri+1 . Тогда записи Ri+1, Ri+2 ,..., Rj1 сдвигаются, а запись Rj

занимает место (i +1) .

Продемонстрируем изложенный алгоритм с помощью последовательности ключей, приведенных ранее.

7

Таблица 1.3

ключи

503

087

512

061

908

170

897

275

653

426

154

509

612

677

765

703

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

503

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

087

503

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

087

503

512

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

061

087

503

512

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

061

087

503

512

908

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

061

087

170

503

512

908

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

061

087

170

503

512

897

908

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

·····

·····

·····

·····

·····

·····

·····

·····

·····

·····

·····

·····

·····

·····

·····

·····

·····

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

061

087

154

170

275

426

503

509

512

612

653

677

703

765

897

908

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Приведем фрагмент программы сортировки простыми вставками.

Фрагмент программы на языке Си

Фрагмент программы на языке Паскаль

 

for j:=2 to n do

for(j=2; j<=n; j++)

{

begin

i=j-1;

i:=j-1;

key=j;

key:=j;

rc=r[j];

rc:=r[j];

do

repeat

{

if(key>k[i]) then break;

if(key>k[i]) break;

r[i+1]:=r[i];

r[i+1]=r[i];

i:=i-1;

i--;

until (i<>0);

} while (i==0);

r[i+1]=rc;

r[i+1]=rc;

end

}

 

 

 

Быстродействие алгоритма простых вставок можно повысить, применяя бинарные вставки и двухпутевые вставки. Суть бинарных вставок состоит в том, что при размещении записи R64 ключ K64 сравнивать не с K63, K62 ,…, а с ключом K32 . Если

K64 < K32 , то затем его необходимо сравнить с ключом K16 . Положение записи R64 можно

8

найти за шесть сравнений. Общее число сравнений для N вставляемых элементов можно снизить с N 2 / 4 до N log2 N .

Однако бинарные вставки решают задачу только наполовину. После того, как найдено место для записи Rj , необходимо передвинуть в среднем j / 2 записи. Пользуясь двухпутевыми вставками можно уменьшить это число вдвое. Суть алгоритма двухпутевых вставок состоит том, что первый элемент помещается в середину области вывода. Место для последующих элементов освобождается при помощи сдвигов влево или вправо, туда, куда удобнее. В таблице 6.4 показана сортировка двухпутевыми вставками.

Таблица 1.4

ключи

503

087

512

061

908

170

897

275

653

426

154

509

612

677

765

703

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

503

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

087

503

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

087

503

512

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

061

087

503

512

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

061

087

503

512

908

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

061

087

170

503

512

908

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

061

087

170

503

512

897

908

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

·····

·····

·····

·····

·····

·····

·····

·····

·····

·····

·····

·····

·····

·····

·····

·····

·····

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

061

087

154

170

275

426

503

509

512

612

653

677

703

765

897

908

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1.3 Сортировка выбором

При сортировке записей R1, R2 ,..., RN методом простого выбора находится запись

Rj , имеющая наибольший ключ K j . После этого происходит обмен записей Rj и RN .

Далее наибольший ключ ищется у записей R1, R2 ,..., RN 1 . Найденная запись обменивается с записью RN 1 . Подобная операция выполняется (N 1) раз. В результате процедура сортировки выполнена.

Продемонстрируем изложенный алгоритм с помощью последовательности ключей, приведенных ранее.

9

Таблица 1.5

ключи

503

087

512

061

908

170

897

275

653

426

154

509

612

677

765

703

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

503

087

512

061

703

170

897

275

653

426

154

509

612

677

765

908

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

503

087

512

061

703

170

765

275

653

426

154

509

612

677

897

908

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

503

087

512

061

703

170

677

275

653

426

154

509

612

765

897

908

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

503

087

512

061

612

170

677

275

653

426

154

509

703

765

897

908

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

503

087

512

061

612

170

509

275

653

426

154

677

703

765

897

908

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

503

087

512

061

612

170

509

275

154

426

653

677

703

765

897

908

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

503

087

512

061

426

170

509

275

154

612

653

677

703

765

897

908

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

·····

·····

·····

·····

·····

·····

·····

·····

·····

·····

·····

·····

·····

·····

·····

·····

·····

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

061

087

154

170

275

426

503

509

512

612

653

677

703

765

897

908

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Приведем фрагмент программы сортировки простым выбором.

Фрагмент программы на языке Си

Фрагмент программы на языке Паскаль

 

for j:=n downto 2 do

for(j=n; j>1; j--)

{

begin

jmax=j;

jmax:=j;

for(i=j-1; i>0; i--)

for i:=j-1 to 1 do

if(k[i]>k[jmax]) jmax=i;

if(k[i]>k[jmax])then jmax:=i;

if(jmax<j)

if(jmax<j) then

{

begin

r_temp=r[jmax];

r_temp:=r[jmax];

r[jmax]=r[j];

r[jmax]:=r[j];

r[j]=r_temp;

r[j]:=r_temp;

}

end

}

end

 

 

Число сравнений ключей в методе простого выбора фиксировано и равно (N 1) N / 2 . Поэтому алгоритм программно реализован с помощью двух циклических

операторов for.

10

1.4 Сортировка обменом

Рассмотрим два алгоритма, в которых сортировка записей проводится обменом. Простейший обменный алгоритм сортировки называется «пузырек». При сортировке записей R1, R2 ,..., RN с помощью алгоритма «пузырька» сравниваются ключи двух соседних записей Rj и Rj1 . Если ключ K j меньше ключа K j1 , записи Rj и Rj1

обмениваются. Сначала сравнивают K1 и K2 , обменивая при необходимости R1 и R2 .

Затем K2 и K3 , K3 и K4 и т.д. После многократного выполнения этого процесса исходная последовательность будет упорядочена. В таблице 1.6 показана сортировка последовательности шестнадцати ключей, приведенных ранее.

Таблица 1.6

ключи

503

087

 

512

061

908

 

170

897

275

653

426

154

509

612

677

765

703

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

087

503

 

061

512

170

 

897

275

653

426

154

509

612

677

765

703

908

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

087

061

 

503

170

512

 

275

653

426

154

509

612

677

765

703

897

908

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3

061

087

 

170

503

275

 

512

426

154

509

612

653

677

703

765

897

908

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4

061

087

 

170

275

503

 

426

154

509

512

612

653

677

703

765

897

908

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5

061

087

 

170

275

426

 

154

503

509

512

612

653

677

703

765

897

908

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6

061

087

 

170

275

154

 

426

503

509

512

612

653

677

703

765

897

908

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

7

061

087

 

170

154

275

 

426

503

509

512

612

653

677

703

765

897

908

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

8

061

087

 

154

170

275

 

426

503

509

512

612

653

677

703

765

897

908

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

9

061

087

 

154

170

275

 

426

503

509

512

612

653

677

703

765

897

908

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Если ключи

K1, K2 ,..., KN

расположить вертикально, так чтобы первый ключ был

внизу, а последний вверху, то записи с большими ключами постепенно «всплывают» и занимают соответствующее место. При первом прохождении запись с ключом 908 занимает последнее место. При втором проходе запись с ключом 897 занимает предпоследнее место и т.д. Поэтому данный алгоритм получил название «пузырек».

Приведем фрагмент программы сортировки «пузырьком».