Слайд 2
в
Массив – это группа переменных одного типа, расположенных
в памяти рядом (в соседних ячейках) и имеющих общее
имя. Каждая ячейка в массиве имеет уникальный номер (индекс).
В Питоне массивы - списки
Слайд 3
A
массив
2
15
A[0]
A[1]
A[2]
A[3]
A[4]
ЗНАЧЕНИЕ элемента массива
A[2]
НОМЕР (ИНДЕКС)
элемента массива: 2
НОМЕР
элемента
массива
(ИНДЕКС)
Слайд 4
A = [1, 3, 4, 23, 5]
A =
[1, 3] + [4, 23] + [5]
[1, 3, 4,
23, 5]
A = [0]*10
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
A = list ( range(10) )
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Слайд 5
Генераторы списков
A =[ i for i in range(10) ]
[0,
1, 2, 3, 4, 5, 6, 7, 8, 9]
A
=[ i*i for i in range(10) ]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
for i in range(10)
i*i
from random import randint
A = [ randint(20,100)
for x in range(10)]
randint(20,100)
A = [ i for i in range(100)
if isPrime(i) ]
if isPrime(i)
случайные числа
условие отбора
Слайд 6
Создание массива:
N = 5
A = [0]*N
i = 0
while
i < N:
# обработать A[i]
i += 1
Цикл
с переменной:
for i in range(N):
# обработать A[i]
Обработка в цикле:
Слайд 7
for i in range(N):
print ( "A[", i,
"]=",
sep = "",
end = "" )
A[i] = int( input() )
Ввод с клавиатуры:
A = [ int(input()) for i in range(N) ]
Ввод без подсказок:
data = input() # "1 2 3 4 5"
s = data.split() # ["1","2","3","4","5"]
A = [ int(x) for x in s ]
# [1,2,3,4,5]
Слайд 8
Вывод массива на экран
Как список:
print ( A )
[1,
2, 3, 4, 5]
В строчку через пробел:
for i in
range(N):
print ( A[i], end = " " )
1 2 3 4 5
или так:
for x in A:
print ( x, end = " " )
1 2 3 4 5
или так:
s = [ str(x) for x in A]
print ( " ".join( s ) )
соединить через пробел
записать как строку
или так:
print ( *A )
print (1, 2, 3, 4, 5)
Слайд 9
Заполнение случайными числами
from random import randint
N = 10
A
= [ randint(20,100)
for
x in range(N)]
randint(20,100)
случайные числа
[20,100]
from random import randint
N = 10
A = [0]*N
for i in range(N):
A[i] = randint(20,100)
или так:
Слайд 10
Перебор элементов
Общая схема (можно изменять A[i]):
for i in
range(N):
... # сделать что-то с A[i]
Если не нужно
изменять A[i]:
for x in A:
... # сделать что-то с x
for i in range(N):
A[i] += 1
x = A[0], A[1], ..., A[N-1]
for x in A:
print ( x )
Слайд 11
Подсчёт нужных элементов
Задача. В массиве записаны данные о
росте баскетболистов. Сколько из них имеет рост больше
180
см, но меньше 190 см?
count = 0
for x in A:
if 180 < x and x < 190:
count += 1
Слайд 12
Перебор элементов
Сумма:
summa = 0
for x in A:
if
180 < x and x < 190:
summa
+= x
print ( summa )
print ( sum(A) )
или так:
Слайд 13
Перебор элементов
Среднее арифметическое:
count = 0
summa = 0
for x
in A:
if 180 < x and x
190:
count += 1
summa += x
print ( summa/count )
среднее арифметическое
или так:
B = [ x for x in A ]
if 180 < x and x < 190]
print ( sum(B)/len(B) )
отбираем нужные
Слайд 14
Максимальный элемент
M = A[0]
for i in range(1,N):
if
A[i] > M:
M = A[i]
print (
M )
M = A[0]
for x in A:
if x > M:
M = x
Варианты в стиле Python:
M = max ( A )
Слайд 15
Максимальный элемент и его номер
Слайд 16
Максимальный элемент и его номер
M = max(A)
nMax =
A.index(M)
print ( "A[", nMax, "]=", M, sep = ""
)
Вариант в стиле Python:
Слайд 17
Вставка и удаление элементов
Алгоритм удаления элемента:
определить номер
удаляемого элемента - k(ввести с клавиатуры или найти из
каких-то условий)
сдвинуть все элементы начиная с k+1-ого на 1 элемент влево
последнему элементу массива присвоить значение 0
При удалении элемента размер массива не меняется! Поэтому необходимо далее в программе указывать не до n-1, а до n-2.
Слайд 18
дан массив А:
3 5 6 8 12
15 17 18 20 25
k=3
3 5 6 12
15 17 18 20 25 25
3 5 6 12 15 17 18 20 25 0
Элемент который нужно удалить
Слайд 19
{ввод массива и k}
for i
in range(k,n-1):
a[i]=a[i+1]
a[n-1] = 0
{вывод массива}
Слайд 20
Алгоритм вставки элемента: (после k-ого)
первые k элементов остаются
без изменений
все элементы, начиная с k-ого сдвигаются на 1
позицию назад
на место (k+1)-ого элемента записываем новый элемент.
Массив из n элементов, в который вставляется k элементов необходимо определять как массив, имеющий размер n+k. Вставка перед элементом отличается только тем, что сдвигаются все элементы, начиная с k-ого и на место k -ого записываем новый
Слайд 21
дан массив А:
k=3
3 5 6 8
8 12 15 17 18 20 25
3 5 6
8 100 12 15 17 18 20 25
позиция для добавления
нового элемента
Слайд 22
Пример:
Вставить 100 после элемента номер которого вводится с
клавиатуры:
{ввод массива и k}
for i
in range(n,k+2,-1):
a[i+1]=a[i]
a[k+1] = 100;
{вывод массива}
Слайд 23
Алгоритм циклического сдвига на k позиций.
I способ
определить сколько
раз необходимо произвести одноэлементный сдвиг
k := k % n;
k
раз применить одноэлементный сдвиг
Алгоритм одноэлементного сдвига.
Запомнить в дополнительной ячейке первый (или последний) элемент массива
Сдвинуть все элементы влево (вправо)
На последнее (первое) место записать тот, который запоминали.
Слайд 24
Сдвиг вправо и влево
n=int(input())
a=[5]*n
for i in range(n):
a[i]=int(input())
print(a)
k=int(input())
k=k%n
for i in range(k):
t=a[0]
for j in range(n-1):
a[j]=a[j+1]
a[n-1]=t
print(a)
Слайд 25
II способ
Скопировать первые k элементов массива во
временный массив
Сдвинуть оставшиеся n-k элементов влево на k позиций
Скопировать
данные из временного массива обратно в основной массив на последние k позиций
Слайд 26
III способ
отобразить элементы массива(0, k-1)
отобразить элементы массива (k,
n-1)
отобразить элементы массива (0, n-1)
Слайд 27
j-сколько раз произвести обмен, left - левая граница
отображения, right - правая граница отображения,
Dlina - длина
отображаемой части массива
j=1 left=0 right=k-1 dlina=right-left+1
(***) while j<=dlina // 2 :
temp=a[left]
a[left]=a[right]
a[right]=temp
left+=1
right-=1
j+=1
j=1 left=k right=n-1 dlina=right-left+1
(***) {повторить цикл}
j=1 left=0 right=n-1 dlina=right-left+1
(***) {повторить цикл}
Слайд 28
Сжатие массива.
Удаление каждого k-го элемента:
i – индекс активного
элемента
l - индекс просматриваемого элемента
kol – количество элементов после
всех удалений.
i=k-1; l=k-1;
while l<=n-1:
if (l+1) % k==0 :
l+=1
if l<=n-1 :
a[i]=a[l];
i+=1
l+=1
kol=n-n // k
Слайд 29
Линейный поиск.
Алгоритм.
Последовательно просматриваем массив
и сравниваем значение очередного
элемента с данным, если значение очередного элемента совпадет с
Х, то запоминаем его номер в переменной k.
For i in range(n):
if a[i] == x :
k = i;
Недостатки данной реализации алгоритма:
находим только последнее вхождение элемента
в любом случае производится n сравнений
Слайд 30
Улучшим: будем прерывать поиск, как только найдем элемент:
while
i
i+=1
В результате или найдем нужный элемент, или просмотрим весь массив.
Недостаток данной реализации:
в заголовке цикла сложное условие, что замедляет поиск.
Слайд 31
Бинарный поиск
Применяется для отсортированных массивов!!!!!!!.
Задача. Дано
Х и массив А(n), отсортированный по неубыванию Найти i,
такой что a[i] = x или сообщить что данного элемента в массиве нет.
Слайд 32
Алгоритм
Является ли Х средним элементом массива. Если
да, то поиск завершен, иначе переходим к пункту 2.
Возможно
2 случая:
Х меньше среднего, тогда так как А упорядочен, то из рассмотрения можно исключить все элементы массива, расположенные правее среднего и применить метод к левой половине массива.
Х больше среднего. Значит, исключаем из рассмотрения левую половину массива и применяем метод к правой части.
Слайд 33
l = 0; r = n-1; {на
первом шаге рассматриваем весь массив}
f = False; {признак
того, что Х не найден}
while l <= r and not f :
m = (l+r) // 2;
if a[m] ==x :
f = True {элемент найден! Поиск прекращаем}
elif x < a[m] :
r=m-1 {отбрасываем правую часть}
else: l = m + 1 {отбрасываем левую часть}
Слайд 34
Сортировка - процесс упорядочения заданного множества объектов по
Слайд 35
Степень эффективности метода - количество сравнений и обменов,
произведенных в процессе сортировки.
Наиболее часто встречаются 3 метода: сортировка
выбором, обменом и вставкой.
Слайд 36
Сортировка методом выбора
Алгоритм (на примере сортировки по
убыванию)
Выбрать минимальный (максимальный) элемент массива
Поменять его местами с
последним (первым) элементом: теперь самый маленький (большой) на своем месте
Уменьшить количество рассматриваемых элементов на 1
Повторить действия 1-3 с оставшимися элементами (теми, которые еще не стоят на своих местах)
21 5 17
23 12
43 21 17 5
23 17 43 21 12 5
23 21 43 17 12 5
23 43 21 17 12 5
43 23 21 17 12 5
Слайд 38
For i in range(n-1,0,-1):
найти минимальный элемент из a[0],...,a[i]
запомнить его индекс в переменной k
если i <> k то поменять местами a[i] и a[k]
end;
Слайд 40
Алгоритм: (на примере сортировки по убыванию)
1) Просматриваем массив
парами a[0], a[1]; a[2], a[3]; ...
2) Если первый элемент
пары меньше второго (пара расположена неправильно), то необходимо поменять их местами
3) Уменьшить количество рассматриваемых элементов на 1
4) Повторять действия 1-3 пока количество элементов в текущей части массива не уменьшится до двух.
45
34 12 6 11 45
34 12 6
11 45
34 12 11 6 45
34 12 11 45 6
Слайд 42
For k in range(n-1):
For i in
range ( n-k+1):
if a[i] > a[i+1] :
t = a[i]
a[i]= a[i+1]
a[i+1]= t