What's an algorithm? - David J. Malan

Não bộ có thể xử lý các thuật toán - David J. Malan

2,570,249 views

2013-05-20 ・ TED-Ed


New videos

What's an algorithm? - David J. Malan

Não bộ có thể xử lý các thuật toán - David J. Malan

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

TED-Ed


Vui lòng nhấp đúp vào phụ đề tiếng Anh bên dưới để phát video.

00:00
Translator: Andrea McDonough Reviewer: Jessica Ruby
0
0
7000
Translator: Thanh Nguyen Cong Reviewer: An Nguyen Hoang
00:15
What's an algorithm?
1
15483
1348
Thuật toán là gì?
00:16
In computer science,
2
16831
831
Trong khoa học máy tính, thuật toán là tập hợp
00:17
an algorithm is a set of instructions
3
17662
1754
00:19
for solving some problem, step-by-step.
4
19416
2689
các chỉ dẫn để giải toán từng bước.
00:22
Typically, algorithms are executed by computers,
5
22105
2272
Các thuật toán thường được máy tính xử lí,
00:24
but we humans have algorithms as well.
6
24377
2167
nhưng con người chúng ta cũng có thể dùng chúng.
00:26
For instance, how would you go about counting
7
26544
1853
Ví dụ, làm sao đếm số người
00:28
the number of people in a room?
8
28397
1820
có mặt ở trong phòng ?
00:30
Well, if you're like me,
9
30217
1215
Nếu là tôi,
00:31
you probably point at each person,
10
31432
1496
tôi sẽ chỉ vào từng người một
00:32
one at a time,
11
32928
960
00:33
and count up from 0:
12
33888
1837
đếm : 1, 2, 3, 4 và cứ thế.
00:35
1, 2, 3, 4 and so forth.
13
35725
2873
00:38
Well, that's an algorithm.
14
38598
1113
Đó là một thuật toán.
00:39
In fact, let's try to express it
15
39711
1134
Chính quy hơn hãy thử diễn đạt bằng phương trình,
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
dạng cú pháp giống Tiếng Anh nhưng là ngôn ngữ lập trình.
00:46
Let n equal 0.
19
46029
1767
Lấy n = 0.
00:47
For each person in room, set n = n + 1.
20
47796
4792
Với mỗi người trong phòng, lập n = n+1.
00:52
How to interpret this pseudocode?
21
52588
1497
Điều đó nghĩa là gì ?
00:54
Well, line 1 declares, so to speak,
22
54085
1836
hàng 1 biểu thị
00:55
a variable called n
23
55921
1416
biến số n
00:57
and initializes its value to zero.
24
57337
2379
được gán giá trị ban đầu bằng 0.
00:59
This just means that at the beginning of our algorithm,
25
59716
2335
Nghĩa là chúng ta
01:02
the thing with which we're counting
26
62051
1584
bắt đầu thuật toán
01:03
has a value of zero.
27
63635
1668
bằng cách đếm từ 0.
01:05
After all, before we start counting,
28
65303
1336
Sau đó,
01:06
we haven't counted anything yet.
29
66639
1669
chưa đếm gì vội.
01:08
Calling this variable n is just a convention.
30
68308
2248
Quy ước gọi biến số này là n
01:10
I could have called it almost anything.
31
70556
2005
Tôi có thể gọi nó bằng bất cứ tên gì.
01:12
Now, line 2 demarks the start of loop,
32
72561
2086
Giờ hàng 2 là điểm bắt đầu của bảng mạch,
01:14
a sequence of steps that will repeat some number of times.
33
74647
3044
là một chuỗi các bước lặp lại.
01:17
So, in our example, the step we're taking
34
77691
1794
Trong ví dụ này, các bước là
01:19
is counting people in the room.
35
79485
1734
đếm những người trong phòng.
01:21
Beneath line 2 is line 3,
36
81219
1763
Dưới hàng 2 là hàng 3,
01:22
which describes exactly how we'll go about counting.
37
82982
2511
mô tả chính xác cách đếm.
01:25
The indentation implies that it's line 3
38
85493
2250
Những nét cắt biểu thị rằng hàng thứ 3
01:27
that will repeat.
39
87743
1222
sẽ được lặp lại.
01:28
So, what the pseudocode is saying
40
88965
1219
Ngôn ngữ code nói rằng
01:30
is that after starting at zero,
41
90184
2066
sau khi bắt đầu bằng 0,
01:32
for each person in the room,
42
92250
1710
với mỗi người trong phòng
01:33
we'll increase n by 1.
43
93960
2218
chúng ta sẽ cộng thêm 1 vào n.
01:36
Now, is this algorithm correct?
44
96178
2329
Thuật toán này đã đúng chưa?
01:38
Well, let's bang on it a bit.
45
98507
1608
Hãy thử lại xem.
01:40
Does it work if there are 2 people in the room?
46
100115
2826
Liệu có áp dụng được trong trường hợp có 2 người trong phòng ?
01:42
Let's see.
47
102941
780
01:43
In line 1, we initialize n to zero.
48
103721
2085
Để xem. Ở hàng 1, biến n khởi điểm = 0
01:45
For each of these two people,
49
105806
1302
Với mỗi người trong phòng
01:47
we then increment n by 1.
50
107108
2168
ta lại cộng 1 vào n.
01:49
So, in the first trip through the loop,
51
109276
1582
Vậy ở vòng đầu
01:50
we update n from zero to 1,
52
110858
2005
ta đã nâng giá trị của n từ 0 lên 1,
01:52
on the second trip through that same loop,
53
112863
1655
ở vòng hai,
01:54
we update n from 1 to 2.
54
114518
2249
từ 1 lên 2.
01:56
And so, by this algorithm's end, n is 2,
55
116767
3341
Khi thuật toán kết thúc, n=2,
02:00
which indeed matches the number of people in the room.
56
120108
2113
đúng bằng số người trong phòng.
02:02
So far, so good.
57
122221
1223
Đến đây vẫn rất suôn sẻ.
02:03
How about a corner case, though?
58
123444
1752
Còn trường hợp này thì sao ?
02:05
Suppose that there are zero people in the room,
59
125196
1964
Giả sử không có ai trong phòng,
02:07
besides me, who's doing the counting.
60
127160
2347
ngoài tôi, người đang đếm ra.
02:09
In line 1, we again initialize n to zero.
61
129507
3010
Ở hàng 1, một lần nữa giá trị ban đầu của n = 0.
02:12
This time, though, line 3 doesn't execute at all
62
132517
2522
Lần này, không thể áp dụng hàng 3
02:15
since there isn't a person in the room,
63
135039
1880
vì không còn ai trong phòng
02:16
and so, n remains zero,
64
136919
1624
thành ra, n giữ nguyên bằng 0,
02:18
which indeed matches the number of people in the room.
65
138543
2359
giá trị đúng bằng số người trong phòng.
02:20
Pretty simple, right?
66
140902
906
Đơn giản nhỉ!
02:21
But counting people one a time is pretty inefficient, too, no?
67
141808
3216
Nhưng đếm từng người một thì có vẻ không hiệu quả cho lắm!
02:25
Surely, we can do better!
68
145024
1568
Chắc chắn có thể làm tốt hơn!
02:26
Why not count two people at a time?
69
146592
1866
Sao không thử đếm hai người 1 lúc?
02:28
Instead of counting 1, 2, 3, 4, 5, 6, 7, 8, and so forth,
70
148458
5099
Thay vì đếm 1,2,3,4,5,6,7,8 , v.v
02:33
why not count
71
153557
918
hãy thử 2,4,6,8, v.v
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
Có vẻ nhanh hơn và chắc chắn là thế rồi!
02:39
Let's express this optimization in pseudocode.
74
159020
2835
Thử thể hiện bước cải tiến này bằng ngôn ngữ lập trình nhé!
02:41
Let n equal zero.
75
161855
1462
Coi n = 0.
02:43
For each pair of people in room,
76
163317
1997
Mỗi cặp trong phòng
02:45
set n = n + 2.
77
165314
2588
có giá trị n = n+2
02:47
Pretty simple change, right?
78
167902
1673
Thay đổi này cũng đơn giản mà !
02:49
Rather than count people one at a time,
79
169575
1791
Thay vì đếm từng người một
02:51
we instead count them two at a time.
80
171366
2343
ta đếm hai người một.
02:53
This algorithm's thus twice as fast as the last.
81
173709
2815
Thuật toán nhờ thế nhanh gấp đôi.
02:56
But is it correct?
82
176524
1346
Nhưng nó có chính xác không? Để xem.
02:57
Let's see.
83
177870
794
02:58
Does it work if there are 2 people in the room?
84
178664
2125
Nếu có 2 người trong phòng,
03:00
In line 1, we initialize n to zero.
85
180789
2342
ở hàng 1, n có giá trị ban đầu bằng 0.
03:03
For that one pair of people, we then increment n by 2.
86
183131
3268
Có 1 cặp trong phòng nên cộng thêm 2 vào n.
03:06
And so, by this algorithm's end, n is 2,
87
186399
2522
Cuối cùng, khi thuật toán kết thúc, n = 2,
03:08
which indeed matches the number of people in the room.
88
188921
2382
trùng với số người trong phòng.
03:11
Suppose next that there are zero people in the room.
89
191303
2412
Giả sử không có ai trong phòng.
03:13
In line 1, we initialize n to zero.
90
193715
2587
Ở hàng 1, giá trị ban đầu n = 0.
03:16
As before, line 3 doesn't execute at all
91
196302
2080
Cũng như lần trước, không áp dụng được
03:18
since there aren't any pairs of people in the room,
92
198382
2342
cho hàng 3 vì không có cặp nào trong phòng
03:20
and so, n remains zero,
93
200724
1686
n giữ nguyên bằng 0
03:22
which indeed matches the number of people in the room.
94
202410
2773
đúng bằng số người trong phòng.
03:25
But what if there are 3 people in the room?
95
205183
2372
Nhưng nếu có 3 người trong phòng
03:27
How does this algorithm fair?
96
207555
1937
thuật toán này sẽ thực hiện thế nào?
03:29
Let's see.
97
209492
829
Để xem!
03:30
In line 1, we initialize n to zero.
98
210321
2670
Ở hàng 1, giá trị đầu của n bằng 0.
03:32
For a pair of those people,
99
212991
1290
cứ hai người một
03:34
we then increment n by 2,
100
214281
1916
ta cộng thêm 2 vào n
03:36
but then what?
101
216197
992
rồi sao nữa?
03:37
There isn't another full pair of people in the room,
102
217189
2262
Không có đủ một cặp nữa trong phòng
03:39
so line 2 no longer applies.
103
219451
2210
nên hàng 2 không áp dụng được.
03:41
And so, by this algorithm's end,
104
221661
1669
kết thúc thuật toán,
03:43
n is still 2, which isn't correct.
105
223330
2596
n = 2, và kết quả này không đúng.
03:45
Indeed this algorithm is said to be buggy
106
225926
2332
Thuật toán này
03:48
because it has a mistake.
107
228258
1148
mắc một sai lầm.
03:49
Let's redress with some new pseudocode.
108
229406
1896
Hãy xem lại một lần nữa!
03:51
Let n equal zero.
109
231302
1793
Coi n = 0.
03:53
For each pair of people in room,
110
233095
2123
Với mỗi đôi trong phòng,
03:55
set n = n + 2.
111
235218
2422
lập n = n+2.
03:57
If 1 person remains unpaired,
112
237640
2459
Nếu 1 người lẻ ra,
04:00
set n = n + 1.
113
240099
2376
lập n = n+1.
04:02
To solve this particular problem,
114
242475
1507
Để giải quyết vấn đề này,
04:03
we've introduced in line 4 a condition,
115
243982
2249
chúng ta đưa một điều kiện vào hàng 4
04:06
otherwise known as a branch,
116
246231
1835
gọi là một nhánh,
04:08
that only executes if there is one person
117
248066
2253
chỉ áp dụng nếu có một người lẻ ra
04:10
we could not pair with another.
118
250319
1876
04:12
So now, whether there's 1 or 3
119
252195
2065
Giờ thì, nếu có 1 hay 3
04:14
or any odd number of people in the room,
120
254260
2273
hay bất kì số người lẻ nào trong phòng,
04:16
this algorithm will now count them.
121
256533
2288
thuật toán này vẫn hoạt động được.
04:18
Can we do even better?
122
258821
1345
Ta có thể làm tốt hơn không?
04:20
Well, we could count in 3's or 4's or even 5's and 10's,
123
260166
3294
Ờ thì, ta có thể đếm 3, 4, 5 hay 10 người một lúc,
04:23
but beyond that it's going to get
124
263460
1300
nhưng quá nữa thì sẽ
04:24
a little bit difficult to point.
125
264760
1870
hơi khó đếm.
04:26
At the end of the day,
126
266630
937
Cuối cùng,
04:27
whether executed by computers or humans,
127
267567
2264
dù là vận hành bởi máy móc hay con người,
04:29
algorithms are just a set of instructions
128
269831
1960
thuật toán cũng là tập hợp những chỉ dẫn
04:31
with which to solve problems.
129
271791
1838
để giải các bài toán.
04:33
These were just three.
130
273629
1743
Đây chỉ mới có ba bài toán thôi,
04:35
What problem would you solve with an algorithm?
131
275372
2982
bạn sẽ dùng thuật toán để giải những bài nào ?
Về trang web này

Trang web này sẽ giới thiệu cho bạn những video YouTube hữu ích cho việc học tiếng Anh. Bạn sẽ thấy các bài học tiếng Anh được giảng dạy bởi các giáo viên hàng đầu từ khắp nơi trên thế giới. Nhấp đúp vào phụ đề tiếng Anh hiển thị trên mỗi trang video để phát video từ đó. Phụ đề cuộn đồng bộ với phát lại video. Nếu bạn có bất kỳ nhận xét hoặc yêu cầu nào, vui lòng liên hệ với chúng tôi bằng biểu mẫu liên hệ này.

https://forms.gle/WvT1wiN1qDtmnspy7