What's an algorithm? - David J. Malan

Creierul poate rezolva algoritmi - David J. Malan

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

TED-Ed


Vă rugăm să faceți dublu clic pe subtitrările în limba engleză de mai jos pentru a reda videoclipul.

00:00
Translator: Andrea McDonough Reviewer: Jessica Ruby
0
0
7000
Traducător: Denise RQ Corector: Ariana Bleau Lugo
00:15
What's an algorithm?
1
15483
1348
Ce este un algoritm?
00:16
In computer science,
2
16831
831
În informatică,
00:17
an algorithm is a set of instructions
3
17662
1754
un algoritm e un set de instrucţiuni
00:19
for solving some problem, step-by-step.
4
19416
2689
pentru a rezolva o problemă pas cu pas.
De obicei, algoritmii sunt executați de computere,
00:22
Typically, algorithms are executed by computers,
5
22105
2272
00:24
but we humans have algorithms as well.
6
24377
2167
dar şi noi îi folosim.
00:26
For instance, how would you go about counting
7
26544
1853
De exemplu, cum număraţi
00:28
the number of people in a room?
8
28397
1820
oamenii dintr-o cameră?
00:30
Well, if you're like me,
9
30217
1215
Dacă faci ca mine,
00:31
you probably point at each person,
10
31432
1496
arăți cu degetul fiecare persoană pe rând
00:32
one at a time,
11
32928
960
00:33
and count up from 0:
12
33888
1837
şi numeri de la 0:
00:35
1, 2, 3, 4 and so forth.
13
35725
2873
1, 2, 3, 4 etc.
00:38
Well, that's an algorithm.
14
38598
1113
Ei bine, ăsta-i un algoritm.
00:39
In fact, let's try to express it
15
39711
1134
Hai să-l exprimăm într-un peseudocod,
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
o sintaxă asemănătoare cu limbajul de programare.
00:46
Let n equal 0.
19
46029
1767
Îi atribuim lui N valoarea 0.
00:47
For each person in room, set n = n + 1.
20
47796
4792
Pentru fiecare persoană din cameră, stabilim N = N+1.
00:52
How to interpret this pseudocode?
21
52588
1497
Cum interpretăm pseudocodul?
00:54
Well, line 1 declares, so to speak,
22
54085
1836
Linia 1 declară o variabilă numită N
00:55
a variable called n
23
55921
1416
00:57
and initializes its value to zero.
24
57337
2379
şi iniţializează valoarea sa la zero.
00:59
This just means that at the beginning of our algorithm,
25
59716
2335
Asta înseamnă că la începutul algoritmului,
01:02
the thing with which we're counting
26
62051
1584
lucrul pe care-l numărăm
01:03
has a value of zero.
27
63635
1668
are valoarea zero.
La urma urmei, înainte să începem să numărăm,
01:05
After all, before we start counting,
28
65303
1336
01:06
we haven't counted anything yet.
29
66639
1669
nu am numărat încă nimic.
01:08
Calling this variable n is just a convention.
30
68308
2248
Numele N dat variabilei e doar o convenţie.
01:10
I could have called it almost anything.
31
70556
2005
Aş fi putut-o numi oricum.
01:12
Now, line 2 demarks the start of loop,
32
72561
2086
Linia 2 indică începutul unei iterări,
01:14
a sequence of steps that will repeat some number of times.
33
74647
3044
o secvenţă de paşi care se repetă de un număr de ori.
01:17
So, in our example, the step we're taking
34
77691
1794
În exemplul nostru, secvența constă
01:19
is counting people in the room.
35
79485
1734
în a număra oamenii din cameră.
01:21
Beneath line 2 is line 3,
36
81219
1763
Sub linia 2 este linia 3,
01:22
which describes exactly how we'll go about counting.
37
82982
2511
care descrie exact cum vom număra.
01:25
The indentation implies that it's line 3
38
85493
2250
Indentarea marchează că linia 3 se va repeta.
01:27
that will repeat.
39
87743
1222
01:28
So, what the pseudocode is saying
40
88965
1219
Pseudocodul ne spune că după ce începem cu zero,
01:30
is that after starting at zero,
41
90184
2066
01:32
for each person in the room,
42
92250
1710
pentru fiecare persoană din cameră,
01:33
we'll increase n by 1.
43
93960
2218
vom incrementa valoarea lui N cu 1.
01:36
Now, is this algorithm correct?
44
96178
2329
Este acest algorim corect?
01:38
Well, let's bang on it a bit.
45
98507
1608
Să vedem.
01:40
Does it work if there are 2 people in the room?
46
100115
2826
Funcţionează dacă sunt 2 oameni în cameră?
01:42
Let's see.
47
102941
780
Să vedem.
01:43
In line 1, we initialize n to zero.
48
103721
2085
În linia 1 îi dăm lui N valoarea zero.
01:45
For each of these two people,
49
105806
1302
Pentru fiecare dintre cei doi oameni,
01:47
we then increment n by 1.
50
107108
2168
îl incrementăm pe N cu 1.
01:49
So, in the first trip through the loop,
51
109276
1582
Deci la prima trecere prin buclă,
01:50
we update n from zero to 1,
52
110858
2005
îl actualizăm pe N de la zero la 1,
01:52
on the second trip through that same loop,
53
112863
1655
la a 2-a trecere prin bucla de iterare
01:54
we update n from 1 to 2.
54
114518
2249
îl actualizăm pe N de la 1 la 2.
01:56
And so, by this algorithm's end, n is 2,
55
116767
3341
Deci la sfârşitul algoritmului, N este 2,
ceea ce corespunde cu numărul de oameni din cameră.
02:00
which indeed matches the number of people in the room.
56
120108
2113
02:02
So far, so good.
57
122221
1223
Până aici e bine.
02:03
How about a corner case, though?
58
123444
1752
Dar ce facem în cazul limită?
02:05
Suppose that there are zero people in the room,
59
125196
1964
Presupunem că există zero oameni în cameră,
02:07
besides me, who's doing the counting.
60
127160
2347
pe mine nu mă număr.
02:09
In line 1, we again initialize n to zero.
61
129507
3010
În linia 1 iniţializăm pe N la 0.
02:12
This time, though, line 3 doesn't execute at all
62
132517
2522
Deci linia 3 nu se execută
deoarece nu există nicio persoană în cameră
02:15
since there isn't a person in the room,
63
135039
1880
02:16
and so, n remains zero,
64
136919
1624
şi astfel N rămâne zero,
02:18
which indeed matches the number of people in the room.
65
138543
2359
care se potriveşte cu numărul de oameni din cameră.
02:20
Pretty simple, right?
66
140902
906
Simplu, nu?
02:21
But counting people one a time is pretty inefficient, too, no?
67
141808
3216
Dar numărarea oamenilor pe rând este ineficientă.
02:25
Surely, we can do better!
68
145024
1568
Se poate mai bine!
02:26
Why not count two people at a time?
69
146592
1866
De ce să nu numărăm doi dintr-odată?
02:28
Instead of counting 1, 2, 3, 4, 5, 6, 7, 8, and so forth,
70
148458
5099
În loc să numărăm 1, 2, 3, 4, 5, 6, 7, 8 ş.a.m.d.,
02:33
why not count
71
153557
918
numărăm 2, 4, 6, 8 etc.
02:34
2, 4, 6, 8, and so on?
72
154475
2127
02:36
It even sounds faster, and it surely is.
73
156602
2418
Pare mai rapid și chiar este.
02:39
Let's express this optimization in pseudocode.
74
159020
2835
Să exprimăm această optimizare în pseudocod.
02:41
Let n equal zero.
75
161855
1462
Îi atribuim lui N valoarea 0.
02:43
For each pair of people in room,
76
163317
1997
Pentru fiecare pereche din cameră,
02:45
set n = n + 2.
77
165314
2588
îl facem pe N = N+2.
02:47
Pretty simple change, right?
78
167902
1673
Simplu, nu?
02:49
Rather than count people one at a time,
79
169575
1791
În loc să numărăm oamenii unul câte unul,
02:51
we instead count them two at a time.
80
171366
2343
numărăm doi o dată.
02:53
This algorithm's thus twice as fast as the last.
81
173709
2815
Acest algoritm e de două ori mai rapid decât primul.
02:56
But is it correct?
82
176524
1346
Dar este corect?
02:57
Let's see.
83
177870
794
Să vedem.
02:58
Does it work if there are 2 people in the room?
84
178664
2125
Funcționează dacă sunt 2 oameni în cameră?
03:00
In line 1, we initialize n to zero.
85
180789
2342
În linia 2, îl iniţializăm pe N la 0.
03:03
For that one pair of people, we then increment n by 2.
86
183131
3268
Pentru acea pereche de oameni, îl incrementăm pe N cu 2.
03:06
And so, by this algorithm's end, n is 2,
87
186399
2522
Şi astfel, la sfârşitul algoritmului, N este 2,
03:08
which indeed matches the number of people in the room.
88
188921
2382
care-i într-adevăr egal cu numărul de oameni din cameră.
03:11
Suppose next that there are zero people in the room.
89
191303
2412
Presupunem acum că sunt zero oameni în cameră.
03:13
In line 1, we initialize n to zero.
90
193715
2587
În linia 1, iniţializăm pe N la 0.
03:16
As before, line 3 doesn't execute at all
91
196302
2080
Ca înainte, linia 3 nu se execută
03:18
since there aren't any pairs of people in the room,
92
198382
2342
deoarece nu există nicio pereche de oameni în cameră,
03:20
and so, n remains zero,
93
200724
1686
şi astfel, N rămâne 0,
03:22
which indeed matches the number of people in the room.
94
202410
2773
care se potriveşte cu realitatea din cameră.
03:25
But what if there are 3 people in the room?
95
205183
2372
Dar dacă sunt 3 oameni în cameră?
03:27
How does this algorithm fair?
96
207555
1937
Cât e de corect algoritmul?
03:29
Let's see.
97
209492
829
Să vedem.
03:30
In line 1, we initialize n to zero.
98
210321
2670
În linia 1, iniţializăm pe N la 0.
03:32
For a pair of those people,
99
212991
1290
Pentru o pereche de oameni,
03:34
we then increment n by 2,
100
214281
1916
creştem pe N cu 2, dar apoi?
03:36
but then what?
101
216197
992
03:37
There isn't another full pair of people in the room,
102
217189
2262
Nu există altă pereche de oameni în cameră.
03:39
so line 2 no longer applies.
103
219451
2210
deci linia 2 nu se mai aplică.
03:41
And so, by this algorithm's end,
104
221661
1669
La sfârşitul acestui algoritm,
03:43
n is still 2, which isn't correct.
105
223330
2596
N este tot 2, deși nu-i corect.
03:45
Indeed this algorithm is said to be buggy
106
225926
2332
Se spune că algoritmul are un „bug”
pentru că are o greşeală.
03:48
because it has a mistake.
107
228258
1148
03:49
Let's redress with some new pseudocode.
108
229406
1896
Să-l corectămm cu un pseudocod nou.
03:51
Let n equal zero.
109
231302
1793
Îl facem pe N egal 0.
03:53
For each pair of people in room,
110
233095
2123
Pentru fiecare pereche de oameni din cameră,
03:55
set n = n + 2.
111
235218
2422
stabilim N = N+2.
03:57
If 1 person remains unpaired,
112
237640
2459
Dacă o persoană rămâne fără pereche,
04:00
set n = n + 1.
113
240099
2376
stabilim N = N+1.
04:02
To solve this particular problem,
114
242475
1507
Pentru a corecta această eroare
04:03
we've introduced in line 4 a condition,
115
243982
2249
am introdus în linia 4 o condiţie, numită ramură,
04:06
otherwise known as a branch,
116
246231
1835
04:08
that only executes if there is one person
117
248066
2253
care execută doar dacă există
04:10
we could not pair with another.
118
250319
1876
o persoană fără pereche.
04:12
So now, whether there's 1 or 3
119
252195
2065
Acum, chiar dacă există 1 sau 3
04:14
or any odd number of people in the room,
120
254260
2273
sau oricare alt număr în cameră,
04:16
this algorithm will now count them.
121
256533
2288
acest algoritm îi va număra.
04:18
Can we do even better?
122
258821
1345
Putem oare și mai bine?
04:20
Well, we could count in 3's or 4's or even 5's and 10's,
123
260166
3294
Am putea număra din 3 în 3, 4, 5 sau 10,
04:23
but beyond that it's going to get
124
263460
1300
dar dincolo de asta
04:24
a little bit difficult to point.
125
264760
1870
e dificil de numărat cu degetul.
04:26
At the end of the day,
126
266630
937
04:27
whether executed by computers or humans,
127
267567
2264
În final, fie că-s executați de computer fie de om,
04:29
algorithms are just a set of instructions
128
269831
1960
algoritmii sunt doar un set de instrucțiuni
04:31
with which to solve problems.
129
271791
1838
cu care se rezolvă probleme.
04:33
These were just three.
130
273629
1743
Acestea sunt doar 3.
04:35
What problem would you solve with an algorithm?
131
275372
2982
Ce problemă aţi rezolva voi cu un algoritm?
Despre acest site

Acest site vă va prezenta videoclipuri de pe YouTube care sunt utile pentru a învăța limba engleză. Veți vedea lecții de engleză predate de profesori de top din întreaga lume. Faceți dublu clic pe subtitrările în limba engleză afișate pe fiecare pagină video pentru a reda videoclipul de acolo. Subtitrările se derulează în sincron cu redarea videoclipului. Dacă aveți comentarii sau solicitări, vă rugăm să ne contactați folosind acest formular de contact.

https://forms.gle/WvT1wiN1qDtmnspy7