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
Translator: Thitirat Kongkeo Reviewer: Sakunphat Jirawuthitanant
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 จากศูนย์ เป็น 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