Программирование на языке Python

Содержание

Слайд 2

Программирование на языке Python § 62. Массивы

Программирование на языке Python

§ 62. Массивы

Слайд 3

Что такое массив? Массив – это группа переменных одного типа, расположенных

Что такое массив?

Массив – это группа переменных одного типа, расположенных в

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

Надо:

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

Слайд 4

Что такое массив? A массив 2 15 НОМЕР элемента массива (ИНДЕКС)

Что такое массив?

A

массив

2

15

НОМЕР элемента массива
(ИНДЕКС)

A[0]

A[1]

A[2]

A[3]

A[4]

ЗНАЧЕНИЕ элемента массива

A[2]

НОМЕР (ИНДЕКС) элемента массива: 2

ЗНАЧЕНИЕ

элемента массива: 15
Слайд 5

Массивы в Python: списки A = [1, 3, 4, 23, 5]

Массивы в Python: списки

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]

Слайд 6

Генераторы списков A =[ i for i in range(10) ] [0,

Генераторы списков

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)

случайные числа

условие отбора

Слайд 7

Добавление элементов A = [1, 2, 3] x = 5 A.append

Добавление элементов

A = [1, 2, 3]
x = 5
A.append ( x+3 )

#

[1, 2, 3, 8]

append

Метод – операция, которую можно применить к списку.

A = [1, 2, 3]
A.insert ( 1, 35 )

# [1, 35, 2, 3]

insert

A.insert ( 0, 90 )

A = [90] + A

в конец списка

Слайд 8

Удаление элементов A = [1, 2, 3] x = A.pop (

Удаление элементов

A = [1, 2, 3]
x = A.pop ( 1 )

# x = 2, A = [1, 3]

удалить A[1]

A = [1, 2, 3]
x = A.pop () # x = 3, A = [1, 2]

удалить последний

A = [11, 29, 37, 45]
A.remove( 37 ) # A = [11, 29, 45]

Слайд 9

Ввод массива с клавиатуры Создание массива: Ввод с клавиатуры: N =

Ввод массива с клавиатуры

Создание массива:
Ввод с клавиатуры:

N = 10
A = [0]*N

for

i in range(N):
print ( "A[", i, "]=",
sep = "", end = "" )
A[i] = int( input() )

A[0] =
A[1] =
A[2] =
A[3] =
A[4] =

5
12
34
56
13

sep = ""

end = ""

не разделять элементы

не переходить на новую строку

Слайд 10

Ввод массива с клавиатуры Ввод без подсказок: Ввод в одной строке:

Ввод массива с клавиатуры

Ввод без подсказок:
Ввод в одной строке:

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]

int(input())

int(x)

или так:

s = input().split() # ["1","2","3","4","5"]
A = list( map(int, s) ) # [1,2,3,4,5]

применить int ко всем элементам s

построить список

Слайд 11

Ввод массива с клавиатуры Ввод в одной строке: A=[] N=int(input()) for

Ввод массива с клавиатуры

Ввод в одной строке:

A=[]
N=int(input())
for i in input().split():
A.append(int(i))

Ввод

построчно:

N=int(input('Введите количество чисел ='))
A=[]
for i in range (1,N+1):
A.append(int(input('Введите число =')))

A=[]
N=int(input())
A = [int(input("Номер %d = " % i))
for i in range(N)]

Слайд 12

Ввод с клавиатуры и вывод массива Ввод в одной строке и

Ввод с клавиатуры и вывод массива

Ввод в одной строке и Вывод

массива

n=int(input())
A=map(int,input().split(maxsplit = n))
print(n)
for y in A:
print(y, end = ' ' )

Слайд 13

Вывод массива на экран Как список: print ( A ) [1,

Вывод массива на экран

Как список:

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

или так:

print ( *A )

print (1, 2, 3, 4, 5)

Слайд 14

Как обработать все элементы массива? Создание массива: Обработка: N = 5

Как обработать все элементы массива?

Создание массива:
Обработка:

N = 5
A = [0]*N

# обработать

A[0]
# обработать A[1]
# обработать A[2]
# обработать A[3]
# обработать A[4]
Слайд 15

Как обработать все элементы массива? Обработка с переменной: i = 0;

Как обработать все элементы массива?

Обработка с переменной:

i = 0;
# обработать A[i]
i

+= 1
# обработать A[i]
i += 1
# обработать A[i]
i += 1
# обработать A[i]
i += 1
# обработать A[i]

i += 1

Обработка в цикле:

i = 0
while i < N:
# обработать A[i]
i += 1

Цикл с переменной:

for i in range(N):
# обработать A[i]

Слайд 16

Заполнение случайными числами from random import randint N = 10 A

Заполнение случайными числами

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)

или так:

Слайд 17

Перебор элементов Общая схема (можно изменять A[i]): for i in range(N):

Перебор элементов

Общая схема (можно изменять 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 )

Слайд 18

Этапы работы с массивом a=[] n=int (input ("Введи кол-во элементов массива"))

Этапы работы с массивом

a=[]
n=int (input ("Введи кол-во элементов массива"))
for i in

input().split():
a.append(int (i))
for y in a:
print (y, end=" ")
print ()
for i in range (n):
... # действия с a[i]
print ()
for i in range (n):
print (a[i], end=' ‘)

Вывод созданного массива
(1 способ вывода)

Вывод обработанного массива
( 2 способ вывода)

Заполнение массива

Обработка массива

Слайд 19

Три способа создания массива: Заполнить один массив случайными числами, другой -

Три способа создания массива: Заполнить один массив случайными числами, другой - введенными

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

from random import random
N = 10
a = []
b = []
c = []
for i in range(N):
n = int(random() * 100)
a.append(n)
print("Введите числа")
for i in range(N):
n = int(input())
b.append(n)
for i in range(N):
n = a[i] + b[i]
c.append(n)
print(a)
print(b)
print(c)

Слайд 20

Вывод чисел в обратном порядке a = int(input()) b = int(input())

Вывод чисел в обратном порядке

a = int(input())
b = int(input())
a=[i for i

in range (b, a-1, -1)]
for y in a:
print(y)

Ввод чисел от A до B
в обратном порядке

print(*[i for i in range(int(input()))][::-1])

print(*[i for i in range
(int(input("Введи кол-во чисел")))]
[::-1])

Слайд 21

Заполнение случайными числами from random import randint N = 10 A

Заполнение случайными числами

from random import randint
N = 10
A = [ randint(20,100)


for x in range(N)]
for y in A:
print(y,end =' ')
print()
for y in A [::-1]:
print(y, end =' ‘)

Вывод случайных чисел
[20,100] в обратном порядке

Вывод случайных чисел
[20,100]

[::-1]

Слайд 22

Подсчёт количества нужных элементов Задача. В массиве записаны данные о росте

Подсчёт количества нужных элементов

Задача. В массиве записаны данные о росте баскетболистов.

Сколько из них имеет рост больше 180 см, но меньше 190 см?

count = 0
for x in A:
if 180 < x and x < 190:
count += 1

Python:
180 < x < 190

Слайд 23

Сумма элементов массива summa = 0 for x in A: if

Сумма элементов массива

summa = 0
for x in A:
if 180 <

x < 190:
summa += x
print ( summa )

print ( sum(A) )

или так:

Слайд 24

Перебор элементов Среднее арифметическое: count = 0 summa = 0 for

Перебор элементов

Среднее арифметическое:

count = 0
summa = 0
for x in A:
if

180 < x < 190:
count += 1
summa += x
print ( summa/count )

среднее арифметическое

или так:

B = [ x for x in A ]
if 180 < x < 190]
print ( sum(B)/len(B) )

отбираем нужные

Слайд 25

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

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

пробел.

def print_rev(arr,k):
if k<0:
return
else:
print(arr[k],end=' ')
print_rev(arr,k-1)
a=list(map(int,input().split(' ')))
print_rev(a,len(a)-1)

Слайд 26

Программирование на языке Python § 63. Алгоритмы обработки массивов

Программирование на языке Python

§ 63. Алгоритмы обработки массивов

Слайд 27

Поиск в массиве Найти элемент, равный X: i = 0 while

Поиск в массиве

Найти элемент, равный X:

i = 0
while A[i] != X:

i += 1
print ( "A[", i, "]=", X, sep = "" )

i = 0
while i < N and A[i] != X:
i += 1
if i < N:
print ( "A[", i, "]=", X, sep = "" )
else:
print ( "Не нашли!" )

i < N

Слайд 28

Поиск в массиве nX = -1 for i in range (

Поиск в массиве

nX = -1
for i in range ( N ):

if A[i] == X:
nX = i
break
if nX >= 0:
print ( "A[", nX, "]=", X, sep = "" )
else:
print ( "Не нашли!" )

Вариант с досрочным выходом:

break

досрочный выход из цикла

номер найденного элемента

Слайд 29

for i in range ( N ): if A[i] == X:

for i in range ( N ):
if A[i] == X:

print ( "A[", i, "]=", X, sep = "" )
break
else:
print ( "Не нашли!" )

Поиск в массиве

Варианты в стиле Python:

if X in A:
nX = A.index(X)
print ( "A[", nX, "]=", X, sep = "" )
else:
print ( "Не нашли!" )

Слайд 30

Максимальный элемент M = A[0] for i in range(1,N): if A[i]

Максимальный элемент

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 )

Слайд 31

Максимальный элемент и его номер

Максимальный элемент и его номер

Слайд 32

Максимальный элемент и его номер M = max(A) nMax = A.index(M)

Максимальный элемент и его номер

M = max(A)
nMax = A.index(M)
print ( "A[",

nMax, "]=", M, sep = "" )

Вариант в стиле Python:

Слайд 33

Реверс массива «Простое» решение: for i in range( N ): поменять

Реверс массива

«Простое» решение:

for i in range( N ):
поменять местами A[i]

и A[N-1-i]

N//2

остановиться на середине!

Слайд 34

Реверс массива for i in range(N//2): c = A[i] A[i] =

Реверс массива

for i in range(N//2):
c = A[i]
A[i] = A[N-1-i]

A[N-1-i] = c

Варианты в стиле Python:

for i in range(N//2):
A[i], A[N-i-1]= A[N-i-1], A[i]

A.reverse()

Слайд 35

Циклический сдвиг элементов «Простое» решение: c = A[0] for i in

Циклический сдвиг элементов

«Простое» решение:

c = A[0]
for i in range(N-1):
A[i] =

A[i+1]
A[N-1] = c
Слайд 36

Срезы в Python A[1:3] [12, 5] A[2:3] [5] A[:3] [7, 12,

Срезы в Python

A[1:3]

[12, 5]

A[2:3]

[5]


A[:3]

[7, 12, 5]

A[0:3]

с начала

A[3:N-2]

[8,…,18,34]

A[3:]

[8,…,18,34,40,23]

A[3:N]

до конца

A[:]

[7,12,5,8,…,18,34,40,23]

копия массива

Слайд 37

Срезы в Python – отрицательные индексы A[1:-1] [12,5,8,…,18,34,40] A[1:N-1] A[-4:-2] [18, 34] A[N-4:N-2]

Срезы в Python – отрицательные индексы

A[1:-1]

[12,5,8,…,18,34,40]

A[1:N-1]

A[-4:-2]

[18, 34]

A[N-4:N-2]

Слайд 38

Срезы в Python – шаг A[1:6:2] [12, 8, 18] A[::3] [7,

Срезы в Python – шаг

A[1:6:2]

[12, 8, 18]


A[::3]

[7, 8, 34]

A[8:2:-2]

[23, 34, 76]

A[::-1]

[23,40,34,18,76,8,5,12,7]

реверс!

A.reverse()

шаг

Слайд 39

Отбор нужных элементов Простое решение: Задача. Отобрать элементы массива A, удовлетворяющие

Отбор нужных элементов

Простое решение:

Задача. Отобрать элементы массива A, удовлетворяющие некоторому условию,

в массив B.

B = []
сделать для i от 0 до N-1
если условие выполняется для A[i] то
добавить A[i] к массиву B

B = []
for x in A:
if x % 2 == 0:
B.append(x)

добавить x в конец массива B

Слайд 40

Отбор нужных элементов Решение в стиле Python: Задача. Отобрать элементы массива

Отбор нужных элементов

Решение в стиле Python:

Задача. Отобрать элементы массива A, удовлетворяющие

некоторому условию, в массив B.

B = [ x for x in A ] 
if x % 2 == 0  ]

если x – чётное число

перебрать все элементы A

Слайд 41

Особенности работы со списками A = [1, 2, 3] B =

Особенности работы со списками

A = [1, 2, 3]
B = A

[1, 2,

3]

A

B

A[0] = 0

A = [1, 2, 3]
B = A[:]

копия массива A

[1, 2, 3]

A

[1, 2, 3]

B

A[0] = 0

Слайд 42

Копирование списков «Поверхностное» копирование: import copy A = [1, 2, 3]

Копирование списков

«Поверхностное» копирование:

import copy
A = [1, 2, 3]
B = copy.copy(A)

A =

[1, 2, 3]
B = [4, 5, 6]
C = [A, B]
D = copy.copy(C)
C[0][0] = 0

0

«Глубокое» копирование:

D = copy.deepcopy(C)

Слайд 43

Программирование на языке Python § 64. Сортировка

Программирование на языке Python

§ 64. Сортировка

Слайд 44

Что такое сортировка? Сортировка – это расстановка элементов массива в заданном

Что такое сортировка?

Сортировка – это расстановка элементов массива в заданном порядке.

…по

возрастанию, убыванию, последней цифре, сумме делителей, по алфавиту, …

Алгоритмы:
простые и понятные, но неэффективные для больших массивов
метод пузырька
метод выбора
сложные, но эффективные
«быстрая сортировка» (QuickSort)
сортировка «кучей» (HeapSort)
сортировка слиянием (MergeSort)
пирамидальная сортировка

Слайд 45

Метод пузырька (сортировка обменами) Идея: пузырек воздуха в стакане воды поднимается

Метод пузырька (сортировка обменами)

Идея: пузырек воздуха в стакане воды поднимается со

дна вверх.
Для массивов – самый маленький («легкий» элемент перемещается вверх («всплывает»).

сравниваем два соседних элемента; если они стоят «неправильно», меняем их местами
за 1 проход по массиву один элемент (самый маленький) становится на свое место

1-й проход:

Слайд 46

Метод пузырька 2-й проход: 3-й проход: 4-й проход:

Метод пузырька

2-й проход:

3-й проход:

4-й проход:

Слайд 47

Метод пузырька 1-й проход: сделать для j от N-2 до 0

Метод пузырька

1-й проход:

сделать для j от N-2 до 0 шаг -1

если A[j+1]< A[j] то
# поменять местами A[j] и A[j+1]

2-й проход:

сделать для j от N-2 до 1 шаг -1
если A[j+1]< A[j] то
# поменять местами A[j] и A[j+1]

1

единственное отличие!

Слайд 48

Метод пузырька 1-й проход: for j in range(N-2, -1 ,-1): if

Метод пузырька

1-й проход:

for j in range(N-2, -1 ,-1):
if A[j+1]< A[j]:
# поменять

местами A[j] и A[j+1]

2-й проход:

for j in range(N-2,  0 ,-1):
if A[j+1]< A[j]:
# поменять местами A[j] и A[j+1]

0

единственное отличие!

от N-2 до 0 шаг -1

Слайд 49

Метод пузырька for i in range(N-1): for j in range(N-2, i-1

Метод пузырька

for i in range(N-1):
for j in range(N-2, i-1 ,-1):

if A[j+1] < A[j]:
A[j], A[j+1] = A[j+1], A[j]

i-1

Слайд 50

a=[] n=int (input ("Введи кол-во элементов массива")) for i in input().split():

a=[]
n=int (input ("Введи кол-во элементов массива"))
for i in input().split():
a.append(int (i))
for

y in a:
print (y, end=" ")
print ()
for i in range (n-1):
for j in range (n-2,i-1,-1):
if a[j+1] a[j],a[j+1]=a[j+1],a[j]
print ()
for i in range (n):
print (a[i], end=' ')
print ()
for y in a:
print (y, end=" ")
Слайд 51

Метод выбора (минимального элемента) Идея: найти минимальный элемент и поставить его

Метод выбора (минимального элемента)

Идея: найти минимальный элемент и поставить его на

первое место.

for i in range(N-1):
найти номер nMin минимального элемента из A[i]..A[N]
if i != nMin:
поменять местами A[i] и A[nMin]

Слайд 52

Метод выбора (минимального элемента) for i in range(N-1): if i!= nMin:

Метод выбора (минимального элемента)

for i in range(N-1):
if i!= nMin:
A[i], A[nMin]

= A[nMin], A[i]

nMin = i
for j in range(i+1,N):
if A[j] < A[nMin]:
nMin = j

Слайд 53

Сортировка слиянием Слияние отсортированных массивов: A B С Na = len(A);

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

Слияние отсортированных массивов:

A

B

С

Na = len(A); Nb = len(B)
iA = iB

= 0; C = []
while iA < Na and iB < Nb:
if A[iA] <= B[iB]:
C.append(A[iA]); iA += 1
else:
C.append(B[iB]); iB += 1
C = С + A[iA:] + B[iВ:]

пока оба массива непустые

добавить остаток

Слайд 54

Сортировка слиянием def mergeSort( A ): if len(A) mid = len(A)

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

def mergeSort( A ):
if len(A) <= 1: return
mid

= len(A) // 2
L = A[:mid]
R = A[mid:]
mergeSort(L)
mergeSort(R)
C = merge(L, R)
for i in range(len(A)):
A[i] = C[i]

слияние

выход из рекурсии

копируем результат в массив A

Слайд 55

Сортировка слиянием def merge( A, B ): Na = len(A); Nb

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

def merge( A, B ):
Na = len(A); Nb =

len(B)
iA = iB = 0; C = []
while iA < Na and iB < Nb:
if A[iA] <= B[iB]:
C.append(A[iA]); iA += 1
else:
C.append(B[iB]); iB += 1
C = С + A[iA:] + B[iВ:]
return C

Процедура слияния:

Слайд 56

Сортировка слиянием задача разбивается на несколько подзадач меньшего размера; эти подзадачи

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

задача разбивается на несколько подзадач меньшего размера;
эти подзадачи решаются с

помощью рекурсивных вызовов того же (или другого) алгоритма;
решения подзадач объединяются, и получается решение исходной задачи.

«Разделяй и властвуй» (divide and conquer):

работает быстро

нужен дополнительный массив

Слайд 57

Быстрая сортировка (QuickSort) разделение Медиана – такое значение X, что слева

Быстрая сортировка (QuickSort)

разделение

Медиана – такое значение X, что слева и справа

от него в отсортированном массиве стоит одинаковое число элементов (долго искать …).
Слайд 58

Быстрая сортировка (QuickSort) B1: B2: > X BX: = X import

Быстрая сортировка (QuickSort)

B1: < X

B2: > X

BX: = X

import random
def qSort

( A ):
if len(A) <= 1: return A
X = random.choice(A)
B1 = [ b for b in A if b < X ]
BX = [ b for b in A if b == X ]
B2 = [ b for b in A if b > X ]
return qSort(B1) + BX + qSort(B2)

Asort = qSort( A )

расход памяти!

Слайд 59

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

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

Слайд 60

Быстрая сортировка «на месте» Шаг 2: переставить элементы так: при сортировке

Быстрая сортировка «на месте»

Шаг 2: переставить элементы так:
при сортировке

элементы не покидают « свою область»!

Шаг 1: выбрать некоторый элемент массива X

Шаг 3: так же отсортировать две получившиеся области

Разделяй и властвуй (англ. divide and conquer)

Слайд 61

Быстрая сортировка Разделение: выбрать любой элемент массива (X=67) установить L =

Быстрая сортировка

Разделение:
выбрать любой элемент массива (X=67)
установить L = 0, R

= N-1
увеличивая L, найти первый элемент A[L], который >= X (должен стоять справа)
уменьшая R, найти первый элемент A[R], который <= X (должен стоять слева)
если L<=R то поменять местами A[L] и A[R] и перейти к п. 3 иначе стоп.

L

R

L

R

78

44

44

78

Слайд 62

Быстрая сортировка

Быстрая сортировка

Слайд 63

Быстрая сортировка N = 7 A = [0]*N # заполнить массив

Быстрая сортировка

N = 7
A = [0]*N
# заполнить массив
qSort( A, 0,

N-1 ) # сортировка
# вывести результат

Основная программа:

массив

начало

конец

Слайд 64

Быстрая сортировка def qSort ( A, nStart, nEnd ): if nStart

Быстрая сортировка

def qSort ( A, nStart, nEnd ):
if nStart >=

nEnd: return
L = nStart; R = nEnd
X = A[(L+R)//2]
while L <= R:
while A[L] < X: L += 1
while A[R] > X: R -= 1
if L <= R:
A[L], A[R] = A[R], A[L]
L += 1; R -= 1
qSort ( A, nStart, R )
qSort ( A, L, nEnd )

qSort ( A, nStart, R )
qSort ( A, L, nEnd )

рекурсивные вызовы

while A[L] < X: L += 1
while A[R] > X: R -= 1

разделение на 2 части

массив

начало

конец

меняем местами

Слайд 65

Быстрая сортировка Случайный выбор элемента-разделителя: from random import randint def qSort

Быстрая сортировка

Случайный выбор элемента-разделителя:

from random import randint
def qSort ( A,

nStart, nEnd ):
...
X = A[randint(L,R)]
...

X = A[randint(L,R)]

или так:

from random import choice
def qSort ( A, nStart, nEnd ):
...
X = choice ( A[L:R+1] )
...

X = choice ( A[L:R+1] )

Слайд 66

Сортировка в Python B = sorted( A ) алгоритм Timsort По

Сортировка в Python

B = sorted( A )

алгоритм Timsort

По возрастанию:

B =

sorted( A, reverse = True )

По убыванию:

reverse = True

По последней цифре:

def lastDigit ( n ):
return n % 10
B = sorted( A, key = lastDigit )

key = lastDigit

или так:

B = sorted( A, key = lambda x: x % 10  )

lambda x: x % 10

«лямбда»-функция
(функция без имени)

Слайд 67

Сортировка в Python – на месте A.sort() По возрастанию: A.sort (

Сортировка в Python – на месте

A.sort()

По возрастанию:

A.sort ( reverse =

True )

По убыванию:

reverse = True

По последней цифре:

def lastDigit ( n ):
return n % 10
A.sort ( key = lastDigit )

key = lastDigit

или так:

A.sort( key = lambda x: x % 10  )

lambda x: x % 10

Слайд 68

Программирование на языке Python § 65. Двоичный поиск

Программирование на языке Python

§ 65. Двоичный поиск

Слайд 69

Двоичный поиск X = 7 X 8 4 X > 4

Двоичный поиск

X = 7

X < 8

8

4

X > 4

6

X > 6

Выбрать средний

элемент A[c] и сравнить с X.
Если X == A[c], то нашли (стоп).
Если X < A[c], искать дальше в первой половине.
Если X > A[c], искать дальше во второй половине.
Слайд 70

Двоичный поиск X = 44

Двоичный поиск

X = 44

Слайд 71

Двоичный поиск L = 0; R = N # начальный отрезок

Двоичный поиск

L = 0; R = N # начальный отрезок
while

L < R-1:
c = (L+R) // 2 # нашли середину
if X < A[c]: # сжатие отрезка
R = c
else: L = c
if A[L] == X:
print ( "A[", L, "]=", X, sep = "" )
else:
print ( "Не нашли!" )
Слайд 72

Двоичный поиск скорость выше, чем при линейном поиске нужна предварительная сортировка Число сравнений:

Двоичный поиск

скорость выше, чем при линейном поиске

нужна предварительная сортировка

Число сравнений: