What's an algorithm? - David J. Malan

Твой мозг может использовать алгоритмы — Дэвид Мелен

2,570,249 views

2013-05-20 ・ TED-Ed


New videos

What's an algorithm? - David J. Malan

Твой мозг может использовать алгоритмы — Дэвид Мелен

2,570,249 views ・ 2013-05-20

TED-Ed


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

00:00
Translator: Andrea McDonough Reviewer: Jessica Ruby
0
0
7000
Переводчик: Jane Goryanaya Редактор: Aygul Zagidullina
00:15
What's an algorithm?
1
15483
1348
Что такое алгоритм?
00:16
In computer science,
2
16831
831
В компьютерной сфере —
00:17
an algorithm is a set of instructions
3
17662
1754
это набор инструкций
00:19
for solving some problem, step-by-step.
4
19416
2689
для пошагового решения задачи.
00:22
Typically, algorithms are executed by computers,
5
22105
2272
Как правило, алгоритмы выполняются компьютерами,
00:24
but we humans have algorithms as well.
6
24377
2167
но у нас, людей, тоже есть свои алгоритмы.
00:26
For instance, how would you go about counting
7
26544
1853
Например, как ты подсчитываешь
00:28
the number of people in a room?
8
28397
1820
количество людей в комнате?
00:30
Well, if you're like me,
9
30217
1215
Если ты похож на меня,
00:31
you probably point at each person,
10
31432
1496
то ты, наверное, тыкаешь в каждого
00:32
one at a time,
11
32928
960
по одному разу
00:33
and count up from 0:
12
33888
1837
и считаешь, начиная с нуля.
00:35
1, 2, 3, 4 and so forth.
13
35725
2873
1,2,3,4 и так далее.
00:38
Well, that's an algorithm.
14
38598
1113
Это алгоритм.
00:39
In fact, let's try to express it
15
39711
1134
Давай попробуем описать его
00:40
a bit more formally in pseudocode,
16
40845
2229
более формально, используя псевдокод —
00:43
English-like syntax
17
43074
831
00:43
that resembles a programming language.
18
43905
2124
синтаксис, который похож на английский язык
и на язык программирования.
00:46
Let n equal 0.
19
46029
1767
Пусть n равняется 0.
00:47
For each person in room, set n = n + 1.
20
47796
4792
Для каждого человека в комнате установим N=N+1.
00:52
How to interpret this pseudocode?
21
52588
1497
Как же понять этот псевдокод?
00:54
Well, line 1 declares, so to speak,
22
54085
1836
Первая строчка объявляет
00:55
a variable called n
23
55921
1416
переменную N
00:57
and initializes its value to zero.
24
57337
2379
и присваивает ей значение ноль.
00:59
This just means that at the beginning of our algorithm,
25
59716
2335
Это означает, что в начале нашего алгоритма
01:02
the thing with which we're counting
26
62051
1584
количество вещей, которые мы считаем,
01:03
has a value of zero.
27
63635
1668
равняется нулю.
01:05
After all, before we start counting,
28
65303
1336
В конце концов, ведь мы ещё
01:06
we haven't counted anything yet.
29
66639
1669
ничего не посчитали.
01:08
Calling this variable n is just a convention.
30
68308
2248
Название переменной n — условность.
01:10
I could have called it almost anything.
31
70556
2005
Я мог бы назвать её как хочу.
01:12
Now, line 2 demarks the start of loop,
32
72561
2086
Вторая строчка определяет начало цикла, или последовательности шагов,
01:14
a sequence of steps that will repeat some number of times.
33
74647
3044
которые будут повторяться некоторое время.
01:17
So, in our example, the step we're taking
34
77691
1794
В нашем примере, шаг —
01:19
is counting people in the room.
35
79485
1734
это подсчёт людей в комнате.
01:21
Beneath line 2 is line 3,
36
81219
1763
Под второй строчкой находится третья,
01:22
which describes exactly how we'll go about counting.
37
82982
2511
которая описывает, как мы будем считать.
01:25
The indentation implies that it's line 3
38
85493
2250
Наращивание предполагает,
01:27
that will repeat.
39
87743
1222
что третья строчка будет повторяться.
01:28
So, what the pseudocode is saying
40
88965
1219
Псевдокод показывает,
01:30
is that after starting at zero,
41
90184
2066
что мы начинаем с нуля
01:32
for each person in the room,
42
92250
1710
и для каждого человека в комнате
01:33
we'll increase n by 1.
43
93960
2218
увеличиваем N на 1.
01:36
Now, is this algorithm correct?
44
96178
2329
Правильно ли работает этот алгоритм?
01:38
Well, let's bang on it a bit.
45
98507
1608
Ну что же, проверим.
01:40
Does it work if there are 2 people in the room?
46
100115
2826
Работает ли алгоритм, когда в комнате 2 человека?
01:42
Let's see.
47
102941
780
Давай посмотрим.
01:43
In line 1, we initialize n to zero.
48
103721
2085
В первой строчке мы присваиваем N ноль
01:45
For each of these two people,
49
105806
1302
Для каждого из этих двух людей
01:47
we then increment n by 1.
50
107108
2168
мы увеличиваем значение N на 1.
01:49
So, in the first trip through the loop,
51
109276
1582
При первом обходе цикла
01:50
we update n from zero to 1,
52
110858
2005
значение N увеличивается с 0 до 1.
01:52
on the second trip through that same loop,
53
112863
1655
При втором обходе
01:54
we update n from 1 to 2.
54
114518
2249
N увеличивается с 1 до 2.
01:56
And so, by this algorithm's end, n is 2,
55
116767
3341
В конце алгоритма N равняется 2,
02:00
which indeed matches the number of people in the room.
56
120108
2113
что действительно соответствует количеству людей в комнате.
02:02
So far, so good.
57
122221
1223
Пока что, всё хорошо.
02:03
How about a corner case, though?
58
123444
1752
Как насчёт исключительной ситуации?
02:05
Suppose that there are zero people in the room,
59
125196
1964
Предположим, в комнате нет людей,
02:07
besides me, who's doing the counting.
60
127160
2347
кроме меня, проводящего вычисления.
02:09
In line 1, we again initialize n to zero.
61
129507
3010
В первой строчке присваиваем N значение 1.
02:12
This time, though, line 3 doesn't execute at all
62
132517
2522
В этом случае третья строчка вообще не выполняется,
02:15
since there isn't a person in the room,
63
135039
1880
так как в комнате нет людей.
02:16
and so, n remains zero,
64
136919
1624
Поэтому переменная N остаётся равной нулю,
02:18
which indeed matches the number of people in the room.
65
138543
2359
что действительно соответствует истине.
02:20
Pretty simple, right?
66
140902
906
Довольно просто, не так ли?
02:21
But counting people one a time is pretty inefficient, too, no?
67
141808
3216
Но ведь неэффективно считать по одному человеку за раз.
02:25
Surely, we can do better!
68
145024
1568
Можно ведь по-другому!
02:26
Why not count two people at a time?
69
146592
1866
Почему бы не посчитать по два человека?
02:28
Instead of counting 1, 2, 3, 4, 5, 6, 7, 8, and so forth,
70
148458
5099
Вместо 1,2,3,4,5,6,7,8 и так далее,
02:33
why not count
71
153557
918
почему бы не считать
02:34
2, 4, 6, 8, and so on?
72
154475
2127
2,4,6,8 и так далее?
02:36
It even sounds faster, and it surely is.
73
156602
2418
Это даже звучит быстрее, что действительно так.
02:39
Let's express this optimization in pseudocode.
74
159020
2835
Давай изобразим это, используя псевдокод.
02:41
Let n equal zero.
75
161855
1462
Пусть N равняется нулю.
02:43
For each pair of people in room,
76
163317
1997
Для каждых двух людей в комнате
02:45
set n = n + 2.
77
165314
2588
установим N=N+2.
02:47
Pretty simple change, right?
78
167902
1673
Довольно простая замена, не так ли?
02:49
Rather than count people one at a time,
79
169575
1791
Чтобы не считать по одному человеку,
02:51
we instead count them two at a time.
80
171366
2343
будем считать сразу по два.
02:53
This algorithm's thus twice as fast as the last.
81
173709
2815
Этот алгоритм работает в два раза быстрее, чем предыдущий.
02:56
But is it correct?
82
176524
1346
Но правильно ли?
02:57
Let's see.
83
177870
794
Давай узнаем.
02:58
Does it work if there are 2 people in the room?
84
178664
2125
Работает ли он, если в комнате 2 человека?
03:00
In line 1, we initialize n to zero.
85
180789
2342
В первой строчке, присваиваем N значение ноль.
03:03
For that one pair of people, we then increment n by 2.
86
183131
3268
Для двух людей увеличиваем N до 2.
03:06
And so, by this algorithm's end, n is 2,
87
186399
2522
В конце алгоритма N равняется 2,
03:08
which indeed matches the number of people in the room.
88
188921
2382
что действительно соответствует истине.
03:11
Suppose next that there are zero people in the room.
89
191303
2412
Предположим, что в комнате не людей.
03:13
In line 1, we initialize n to zero.
90
193715
2587
В первой строчке присваиваем N значение ноль.
03:16
As before, line 3 doesn't execute at all
91
196302
2080
Как и раньше, третья строчка вообще не выполняется.
03:18
since there aren't any pairs of people in the room,
92
198382
2342
Так как в комнате нет двух людей,
03:20
and so, n remains zero,
93
200724
1686
переменная N остаётся равной нулю,
03:22
which indeed matches the number of people in the room.
94
202410
2773
что действительно истинно.
03:25
But what if there are 3 people in the room?
95
205183
2372
Но что делать, если в комнате 3 человека?
03:27
How does this algorithm fair?
96
207555
1937
Как будет работать этот алгоритм?
03:29
Let's see.
97
209492
829
Давай посмотрим.
03:30
In line 1, we initialize n to zero.
98
210321
2670
В первой строчке присваиваем N значение ноль.
03:32
For a pair of those people,
99
212991
1290
Для двух людей
03:34
we then increment n by 2,
100
214281
1916
увеличиваем N до 2.
03:36
but then what?
101
216197
992
Но что потом?
03:37
There isn't another full pair of people in the room,
102
217189
2262
Ведь теперь в комнате есть только один человек,
03:39
so line 2 no longer applies.
103
219451
2210
так что вторая строчка не выполняется.
03:41
And so, by this algorithm's end,
104
221661
1669
На этом алгоритм завершает работу.
03:43
n is still 2, which isn't correct.
105
223330
2596
N до сих пор равняется 2, что неверно.
03:45
Indeed this algorithm is said to be buggy
106
225926
2332
И действительно, этот алгоритм неверный.
03:48
because it has a mistake.
107
228258
1148
В нем есть ошибка.
03:49
Let's redress with some new pseudocode.
108
229406
1896
Давай исправим это в новом псевдокоде.
03:51
Let n equal zero.
109
231302
1793
Пусть N равняется нулю.
03:53
For each pair of people in room,
110
233095
2123
Для каждых двух людей в комнате
03:55
set n = n + 2.
111
235218
2422
установим N=N+2.
03:57
If 1 person remains unpaired,
112
237640
2459
Если остаётся один человек,
04:00
set n = n + 1.
113
240099
2376
тогда N=N+1.
04:02
To solve this particular problem,
114
242475
1507
Чтобы решить конкретно эту проблему,
04:03
we've introduced in line 4 a condition,
115
243982
2249
мы добавили условие в четвёртой строчке,
04:06
otherwise known as a branch,
116
246231
1835
или, как ещё говорят, «ветку»,
04:08
that only executes if there is one person
117
248066
2253
которая выполняется только тогда,
04:10
we could not pair with another.
118
250319
1876
когда остаётся один человек.
04:12
So now, whether there's 1 or 3
119
252195
2065
Вот сейчас, даже если в комнате 1 или 3
04:14
or any odd number of people in the room,
120
254260
2273
или любое нечётное количество людей,
04:16
this algorithm will now count them.
121
256533
2288
этот алгоритм всё равно будет их считать.
04:18
Can we do even better?
122
258821
1345
Может можно улучшить алгоритм?
04:20
Well, we could count in 3's or 4's or even 5's and 10's,
123
260166
3294
Мы можем считать по 2, 3 или даже по 5 или по 10 человек,
04:23
but beyond that it's going to get
124
263460
1300
но будет всё труднее и труднее
04:24
a little bit difficult to point.
125
264760
1870
считать это всё.
04:26
At the end of the day,
126
266630
937
В итоге, алгоритмы —
04:27
whether executed by computers or humans,
127
267567
2264
это наборы инструкций,
04:29
algorithms are just a set of instructions
128
269831
1960
выполняемых компьютерами или людьми,
04:31
with which to solve problems.
129
271791
1838
предназначенные для решения задач.
04:33
These were just three.
130
273629
1743
Мы рассмотрели только три.
04:35
What problem would you solve with an algorithm?
131
275372
2982
А какие задачи ты бы решил с помощью алгоритма?
Об этом сайте

Этот сайт познакомит вас с видеороликами YouTube, полезными для изучения английского языка. Вы увидите уроки английского языка, преподаваемые высококлассными учителями со всего мира. Дважды щелкните по английским субтитрам, отображаемым на каждой странице видео, чтобы воспроизвести видео оттуда. Субтитры прокручиваются синхронно с воспроизведением видео. Если у вас есть какие-либо комментарии или пожелания, пожалуйста, свяжитесь с нами, используя эту контактную форму.

https://forms.gle/WvT1wiN1qDtmnspy7