What's an algorithm? - David J. Malan

Мозъкът ви може да решава алгоритми - Дейвид Д. Малан

2,582,025 views

2013-05-20 ・ TED-Ed


New videos

What's an algorithm? - David J. Malan

Мозъкът ви може да решава алгоритми - Дейвид Д. Малан

2,582,025 views ・ 2013-05-20

TED-Ed


Моля, кликнете два пъти върху английските субтитри по-долу, за да пуснете видеото.

00:00
Translator: Andrea McDonough Reviewer: Jessica Ruby
0
0
7000
Translator: Anton Hikov Reviewer: Yavor Ivanov
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
и ще броите от 0:
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
Ами, ред 1 декларира, така да се каже,
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
Сега, ред 2 обозначава началото на цикъл,
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
Под ред 2 е ред 3,
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
Абзацът предполага, че ред 3 е този,
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
В ред 1, ние инициализираме 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
В ред 1, отново инициализираме n с нула.
02:12
This time, though, line 3 doesn't execute at all
62
132517
2522
Този път, обаче, ред 3 не се изпълнява въобще,
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
В ред 1, ние инициализираме 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
В ред 1, ние инициализираме n с нула.
03:16
As before, line 3 doesn't execute at all
91
196302
2080
Както преди, ред 3 не се изпълнява въобще,
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
В ред 1, ние инициализираме 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
така ред 2 вече не се прилага.
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
Ако 1 човек остане сам, без двойка,
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
ние въведохме в ред 4 условие,
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
Ами, можем да броим по 3-ки или 4-ки или дори 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