Upload 4 files
Browse files
.gitattributes
CHANGED
|
@@ -33,3 +33,4 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
|
| 33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
| 33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
| 36 |
+
OrigVideo/Week3_Lecture4.mp4 filter=lfs diff=lfs merge=lfs -text
|
OrigVideo/Week3_Lecture4.mp4
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:c459397e7d3d1d58b69d7649b7254e73ecc9d4ff0f967e3eeaff5a458732568a
|
| 3 |
+
size 34824798
|
TTS_AUDIO/VTT/Week4_Lecture3_Cleaned_Tagged.ta.vtt
ADDED
|
@@ -0,0 +1,496 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
WEBVTT
|
| 2 |
+
|
| 3 |
+
00:00:02.246 --> 00:00:06.190
|
| 4 |
+
<DT>merge sort </DT> என்பது <DT>order</DT> <DNT>n log n</DNT> <DT>sorting algorithm</DT> என்று பார்த்தோம்.
|
| 5 |
+
|
| 6 |
+
00:00:06.190 --> 00:00:10.509
|
| 7 |
+
ஆனால் இது சில குறைபாடுகளைக் கொண்டுள்ளது. இது சில நேரங்களில் <DT>impractical</DT> ஆகிறது.
|
| 8 |
+
|
| 9 |
+
00:00:10.849 --> 00:00:14.740
|
| 10 |
+
முக்கிய பிரச்சனை என்னவென்றால், <DT>merging</DT> க்கு <DT>extra space</DT> தேவைப்படுகிறது.
|
| 11 |
+
|
| 12 |
+
00:00:14.869 --> 00:00:19.076
|
| 13 |
+
<DT>recursion</DT> ஐ பயன்படுத்தாமல் <DT>implement merge sort </DT> செய்வது கடினம் என்பதையும் நாம் பார்த்தோம்.
|
| 14 |
+
|
| 15 |
+
00:00:19.101 --> 00:00:22.108
|
| 16 |
+
மற்றும் <DT>recursion</DT> <DT>programming language</DT> ல் அதன் சொந்த செலவைக் கொண்டுள்ளது.
|
| 17 |
+
|
| 18 |
+
00:00:24.841 --> 00:00:26.952
|
| 19 |
+
எனவே, <DT>space problem</DT> ஐ தீர்க்கலாம்.
|
| 20 |
+
|
| 21 |
+
00:00:27.736 --> 00:00:33.310
|
| 22 |
+
<DT>merge function</DT> ஐ <DT>implement</DT> செய்யும் <DT>பொருட்டு</DT>, <DT>merge sort </DT> க்கு <DT>extra space</DT> தேவைப்படுகிறது.
|
| 23 |
+
|
| 24 |
+
00:00:33.590 --> 00:00:38.500
|
| 25 |
+
நாம் ஏன் <DT>merge</DT> செய்ய வேண்டும்? நாம் <DT>merge</DT> செய்ய வேண்டியதன் காரணம், நாம் <DT>merge sort </DT> ஐ செய்யும்போது,
|
| 26 |
+
|
| 27 |
+
00:00:38.500 --> 00:00:45.759
|
| 28 |
+
நம்மிடம் <DT>initial list</DT> உள்ளது. பின்னர் அதை இரண்டு பகுதிகளாக split செய்கிறோம். ஆனால், பொதுவாக <DT>left</DT> இலிருந்து <DT>items</DT> கள் இருக்கலாம்.
|
| 29 |
+
|
| 30 |
+
00:00:45.759 --> 00:00:50.409
|
| 31 |
+
<DNT>right</DNT> இலிருந்து <DT>bigger than items</DT>. எனவே, <DT>instance</DT> ஆக நாம் சொன்னால்,
|
| 32 |
+
|
| 33 |
+
00:00:50.450 --> 00:00:54.250
|
| 34 |
+
<DT>left</DT> ல் <DT>even numbers</DT> மற்றும் <DNT>right</DNT> ல் <DT>odd numbers</DT>.
|
| 35 |
+
|
| 36 |
+
00:00:54.550 --> 00:00:58.900
|
| 37 |
+
இரண்டு பக்கங்களிலிருந்தும் <DT>numbers alternately</DT> எடுத்துக்கொண்டு <DT>merge</DT> செய்ய வேண்டும்.
|
| 38 |
+
|
| 39 |
+
00:00:59.630 --> 00:01:09.646
|
| 40 |
+
<DT>divided problem</DT> ன் <DT>left</DT> பக்கத்தில் உள்ள அனைத்தும் <DT>divided problem</DT> ன் <DNT>வலது</DNT> பக்கத்தில் உள்ள அனைத்தையும் விட சிறியதாக இருக்கும்படி <DT>arrange</DT> செய்தால்,
|
| 41 |
+
|
| 42 |
+
00:01:10.593 --> 00:01:12.146
|
| 43 |
+
பின்னர், நாம் அனைத்தையும் <DT>merge</DT> செய்ய தேவையில்லை.
|
| 44 |
+
|
| 45 |
+
00:01:12.699 --> 00:01:18.130
|
| 46 |
+
மேலும் இது <DT>merge</DT> செய்வதற்கு, கூடுதல் space தேவைப்படும் <DT>problem</DT> ஐ தவிர்க்கலாம்.
|
| 47 |
+
|
| 48 |
+
00:01:20.689 --> 00:01:23.702
|
| 49 |
+
<DT>merge</DT> இல்லாமல் எப்படி <DT>divide</DT> மற்றும் <DT>conquer</DT> செய்வது.
|
| 50 |
+
|
| 51 |
+
00:01:25.243 --> 00:01:27.659
|
| 52 |
+
<DT>median value</DT> நமக்குத் தெரியும் என்று வைத்துக்கொள்வோம்.
|
| 53 |
+
|
| 54 |
+
00:01:27.659 --> 00:01:33.716
|
| 55 |
+
ஒரு <DT>set</DT> ல் உள்ள <DT>median value</DT> என்பது <DT>half</DT> the <DT>elements</DT> are <DT>smaller than half</DT> are <DT>bigger</DT> ஆக இருக்கும் <DT>value</DT> என்பதை நினைவில் கொள்ளுங்கள்.
|
| 56 |
+
|
| 57 |
+
00:01:35.649 --> 00:01:42.124
|
| 58 |
+
<DT>median</DT> விட <DT>smaller than</DT> <DT>values</DT> அனைத்தையும் <DT>left half</DT> க்கும், <DT>median</DT> விட <DT>bigger than</DT> அனைத்தையும் <DNT>right half</DNT> க்கும் நகர்த்தலாம்.
|
| 59 |
+
|
| 60 |
+
00:01:43.883 --> 00:01:52.180
|
| 61 |
+
நாம் பார்ப்பது போல, <DT>list</DT> ன் <DT>length</DT> க்கு <DT>time proportional</DT> ஆக புதிய <DT>array</DT> வை உருவாக்காமல் இதைச் செய்யலாம்.
|
| 62 |
+
|
| 63 |
+
00:01:53.816 --> 00:02:00.989
|
| 64 |
+
இந்த <DT>rearrangement</DT> ஐ செய்த பிறகு, அனைத்து <DT>smaller values</DT> களையும் <DT>left half</DT> க்கும் <DT>bigger values</DT> களை <DNT>right half</DNT> க்கும் நகர்த்தவும்.
|
| 65 |
+
|
| 66 |
+
00:02:00.989 --> 00:02:06.443
|
| 67 |
+
இந்த <DT>divide</DT> மற்றும் <DT>conquer strategy</DT> ஐ நாம் <DT>recursively</DT> பயன்படுத்தலாம். மேலும் <DNT>right</DNT> மற்றும் <DT>left half</DT> ஐ தனித்தனியாக <DT>sort</DT> செய்யலாம்.
|
| 68 |
+
|
| 69 |
+
00:02:07.519 --> 00:02:12.520
|
| 70 |
+
மேலும் <DT>left half</DT> ல் உள்ள அனைத்தும், <DNT>right half</DNT> ல் உள்ள அனைத்தையும் விட <DT>சிறியது</DT> என்று நாம் உத்தரவாதம் அளித்துள்ளோம்.
|
| 71 |
+
|
| 72 |
+
00:02:13.019 --> 00:02:17.050
|
| 73 |
+
இது தானாகவே இதற்கு அர்த்தம் <DT>divide</DT> மற்றும் <DT>conquer</DT> step க்கு பிறகு,
|
| 74 |
+
|
| 75 |
+
00:02:17.050 --> 00:02:24.442
|
| 76 |
+
<DT>left half</DT> ஏற்கனவே <DNT>right half</DNT> க்கு கீழே இருப்பதால், non-trivial முறையில் answers களை combine செய்ய வேண்டிய அவசியமில்லை. நாம் <DT>merge</DT> செய்ய தேவையில்லை.
|
| 77 |
+
|
| 78 |
+
00:02:28.309 --> 00:02:34.210
|
| 79 |
+
இந்த <DT>strategy</DT> ஐ பயன்படுத்தினால், <DT>merge sort </DT> போன்ற ஒரு <DT>recursive equation</DT> ஐ பெறுவோம்.
|
| 80 |
+
|
| 81 |
+
00:02:34.210 --> 00:02:42.370
|
| 82 |
+
<DNT>length n</DNT> இன் <DT>list</DT> ஐ <DT>sort</DT> செய்வதற்கு <DT>time</DT> தேவைப்படும். முதலில் <DNT>size n</DNT> இன் இரண்டு <DT>lists</DT> களை 2 ஆல் <DT>sort</DT> செய்ய வேண்டும்.
|
| 83 |
+
|
| 84 |
+
00:02:42.370 --> 00:02:50.039
|
| 85 |
+
நாம் <DNT>order n </DNT> ஐ செய்வோம் <DT>merging</DT> ஆக அல்ல. <DT>list</DT> ஐ <DT>decompose</DT> செய்வதற்காக. அதனால் அனைத்து <DT>smaller values</DT> களும் <DT>left</DT> மற்றும் <DNT>right</DNT> இல் இருக்கும்.
|
| 86 |
+
|
| 87 |
+
00:02:50.064 --> 00:02:54.483
|
| 88 |
+
நாம் <DT>recursive step</DT> செய்வதற்கு முன் rearranging <DT>step</DT> <DNT>order n</DNT> ஆகும்.
|
| 89 |
+
|
| 90 |
+
00:02:54.508 --> 00:02:57.879
|
| 91 |
+
அதேசமயம் <DT>merge</DT> என்பது <DT>recursive step</DT> க்கு பின் வரும் <DT>step</DT> ஆகும்.
|
| 92 |
+
|
| 93 |
+
00:02:57.879 --> 00:03:03.879
|
| 94 |
+
இது முந்தைய <DT>case</DT> ல் <DNT>order n</DNT> ஆக இருந்தது. ஆனால் நாம் <DT>recurrence</DT> ஐ <DT>solve</DT>செய்தால் அதே ஒன்றுதான். நமக்கு மற்றொரு <DNT>order n log n algorithm</DNT> கிடைக்கும்.
|
| 95 |
+
|
| 96 |
+
00:03:08.730 --> 00:03:12.340
|
| 97 |
+
இந்த <DT>approach</DT> இல் பெரிய <DT>bottleneck</DT> என்னவென்றால் <DT>median</DT> ஐ கண்டறிவதாகும்.
|
| 98 |
+
|
| 99 |
+
00:03:13.190 --> 00:03:20.663
|
| 100 |
+
ஒரு <DT>list</DT> ஐ <DT>sorting</DT> செய்வதன் நன்மைகளில் ஒன்று, <DT>sorting</DT> க்கு பின் <DT>median</DT> ஐ middle <DT>element</DT> ஆக நாம் அடையாளம் காணலாம் என்பதை நினைவில் கொள்ளுங்கள்.
|
| 101 |
+
|
| 102 |
+
00:03:21.890 --> 00:03:24.336
|
| 103 |
+
இப்போது, இங்கே நாம் <DT>sorting</DT> செய்வதற்கு முன் <DT>median</DT> ஐ கேட்கிறோம்.
|
| 104 |
+
|
| 105 |
+
00:03:24.996 --> 00:03:28.539
|
| 106 |
+
ஆனால், நமது நோக்கம் <DT>sort</DT> செய்வது. அது <DT>paradoxical</DT> ஆகும்.
|
| 107 |
+
|
| 108 |
+
00:03:28.539 --> 00:03:33.219
|
| 109 |
+
<DT>sorting</DT>ன் <DT>output</DT> <DT>sorting</DT> ஆன <DT>input</DT> ஆக இருக்க வேண்டும் என நாம் விரும்பினால்.
|
| 110 |
+
|
| 111 |
+
00:03:34.892 --> 00:03:42.580
|
| 112 |
+
எனவே, <DT>list</DT> ஐ <DNT>split</DNT> செய்து <DT>element</DT> ன் மிகவும் எளிமையான தேர்வு மூலம் <DT>strategy</DT> யை முயற்சிக்க வேண்டும் என்பதே இதன் பொருள்.
|
| 113 |
+
|
| 114 |
+
00:03:42.825 --> 00:03:46.780
|
| 115 |
+
<DT>median</DT> ஐ தேடுவதற்குப் பதிலாக, <DNT>list A</DNT> இல் சில <DT>value</DT> ஐ பெறுவோம்.
|
| 116 |
+
|
| 117 |
+
00:03:46.780 --> 00:03:49.689
|
| 118 |
+
மற்றும் <DT>pivot element</DT> என அழைக்கப்படுவதைப் பயன்படுத்தவும்.
|
| 119 |
+
|
| 120 |
+
00:03:49.689 --> 00:03:56.769
|
| 121 |
+
இந்த <DT>pivot</DT> ஐ பொறுத்து <DNT>A</DNT> என்று பிரிக்கிறோம். இதனால் அனைத்து <DT>smaller elements</DT> களும் <DT>left</DT> ஆகவும், <DT>bigger elements</DT> கள் ��னைத்தும் <DNT>right</DNT> ஆகவும் இருக்கும்.
|
| 122 |
+
|
| 123 |
+
00:04:00.223 --> 00:04:11.636
|
| 124 |
+
இந்த <DT>algorithm</DT> <DT>quick sort</DT> என்று அழைக்கப்படுகிறது. இது 1960 களில் <DT>Tony Four</DT> என்ற நபரால் கண்டுபிடிக்கப்பட்டது மற்றும் இது மிகவும் பிரபலமான <DT>sorting algorithms</DT> களில் ஒன்றாகும்.
|
| 125 |
+
|
| 126 |
+
00:04:12.103 --> 00:04:16.082
|
| 127 |
+
பொதுவாக <DT>array</DT> இன் <DT>list</DT> ல் முதல் <DT>element</DT> ஆக இருக்கும் <DT>pivot element</DT> ஐ தேர்வு செய்கிறோம்.
|
| 128 |
+
|
| 129 |
+
00:04:16.759 --> 00:04:22.500
|
| 130 |
+
இந்த <DT>pivot</DT> இன் முடிவைப் பொறுத்து <DT>lower part</DT> லும் <DT>upper part</DT> லும் <DNT>partition A</DNT> செய்கிறோம்.
|
| 131 |
+
|
| 132 |
+
00:04:22.500 --> 00:04:24.943
|
| 133 |
+
எனவே, அனைத்து <DT>smaller elements</DT> களையும் <DT>left</DT> க்கு நகர்த்துகிறோம்.
|
| 134 |
+
|
| 135 |
+
00:04:25.056 --> 00:04:28.149
|
| 136 |
+
மற்றும் அனைத்து <DT> bigger elements</DT> முதல் <DNT>right</DNT> வரை <DT>pivotal</DT> தேர்வைப் பொறுத்து.
|
| 137 |
+
|
| 138 |
+
00:04:29.523 --> 00:04:34.163
|
| 139 |
+
இரண்டிற்கும் இடையே <DT>pivot</DT> வருவதை உறுதிசெய்கிறோம். ஏனெனில் <DT>array</DT> ல் முதல் <DT>element</DT> <DT>pivot</DT> ஆக எடுத்துள்ளோம்.
|
| 140 |
+
|
| 141 |
+
00:04:34.190 --> 00:04:41.036
|
| 142 |
+
இதற்குப் பிறகு நாம் அதை <DT>lower</DT> மற்றும் <DT>upper bound</DT> க்கு இடையில் உள்ள <DT>center</DT> க்கு நகர்த்த விரும்புகிறோம். பின்னர், இரண்டு <DT>partitions</DT> களை <DT>recursively sort</DT> செய்கிறோம்.
|
| 143 |
+
|
| 144 |
+
00:04:44.456 --> 00:04:48.910
|
| 145 |
+
ஒரு பொதுவான <DT>list</DT> ல் <DT>quick sort</DT> எவ்வாறு வேலை செய்யும் என்பது பற்றிய <DT>high level view</DT> இங்கே உள்ளது.
|
| 146 |
+
|
| 147 |
+
00:04:48.910 --> 00:04:56.143
|
| 148 |
+
இது தான் நமது <DT>list</DT> என்று வைத்துக்கொள்வோம். <DT>list</DT> ன் தொடக்கத்தை <DT>pivot element</DT> ஆக முதல் <DT>element</DT> ஐ அடையாளம் காண்போம்.
|
| 149 |
+
|
| 150 |
+
00:04:56.950 --> 00:05:01.569
|
| 151 |
+
இப்போது, மீதமுள்ள <DT>elements</DT> களில், எந்த <DNT>ones</DNT> <DT>smaller</DT> மற்றும் எந்த <DNT>ones</DNT> <DT>bigger</DT> என்பதைக் கண்டுபிடிக்க வேண்டும்.
|
| 152 |
+
|
| 153 |
+
00:05:02.410 --> 00:05:11.510
|
| 154 |
+
இதை எப்படிச் செய்வோம் என்று சொல்லாமல், 32, 22 மற்றும் 13 ஆகிய மூன்று <DT>elements</DT> களை <DT>smaller</DT> ஆகவும் <DNT>yellow</DNT> ல் <DT>marked </DT> செய்யபட்டதாகவும் அடையாளப்படுத்துகிறோம்.
|
| 155 |
+
|
| 156 |
+
00:05:11.810 --> 00:05:15.069
|
| 157 |
+
மற்றும் <DNT>green</DNT> இல் <DT>marked </DT> செய்யப்பட்ட மற்ற 4 <DT>elements</DT> கள் பெரியவை.
|
| 158 |
+
|
| 159 |
+
00:05:16.160 --> 00:05:20.040
|
| 160 |
+
முதல் <DT>step</DT> உண்மையில் இந்த <DT>criterion</DT> ஐ பொறுத்து <DT>partition</DT> செய்ய வேண்டும்.
|
| 161 |
+
|
| 162 |
+
00:05:20.040 --> 00:05:24.810
|
| 163 |
+
நாம் இந்த <DT>elements</DT> களை நகர்த்த வேண்டும். அதனால் அவை இரண்டு <DT>blocks</DT> ஆக வரும்.
|
| 164 |
+
|
| 165 |
+
00:05:24.810 --> 00:05:27.550
|
| 166 |
+
அந்த 13, 32 மற்றும் 22 <DT>left</DT> பக்கம் வரும்.
|
| 167 |
+
|
| 168 |
+
00:05:27.550 --> 00:05:33.430
|
| 169 |
+
63 57, 91 மற்றும் 78, <DNT>right</DNT> மற்றும் <DT>pivot element</DT> 43 <DT>middle</DT> ல் வருகிறது.
|
| 170 |
+
|
| 171 |
+
00:05:33.947 --> 00:05:36.781
|
| 172 |
+
இது <DT>rearranging step</DT> மற்றும் இப்போது
|
| 173 |
+
|
| 174 |
+
00:05:37.060 --> 00:05:41.529
|
| 175 |
+
நாம் <DNT>yellow bits</DNT> மற்றும் <DNT>green bits</DNT> ஆகியவற்றை <DT>recursively sort</DT> செய்வோம். பிறகு அதைச் செய்யலாம் என்று கருதினால்,
|
| 176 |
+
|
| 177 |
+
00:05:41.529 --> 00:05:45.480
|
| 178 |
+
நம்மிடம் ஒரு <DT>sorted array</DT> உள்ளது மற்றும் அனைத்து <DNT>yellow</DNT> பொருட்களும் <DT>smaller than </DT>43 ஆக இருப்ப��ை கவனிக்கவும்.
|
| 179 |
+
|
| 180 |
+
00:05:45.480 --> 00:05:49.509
|
| 181 |
+
மேலும் அனைத்து <DNT>green</DNT> விஷயங்களும் <DT>bigger than</DT> 43. மேலும் <DT>merging</DT> செய்ய தேவையில்லை.
|
| 182 |
+
|
| 183 |
+
00:05:52.243 --> 00:05:54.899
|
| 184 |
+
எனவே, <DT>partitioning</DT> எவ்வாறு செயல்படுகிறது என்பதைப் பார்ப்போம்.
|
| 185 |
+
|
| 186 |
+
00:05:54.899 --> 00:05:59.350
|
| 187 |
+
இங்கே நம்மிடம் முந்தைய <DT>list</DT> ல் உள்ளது. மேலும் 43 ஐ நமது <DT>pivot element</DT> ஆக <DT>marked </DT> செய்துள்ளோம்.
|
| 188 |
+
|
| 189 |
+
00:05:59.350 --> 00:06:03.112
|
| 190 |
+
மீதமுள்ள <DT>elements</DT> களை <DT>scan</DT> செய்து அவற்றை <DT>divide</DT> செய்ய விரும்புகிறோம்.
|
| 191 |
+
|
| 192 |
+
00:06:03.137 --> 00:06:08.742
|
| 193 |
+
இரண்டு குழுக்கள், <DT>smaller than</DT> 43, <DNT>yellow ones</DNT>, <DT>bigger than</DT> 43, <DNT>green ones</DNT> மற்றும் அவற்றை <DT>rearrange</DT> செய்யவும்.
|
| 194 |
+
|
| 195 |
+
00:06:09.962 --> 00:06:13.839
|
| 196 |
+
நாம் என்ன செய்வோம் இரண்டு <DT>pointers</DT> கள் <DNT>yellow pointer</DNT> மற்றும் <DNT>green pointer</DNT> ஐ வைத்திருப்போம்.
|
| 197 |
+
|
| 198 |
+
00:06:14.155 --> 00:06:19.081
|
| 199 |
+
மேலும் பொதுவான விதி என்னவென்றால், எந்த ஒரு <DT>point</DT>லும் நாம் சிறிது <DT>distance</DT> ல் இருப்போம்.
|
| 200 |
+
|
| 201 |
+
00:06:19.355 --> 00:06:24.129
|
| 202 |
+
நான் <DNT>orange</DNT> நிறத்தில் வரையப் போகும் <DT>visible</DT> <DNT>yellow pointer</DNT> மற்றும் <DNT>green pointer</DNT>.
|
| 203 |
+
|
| 204 |
+
00:06:24.129 --> 00:06:29.165
|
| 205 |
+
இவை இந்த <DT>order</DT> ல் நகரும் <DNT>orange pointer</DNT> அல்லது <DNT>yellow pointer</DNT> எப்போதும் <DNT>green pointer</DNT> பின்னால் இருக்கும்.
|
| 206 |
+
|
| 207 |
+
00:06:29.565 --> 00:06:35.397
|
| 208 |
+
நீங்கள் பராமரிக்கும் <DT>inductive property</DT> என்னவென்றால், இந்த <DT>elements</DT> கள் 43 ஐ விட <DT>smaller than</DT> அல்லது சமமாகவோ இருக்கும்.
|
| 209 |
+
|
| 210 |
+
00:06:35.910 --> 00:06:40.643
|
| 211 |
+
இந்த <DT>elements</DT> கள் <DT>bigger than</DT> 43 மற்றும் இந்த <DT>elements</DT> கள் <DT>தெரியவில்லை</DT>.
|
| 212 |
+
|
| 213 |
+
00:06:42.577 --> 00:06:46.139
|
| 214 |
+
நாம் செய்ய முயற்சிப்பது என்னவென்றால், <DT>left</DT> ல் இருந்து <DNT>right</DNT> க்கு நகர்த்த முயற்சிக்கிறோம்.
|
| 215 |
+
|
| 216 |
+
00:06:46.139 --> 00:06:49.589
|
| 217 |
+
ஒவ்வொரு முறையும் <DT>unknown elements</DT> ஐ காணும் அனைத்து <DT>unknown elements</DT> களையும் <DT>classify</DT> செய்யவும்.
|
| 218 |
+
|
| 219 |
+
00:06:49.552 --> 00:06:52.660
|
| 220 |
+
இந்த property ஐ நாம் maintain பண்ண இரண்டு <DT>pointers</DT> களை மாற்றுவோம்.
|
| 221 |
+
|
| 222 |
+
00:06:52.700 --> 00:06:57.699
|
| 223 |
+
43 க்கும் முதல் <DT>pointer</DT> க்கும் இடையில் <DT>elements smaller than</DT> 43 அல்லது அதற்கு சமமாக உள்ளன.
|
| 224 |
+
|
| 225 |
+
00:06:57.699 --> 00:07:01.494
|
| 226 |
+
முதல் <DT>pointer</DT> க்கும் இரண்டாவது <DT>pointer</DT> க்கும் இடையில் நம் <DT>elements</DT> கள் கண்டிப்பாக 43 க்கு <DT>greater</DT> ஆக உள்ளது.
|
| 227 |
+
|
| 228 |
+
00:07:01.752 --> 00:07:05.230
|
| 229 |
+
மற்றும் <DNT>green pointer</DNT> இன் <DNT>right</DNT> பக்கம் இன்னும் <DT>scanned</DT> செய்யப்படாதவை உள்ளன.
|
| 230 |
+
|
| 231 |
+
00:07:07.023 --> 00:07:10.000
|
| 232 |
+
எனவே, ஆரம்பத்தில் எதுவும் தெரியவில்லை. பின்னர் நாம் 32 ஐ பார்க்கிறோம்.
|
| 233 |
+
|
| 234 |
+
00:07:10.000 --> 00:07:14.618
|
| 235 |
+
32 43 ஐ விட <DT>smaller than</DT> ஆக இருப்பதால், <DNT>yellow pointer</DNT> ஐ நகர்த்துகிறோம். மேலும் <DNT>green pointer</DNT> ஐ உடன் தள்ளுகிறோம்.
|
| 236 |
+
|
| 237 |
+
00:07:14.643 --> 00:07:16.949
|
| 238 |
+
தெரியாத விஷயம் 22 இல் தொடங்குகிறது.
|
| 239 |
+
|
| 240 |
+
00:07:16.949 --> 00:07:22.060
|
| 241 |
+
<DNT>yellow</DNT> மற்றும் <DNT>green pointer</DNT> ஆகியவற்றுக்கு இடையே எதுவும் இல்லை. <DT>value bigger than</DT> 43 ஐ நாம் இன்னும் கண்டுபிடி��்கவில்லை.
|
| 242 |
+
|
| 243 |
+
00:07:22.949 --> 00:07:24.910
|
| 244 |
+
எனவே, 22 க்கும் அதே நடக்கும்.
|
| 245 |
+
|
| 246 |
+
00:07:24.910 --> 00:07:28.629
|
| 247 |
+
இப்போது, 78ஐ பார்க்கும்போது, 78 <DT>bigger than</DT> 43 என்பதைக் கவனிக்கிறோம்.
|
| 248 |
+
|
| 249 |
+
00:07:29.008 --> 00:07:33.635
|
| 250 |
+
இப்போது, நாம் <DNT>green pointer</DNT> ஐ மட்டுமே நகர்த்துகிறோம். மேலும் <DNT>yellow pointer</DNT> ஐ அல்ல. இப்போது, இந்த 3 இடைவெளிகளை முன்பு போலவே வைத்திருக்கிறோம்.
|
| 251 |
+
|
| 252 |
+
00:07:33.935 --> 00:07:36.819
|
| 253 |
+
இது 43 க்கு குறைவான <DT>equal</DT> ஆன பகுதி என்பதை நினைவில் கொள்ளுங்கள்.
|
| 254 |
+
|
| 255 |
+
00:07:36.819 --> 00:07:44.350
|
| 256 |
+
இது <DT>greater than</DT> 43 உள்ள பகுதி மற்றும் இந்த பகுதி unknown <DNT>right</DNT>, நாம் இந்த வழியில் தொடர்கிறோம்.
|
| 257 |
+
|
| 258 |
+
00:07:44.350 --> 00:07:48.189
|
| 259 |
+
இப்போது நாம் 63 ஐ பார்க்கிறோம். மீண்டும் 63 <DNT>green zone</DNT> ஐ நீட்டிக்கிறது.
|
| 260 |
+
|
| 261 |
+
00:07:48.189 --> 00:07:52.540
|
| 262 |
+
57 ஒரு <DNT>green zone</DNT> ஐ நீட்டிக்கிறது 91 ஒரு <DNT>green zone</DNT> ஐ நீட்டிக்கிறது.
|
| 263 |
+
|
| 264 |
+
00:07:52.540 --> 00:07:56.470
|
| 265 |
+
இப்போது, 13 ஐ கண்டுபிடிக்கும்போது நாம் ஏதாவது செய்ய வேண்டும்.
|
| 266 |
+
|
| 267 |
+
00:07:56.470 --> 00:08:00.100
|
| 268 |
+
13 என்பது இப்போது <DNT>yellow zone</DNT> ல் சேர்க்கப்பட வேண்டிய ஒரு <DT>element</DT>.
|
| 269 |
+
|
| 270 |
+
00:08:00.205 --> 00:08:03.705
|
| 271 |
+
ஒரு <DT>strategy</DT> நிறைய மாற்றங்களைச் செய்ய வேண்டும்.
|
| 272 |
+
|
| 273 |
+
00:08:03.730 --> 00:08:07.360
|
| 274 |
+
நாம் 13 ஐ 22 இருக்கும் இடத்திற்கு அல்லது 22 க்குப் பிறகு நகர்த்துகிறோம்.
|
| 275 |
+
|
| 276 |
+
00:08:07.360 --> 00:08:10.180
|
| 277 |
+
மேலும் 78 இல் இருந்து எல்லாவற்றையும் <DNT>right</DNT> க்கு தள்ளுகிறோம்.
|
| 278 |
+
|
| 279 |
+
00:08:10.250 --> 00:08:15.220
|
| 280 |
+
ஆனால் உண்மையில், ஒரு புத்திசாலித்தனமான <DT>strategy</DT> என்னவென்றால், 13 இங்கே செல்ல வேண்டும் என்று சொல்வது.
|
| 281 |
+
|
| 282 |
+
00:08:17.605 --> 00:08:21.519
|
| 283 |
+
நாம் space ஐ உருவாக்க வேண்டும். ஆனால் <DT>space</DT> ஐ உருவாக்குவதற்கு பதிலாக.
|
| 284 |
+
|
| 285 |
+
00:08:21.519 --> 00:08:30.399
|
| 286 |
+
எப்படியும் <DNT>green</DNT> விஷயங்களை நாம் <DT>sort</DT> செய்யபோகிறோம். அது ஒரு பொருட்டல்ல என்று சொல்லலாம். இரண்டையும் எந்த வழியில் <DT>sort</DT> செய்கிறோம் என்பது எப்படி முக்கியம். இந்த 78ஐ எடுத்து 13க்கு நகர்த்துவோம்.
|
| 287 |
+
|
| 288 |
+
00:08:30.399 --> 00:08:33.009
|
| 289 |
+
எந்த மாற்றத்தையும் செய்வதற்கு பதிலாக.
|
| 290 |
+
|
| 291 |
+
00:08:33.009 --> 00:08:36.370
|
| 292 |
+
<DNT>green</DNT> zone ல் முதல் <DT>element</DT> ஐ <DT>exchange</DT> செய்கிறோம்.
|
| 293 |
+
|
| 294 |
+
00:08:36.370 --> 00:08:38.320
|
| 295 |
+
நாம் இதுவரை பார்க்கும் <DT>element</DT> உடன்.
|
| 296 |
+
|
| 297 |
+
00:08:38.320 --> 00:08:41.980
|
| 298 |
+
அது தானாகவே <DNT>yellow zone</DNT> மற்றும் <DNT>green zone</DNT> இரண்டையும் சரியாக நீட்டிக்கும்.
|
| 299 |
+
|
| 300 |
+
00:08:42.080 --> 00:08:49.299
|
| 301 |
+
நமது அடுத்த <DT>step</DT> 13 <DT>smaller than</DT> 43 என்பதை கண்டறிந்து, அதை 73 உடன் <DT>இடமாற்று</DT> செய்வது.
|
| 302 |
+
|
| 303 |
+
00:08:49.399 --> 00:08:54.070
|
| 304 |
+
இப்போது, நம்மிடம் உள்ள <DT>pivot</DT> ன் <DNT>right</DNT> க்கு ஒரு <DT>intermediate stage</DT> ஐ அடைந்துள்ளோம்.
|
| 305 |
+
|
| 306 |
+
00:08:54.070 --> 00:08:58.360
|
| 307 |
+
எல்லாவற்றையும் scanned செய்து, அவற்றை <DT>smaller</DT> ஆக வகைப்படுத்தியுள்ளோம்.
|
| 308 |
+
|
| 309 |
+
00:08:58.360 --> 00:08:59.889
|
| 310 |
+
மற்றும் <DT>bigger</DT> ஐயும்.
|
| 311 |
+
|
| 312 |
+
00:09:00.716 --> 00:09:04.216
|
| 313 |
+
இப்போது, <DNT>yellow</DNT> விஷயங்களை 43க்கு <DT>left</DT> பக்கம் <DT>push</DT> செய்ய வேண்டும்.
|
| 314 |
+
|
| 315 |
+
00:09:05.036 --> 00:09:09.165
|
| 316 |
+
இப்போது, <DNT>yellow zone</DNT> ல் 13ஐ சேர்த்தபோது பார்த்த அதே <DT>problem</DT> மீண்டும் ஒருமுறை நமக்கு வந்துள்ளது.
|
| 317 |
+
|
| 318 |
+
00:09:09.190 --> 00:09:13.210
|
| 319 |
+
நாம் 43 ஐ சரியான இடத்திற்கு நகர்த்தினால், இங்கே அனைத்தையும் <DNT>left</DNT> க்கு நகர்த்த வேண்டும்.
|
| 320 |
+
|
| 321 |
+
00:09:13.404 --> 00:09:18.940
|
| 322 |
+
ஆனால், அதற்குப் பதிலாக இந்த 13ஐ <DNT>yellow zone</DNT> ல் கடைசி <DT>element</DT> ஆக எடுத்துக்கொள்ளலாம்.
|
| 323 |
+
|
| 324 |
+
00:09:18.940 --> 00:09:22.149
|
| 325 |
+
மற்றும் அதை அங்கே <DT>replace</DT> செய்யவும். 32 மற்றும் 22 ஐ shift செய்ய வேண்டாம்.
|
| 326 |
+
|
| 327 |
+
00:09:22.149 --> 00:09:26.759
|
| 328 |
+
இது <DT>order</DT> ஐ சீர்குலைக்கிறது. ஆனால் எப்படியும் இது <DT>unsorted</DT> செய்யாமல், <DT>unsorted</DT> ஆக உள்ளது.
|
| 329 |
+
|
| 330 |
+
00:09:27.632 --> 00:09:29.889
|
| 331 |
+
நாம் இதை செய்கிறோம். இப்போது நம்மிடம் உள்ளது.
|
| 332 |
+
|
| 333 |
+
00:09:30.001 --> 00:09:36.171
|
| 334 |
+
நாம் விரும்பியபடி <DT>array rearranged</DT> செய்யப்பட்டது. எனவே, <DT>left</DT> ல் உள்ள இவை அனைத்தும் <DT>smaller than</DT> <DT>pivot</DT>.
|
| 335 |
+
|
| 336 |
+
00:09:37.244 --> 00:09:41.856
|
| 337 |
+
<DT>pivot</DT> நடுவில் உள்ளது. மற்றும் <DNT>right</DNT> ல் உள்ள அனைத்தும் <DT>bigger than</DT> <DT>pivot</DT>.
|
| 338 |
+
|
| 339 |
+
00:09:46.550 --> 00:09:53.830
|
| 340 |
+
இங்கே <DT>python</DT> இன் ஒரு <DT>implementation</DT> உள்ளது. <DT>quick sort</DT> என்பது <DT>merge sort </DT> மற்றும் <DT>binary research</DT> போன்றவற்றைக் கொண்டிருக்கும் என்பதை நினைவில் கொள்ளவும்.
|
| 341 |
+
|
| 342 |
+
00:09:53.830 --> 00:09:58.690
|
| 343 |
+
<DT>smaller</DT> மற்றும் <DT>smaller segments</DT> ல் அதை மீண்டும் மீண்டும் பயன்படுத்துகிறோம். பொதுவாக நாம் அதை <DT>pass</DT> செய்யவும்.
|
| 344 |
+
|
| 345 |
+
00:09:58.690 --> 00:10:03.523
|
| 346 |
+
நாம் <DNT>call A</DNT> என்ற <DT>list</DT> க்கும், <DT>segment</DT> ன் <DT>end points</DT> ஆன <DNT>left</DNT> மற்றும் <DNT>right</DNT>.
|
| 347 |
+
|
| 348 |
+
00:10:03.548 --> 00:10:07.238
|
| 349 |
+
நாம் ஒரு <DNT>slice l </DNT> முதல் <DNT>r minus 1</DNT> வரை செய்கிறோம்.
|
| 350 |
+
|
| 351 |
+
00:10:08.244 --> 00:10:13.210
|
| 352 |
+
இந்த <DT>slice</DT> 1 அல்லது 0 <DT>length</DT> ஆக இருந்தால், நாம் எதுவும் செய்ய மாட்டோம்.
|
| 353 |
+
|
| 354 |
+
00:10:14.223 --> 00:10:17.320
|
| 355 |
+
இல்லையெனில், நாம் முன்பு இருந்த இந்த <DT>partitioning strategy</DT> ஐ பின்பற்றுவோம்.
|
| 356 |
+
|
| 357 |
+
00:10:17.708 --> 00:10:22.120
|
| 358 |
+
அதாவது <DNT>l</DNT> இலிருந்து <DNT>r minus 1</DNT> வரை <DT>sorting</DT> செய்கிறோம்.
|
| 359 |
+
|
| 360 |
+
00:10:22.120 --> 00:10:24.220
|
| 361 |
+
எனவே, <DT>position l</DT>.
|
| 362 |
+
|
| 363 |
+
00:10:24.379 --> 00:10:25.899
|
| 364 |
+
இது <DT>pivot</DT> ஆகும்.
|
| 365 |
+
|
| 366 |
+
00:10:26.793 --> 00:10:29.671
|
| 367 |
+
<DNT>right</DNT> முதலில் இங்கே <DNT>yellow pointer</DNT> ஐ வைப்போம்.
|
| 368 |
+
|
| 369 |
+
00:10:31.011 --> 00:10:33.635
|
| 370 |
+
<DNT>yellow zone</DNT> இன் முடிவு என்று கூறுகிறது.
|
| 371 |
+
|
| 372 |
+
00:10:34.005 --> 00:10:38.500
|
| 373 |
+
உண்மையில் <DT>pivot</DT> உள்ளது அங்கு எதுவும் இல்லை. <DNT>yellow</DNT> என்பது <DNT>l plus 1</DNT> ஆகும்.
|
| 374 |
+
|
| 375 |
+
00:10:38.500 --> 00:10:50.781
|
| 376 |
+
இப்போது <DNT>green</DNT>ஐ தொடர அனுமதிக்கிறோம். ஒவ்வொரு <DT>time</DT>ம் <DNT>green</DNT> இல் ஒரு <DT>element</DT> ஐ பார்க்கும்போது புதிய <DNT>green</DNT> ஒன்றைக் காட்டிலும் <DT>smaller than</DT> ஆக இருக்கும் <DT>pivot</DT> ஆகும். இது <DT>pivot</DT> என்பதை நினைவில் கொள்ளுங்கள்.
|
| 377 |
+
|
| 378 |
+
00:10:51.965 --> 00:10:55.661
|
| 379 |
+
<DNT>right</DNT> நாம் எப்போதாவது ஒரு <DNT>green</DNT> ஐ பார்த்தால், அடுத்த <DT>value</DT> ஐ.
|
| 380 |
+
|
| 381 |
+
00:10:55.686 --> 00:10:57.580
|
| 382 |
+
சரிபார்க்கப்பட வேண்டியதை விட <DT>smaller than</DT> அல்லது சமமானது.
|
| 383 |
+
|
| 384 |
+
00:10:57.590 --> 00:11:01.714
|
| 385 |
+
நாம் <DT>exchange</DT> செய்கிறோம். இதனால் இந்த <DT>value</DT> ஐ <DNT>yellow zone</DNT> ன் முடிவுக்குக் கொண்டு வருகிறோம்.
|
| 386 |
+
|
| 387 |
+
00:11:01.739 --> 00:11:03.220
|
| 388 |
+
இதைத்தான் 13ல் செய்தோம்.
|
| 389 |
+
|
| 390 |
+
00:11:03.344 --> 00:11:07.590
|
| 391 |
+
பின்னர், <DNT>yellow pointer</DNT> ஐ நகர்த்துகிறோம். இல்லையெனில் கண்டிப்பாக <DT>bigger</DT> <DT>value</DT> ஐ கண்டால் நகர்த்துவோம்.
|
| 392 |
+
|
| 393 |
+
00:11:07.590 --> 00:11:11.860
|
| 394 |
+
<DNT>green pointer</DNT> மட்டுமே <DT>for loop</DT> ஆல் மறைமுகமாக செய்யப்படுகிறது. மற்றொன்றை நகர்த்த மாட்டோம்.
|
| 395 |
+
|
| 396 |
+
00:11:11.929 --> 00:11:14.883
|
| 397 |
+
இதன் முடிவில் நமக்கு <DT>pivot</DT> உள்ளது.
|
| 398 |
+
|
| 399 |
+
00:11:15.894 --> 00:11:19.784
|
| 400 |
+
நாம் <DT>pivot</DT> க்கு சமமானதைக் காட்டிலும் குறைவானதைக் கொண்டுள்ளோம். பின்னர் <DT>greater than pivot</DT> ம் கொண்டுள்ளோம்.
|
| 401 |
+
|
| 402 |
+
00:11:19.809 --> 00:11:27.914
|
| 403 |
+
இந்த விதியின் முடிவில் நாம் அடைந்த அந்த intermediate stage இதுதான். இப்போது, நாம் <DT>pivot</DT> ஐ கண்டுபிடித்து சரியான இடத்திற்கு நகர்த்த வேண்டும். எனவே, <DNT>yellow</DNT> என்பதை நினைவில் கொள்ளுங்கள்.
|
| 404 |
+
|
| 405 |
+
00:11:29.241 --> 00:11:32.769
|
| 406 |
+
<DNT>yellow</DNT> <DNT>last</DNT> க்கு அப்பால் உள்ள <DT>position</DT> ஐ சுட்டிக்காட்டுகிறது.
|
| 407 |
+
|
| 408 |
+
00:11:32.769 --> 00:11:37.440
|
| 409 |
+
<DT>element அதை விட சிறியது</DT>. <DNT>yellow</DNT> இதற்கு முன் எப்போதும் ஒரு <DT>value</DT> ஆகும்.
|
| 410 |
+
|
| 411 |
+
00:11:37.440 --> 00:11:40.396
|
| 412 |
+
<DNT>yellow</DNT> minus 1 இன் <DT>value</DT> ஐ எடுத்து, <DT>left value</DT> உடன் <DT>exchange</DT> செய்வோம்.
|
| 413 |
+
|
| 414 |
+
00:11:41.414 --> 00:11:48.765
|
| 415 |
+
இப்போது நாம் செய்ய வேண்டியது என்னவென்றால், நம்மிடம் இப்போது <DNT> p, p and greater than p</DNT> ஐ விட குறைவாக உள்ளது.
|
| 416 |
+
|
| 417 |
+
00:11:49.627 --> 00:12:01.350
|
| 418 |
+
இங்குதான் <DNT>yellow</DNT> <DNT>சரியானது</DNT>. நாம் 0 இலிருந்து <DNT>yellow</DNT> minus 1 க்கு செல்ல வேண்டும். மீண்டும் <DNT>sort p </DNT> ஐ விரும்பவில்லை. ஏனெனில் <DNT>p</DNT> ஏற்கனவே சரியான இடத்தில் வைக்கப்பட்டுள்ளது.
|
| 419 |
+
|
| 420 |
+
00:12:01.350 --> 00:12:06.391
|
| 421 |
+
<DNT>L</DNT> இலிருந்து <DNT>yellow</DNT> minus 1 ஆகவும், <DNT>yellow</DNT> இலிருந்து <DNT>right</DNT> முனையிலும் <DT>quick sort</DT> செய்வோம்.
|
| 422 |
+
|
| 423 |
+
00:12:13.070 --> 00:12:17.070
|
| 424 |
+
<DT>slide</DT> ல் பார்த்த <DT>python code</DT> ஐ இங்கே ஒரு <DT>file</DT> ல் எழுதியுள்ளோம்.
|
| 425 |
+
|
| 426 |
+
00:12:17.070 --> 00:12:20.320
|
| 427 |
+
slide ல் இருந்த அதே <DT>code</DT> இதுதானா என்பதை சரிபார்க்கலாம்.
|
| 428 |
+
|
| 429 |
+
00:12:20.345 --> 00:12:28.786
|
| 430 |
+
நாம் அதை முயற்சி செய்து <DT>run</DT> செய்யலாம் மற்றும் அது செயல்படுகிறதா என்று சரிபார்க்கலாம். <DT>call python</DT>, இந்த <DT>function</DT> ஐ <DT>import</DT> செய்கிறோம்.
|
| 431 |
+
|
| 432 |
+
00:12:32.849 --> 00:12:37.699
|
| 433 |
+
இது மீண்டும் ஒரு வகையான <DT>sorts</DT> <DT>function</DT> என்பதை நினைவில் கொள்ளுங்கள். எதையாவது <DT>sort</DT> செய்து அதன் விளைவைப் பார்க்க விரும்பினால்.
|
| 434 |
+
|
| 435 |
+
00:12:37.753 --> 00:12:40.870
|
| 436 |
+
நாம் அதற்கு ஒரு <DT>name</DT> ஐ <DT>assign</DT> செய்ய வேண்டும். பின்னர் அந்த <DT>name</DT> ஐ <DT>sort</DT> செய்து, பிறகு <DT>name</DT> ஐ சரிபார்க்க வேண்டும்.
|
| 437 |
+
|
| 438 |
+
00:12:40.909 --> 00:12:48.137
|
| 439 |
+
எடுத்துக்காட்டாக, 500 முதல் 0 வரைய���லான <DT>range</DT> of <DT>values</DT> ஐ எடுத்துக் கொள்வோம்.
|
| 440 |
+
|
| 441 |
+
00:12:50.287 --> 00:12:58.090
|
| 442 |
+
இப்போது நாம் <DNT>quicksort l</DNT> என்று சொன்னால், அதற்கு <DNT>of course</DNT> முடிவைக் கொடுக்க வேண்டும்.
|
| 443 |
+
|
| 444 |
+
00:13:01.020 --> 00:13:02.468
|
| 445 |
+
பிறகு <DNT>l</DNT> சரியாக <DT>sorted</DT> செய்யப்படும்.
|
| 446 |
+
|
| 447 |
+
00:13:04.311 --> 00:13:09.523
|
| 448 |
+
நீங்கள் அனைத்தையும் பார்க்க முடியாது. ஆனால் 83 84 முதல் நூறு வரை மற்றும் இரண்டு 500 வரை பார்க்க முடியும்.
|
| 449 |
+
|
| 450 |
+
00:13:10.995 --> 00:13:16.480
|
| 451 |
+
இப்போது, 1000 என்று சொன்னால், <DT>insertion sort</DT> ல் நமக்கு இருந்த அதே <DT>problem</DT> உள்ளது.
|
| 452 |
+
|
| 453 |
+
00:13:17.897 --> 00:13:22.596
|
| 454 |
+
பின்னர் நாம் இதை <DT>quicksort</DT> செய்ய முயற்சிக்கிறோம். நீங்கள் இதை <DT>recursion depth</DT> ஆல் பெறுவீர்கள்.
|
| 455 |
+
|
| 456 |
+
00:13:22.621 --> 00:13:29.644
|
| 457 |
+
<DT>worst case</DT> ல் நாம் பார்ப்பது போல, <DT>quick sort</DT> ஆனது <DT>insertion sort</DT> ஐ போலவே செயல்படுகிறது மற்றும் இது மோசமான case.
|
| 458 |
+
|
| 459 |
+
00:13:29.669 --> 00:13:33.759
|
| 460 |
+
இதைப் போக்க, நாம் வழக்கமான காரியத்தைச் செய்ய வேண்டும். <DT>SYS module</DT> ஐ <DT>import</DT> செய்ய வேண்டும்.
|
| 461 |
+
|
| 462 |
+
00:13:33.759 --> 00:13:35.409
|
| 463 |
+
<DT>recursion limit</DT> ஐ <DT>set</DT> செய்யவும்.
|
| 464 |
+
|
| 465 |
+
00:13:36.658 --> 00:13:43.652
|
| 466 |
+
எனவே, பொருத்தமான பெரிய ஒன்று பத்தாயிரம் அல்லது நூறாயிரம் என்று சொல்லுங்கள். பின்னர் அதை <DT>quicksort</DT> செய்ய சொன்னால் எந்த problem உம் இல்லை.
|
| 467 |
+
|
| 468 |
+
00:13:44.779 --> 00:13:49.299
|
| 469 |
+
<DT>python</DT> ல் இந்த <DT>recursion limit</DT> ஐ manually set செய்ய வேண்டிய மற்றொரு case இதுவாகும்.
|
| 470 |
+
|
| 471 |
+
00:13:49.647 --> 00:13:56.929
|
| 472 |
+
உண்மையில் நாம் பார்க்கக்கூடிய ஒரு விஷயம் என்னவென்றால், <DT>quicksort</DT> என்பது நாம் நம்புவது போல் நல்லதல்ல, ஏனெனில்.
|
| 473 |
+
|
| 474 |
+
00:13:57.008 --> 00:14:02.080
|
| 475 |
+
எடுத்துக்காட்டாக, 7500 என்று ஏதாவது <DT>size</DT> ஐ <DT>instance sort</DT> செய்யவும்.
|
| 476 |
+
|
| 477 |
+
00:14:05.504 --> 00:14:09.554
|
| 478 |
+
பின்னர் அது ஒரு புலப்படும் நேரம் எடுக்கும். எனவே, <DNT>n log n</DNT> என்று <DT>merge sort </DT> ஐ பார்த்தோம்.
|
| 479 |
+
|
| 480 |
+
00:14:09.790 --> 00:14:13.700
|
| 481 |
+
5,000 மற்றும் 10000 மற்றும் 100,000 கூட <DT>instantaneously</DT> செய்யும்.
|
| 482 |
+
|
| 483 |
+
00:14:13.832 --> 00:14:18.129
|
| 484 |
+
தெளிவாக <DT>quick sort</DT> மற்றும் <DT>merge sort </DT> செயல்படாது.
|
| 485 |
+
|
| 486 |
+
00:14:18.165 --> 00:14:22.480
|
| 487 |
+
மற்றும் உண்மையில் <DT>quick sort</DT> க்கு <DT>order</DT> <DNT>n log n</DNT> <DT>merge sort </DT> இல்லை என்பதை நாம் பார்ப்போம்.
|
| 488 |
+
|
| 489 |
+
00:14:22.511 --> 00:14:25.090
|
| 490 |
+
நாம் விரும்பியபடி நடத்தை.
|
| 491 |
+
|
| 492 |
+
00:14:25.090 --> 00:14:28.539
|
| 493 |
+
அதற்குக் காரணம், நாம் <DT>median</DT> ஐ பயன்படுத்தாமல், split செய்வதற்கான முதல் <DT>value</DT> ஐ பயன்படுத்துகிறோம்.
|
| 494 |
+
|
| 495 |
+
00:14:28.539 --> 00:14:33.909
|
| 496 |
+
அதை அடுத்த lecture ல் பார்ப்போம். ஏன் <DT>quick sort</DT> ல் உண்மையில் ஒரு worst case <DNT>order n log n algorithm</DNT> அல்ல.
|
Translated_SRT/Week3_Lecture4_Cleaned_Tagged.ta.srt
ADDED
|
@@ -0,0 +1,659 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
1
|
| 2 |
+
00:00:02,246 --> 00:00:06,190
|
| 3 |
+
<DT>merge sort </DT> என்பது <DT>order</DT> <DNT>n log n</DNT> <DT>sorting algorithm</DT> என்று பார்த்தோம்.
|
| 4 |
+
|
| 5 |
+
2
|
| 6 |
+
00:00:06,190 --> 00:00:10,509
|
| 7 |
+
ஆனால் இது சில குறைபாடுகளைக் கொண்டுள்ளது. இது சில நேரங்களில் <DT>impractical</DT> ஆகிறது.
|
| 8 |
+
|
| 9 |
+
3
|
| 10 |
+
00:00:10,849 --> 00:00:14,740
|
| 11 |
+
முக்கிய பிரச்சனை என்னவென்றால், <DT>merging</DT> க்கு <DT>extra space</DT> தேவைப்படுகிறது.
|
| 12 |
+
|
| 13 |
+
4
|
| 14 |
+
00:00:14,869 --> 00:00:19,076
|
| 15 |
+
<DT>recursion</DT> ஐ பயன்படுத்தாமல் <DT>implement merge sort </DT> செய்வது கடினம் என்பதையும் நாம் பார்த்தோம்.
|
| 16 |
+
|
| 17 |
+
5
|
| 18 |
+
00:00:19,101 --> 00:00:22,108
|
| 19 |
+
மற்றும் <DT>recursion</DT> <DT>programming language</DT> ல் அதன் சொந்த செலவைக் கொண்டுள்ளது.
|
| 20 |
+
|
| 21 |
+
6
|
| 22 |
+
00:00:24,841 --> 00:00:26,952
|
| 23 |
+
எனவே, <DT>space problem</DT> ஐ தீர்க்கலாம்.
|
| 24 |
+
|
| 25 |
+
7
|
| 26 |
+
00:00:27,736 --> 00:00:33,310
|
| 27 |
+
<DT>merge function</DT> ஐ <DT>implement</DT> செய்யும் <DT>பொருட்டு</DT>, <DT>merge sort </DT> க்கு <DT>extra space</DT> தேவைப்படுகிறது.
|
| 28 |
+
|
| 29 |
+
8
|
| 30 |
+
00:00:33,590 --> 00:00:38,500
|
| 31 |
+
நாம் ஏன் <DT>merge</DT> செய்ய வேண்டும்? நாம் <DT>merge</DT> செய்ய வேண்டியதன் காரணம், நாம் <DT>merge sort </DT> ஐ செய்யும்போது,
|
| 32 |
+
|
| 33 |
+
9
|
| 34 |
+
00:00:38,500 --> 00:00:45,759
|
| 35 |
+
நம்மிடம் <DT>initial list</DT> உள்ளது. பின்னர் அதை இரண்டு பகுதிகளாக split செய்கிறோம். ஆனால், பொதுவாக <DT>left</DT> இலிருந்து <DT>items</DT> கள் இருக்கலாம்.
|
| 36 |
+
|
| 37 |
+
10
|
| 38 |
+
00:00:45,759 --> 00:00:50,409
|
| 39 |
+
<DNT>right</DNT> இலிருந்து <DT>bigger than items</DT>. எனவே, <DT>instance</DT> ஆக நாம் சொன்னால்,
|
| 40 |
+
|
| 41 |
+
11
|
| 42 |
+
00:00:50,450 --> 00:00:54,250
|
| 43 |
+
<DT>left</DT> ல் <DT>even numbers</DT> மற்றும் <DNT>right</DNT> ல் <DT>odd numbers</DT>.
|
| 44 |
+
|
| 45 |
+
12
|
| 46 |
+
00:00:54,550 --> 00:00:58,900
|
| 47 |
+
இரண்டு பக்கங்களிலிருந்தும் <DT>numbers alternately</DT> எடுத்துக்கொண்டு <DT>merge</DT> செய்ய வேண்டும்.
|
| 48 |
+
|
| 49 |
+
13
|
| 50 |
+
00:00:59,630 --> 00:01:09,646
|
| 51 |
+
<DT>divided problem</DT> ன் <DT>left</DT> பக்கத்தில் உள்ள அனைத்தும் <DT>divided problem</DT> ன் <DNT>வலது</DNT> பக்கத்தில் உள்ள அனைத்தையும் விட சிறியதாக இருக்கும்படி <DT>arrange</DT> செய்தால்,
|
| 52 |
+
|
| 53 |
+
14
|
| 54 |
+
00:01:10,593 --> 00:01:12,146
|
| 55 |
+
பின்னர், நாம் அனைத்தையும் <DT>merge</DT> செய்ய தேவையில்லை.
|
| 56 |
+
|
| 57 |
+
15
|
| 58 |
+
00:01:12,699 --> 00:01:18,130
|
| 59 |
+
மேலும் இது <DT>merge</DT> செய்வதற்கு, கூடுதல் space தேவைப்படும் <DT>problem</DT> ஐ தவிர்க்கலாம்.
|
| 60 |
+
|
| 61 |
+
16
|
| 62 |
+
00:01:20,689 --> 00:01:23,702
|
| 63 |
+
<DT>merge</DT> இல்லாமல் எப்படி <DT>divide</DT> மற்றும் <DT>conquer</DT> செய்வது.
|
| 64 |
+
|
| 65 |
+
17
|
| 66 |
+
00:01:25,243 --> 00:01:27,659
|
| 67 |
+
<DT>median value</DT> நமக்குத் தெரியும் என்று வைத்துக்கொள்வோம்.
|
| 68 |
+
|
| 69 |
+
18
|
| 70 |
+
00:01:27,659 --> 00:01:33,716
|
| 71 |
+
ஒரு <DT>set</DT> ல் உள்ள <DT>median value</DT> என்பது <DT>half</DT> the <DT>elements</DT> are <DT>smaller than half</DT> are <DT>bigger</DT> ஆக இருக்கும் <DT>value</DT> என்பதை நினைவில் கொள்ளுங்கள்.
|
| 72 |
+
|
| 73 |
+
19
|
| 74 |
+
00:01:35,649 --> 00:01:42,124
|
| 75 |
+
<DT>median</DT> விட <DT>smaller than</DT> <DT>values</DT> அனைத்தையும் <DT>left half</DT> க்கும், <DT>median</DT> விட <DT>bigger than</DT> அனைத்தையும் <DNT>right half</DNT> க்கும் நகர்த்தலாம்.
|
| 76 |
+
|
| 77 |
+
20
|
| 78 |
+
00:01:43,883 --> 00:01:52,180
|
| 79 |
+
நாம் பார்ப்பது போல, <DT>list</DT> ன் <DT>length</DT> க்கு <DT>time proportional</DT> ஆக புதிய <DT>array</DT> வை உருவாக்காமல் இதைச் செய்யலாம்.
|
| 80 |
+
|
| 81 |
+
21
|
| 82 |
+
00:01:53,816 --> 00:02:00,989
|
| 83 |
+
இந்த <DT>rearrangement</DT> ஐ செய்த பிறகு, அனைத்து <DT>smaller values</DT> களையும் <DT>left half</DT> க்கும் <DT>bigger values</DT> களை <DNT>right half</DNT> க்கும் நகர்த்தவும்.
|
| 84 |
+
|
| 85 |
+
22
|
| 86 |
+
00:02:00,989 --> 00:02:06,443
|
| 87 |
+
இந்த <DT>divide</DT> மற்றும் <DT>conquer strategy</DT> ஐ நாம் <DT>recursively</DT> பயன்படுத்தலாம். மேலும் <DNT>right</DNT> மற்றும் <DT>left half</DT> ஐ தனித்தனியாக <DT>sort</DT> செய்யலாம்.
|
| 88 |
+
|
| 89 |
+
23
|
| 90 |
+
00:02:07,519 --> 00:02:12,520
|
| 91 |
+
மேலும் <DT>left half</DT> ல் உள்ள அனைத்தும், <DNT>right half</DNT> ல் உள்ள அனைத்தையும் விட <DT>சிறியது</DT> என்று நாம் உத்தரவாதம் அளித்துள்ளோம்.
|
| 92 |
+
|
| 93 |
+
24
|
| 94 |
+
00:02:13,019 --> 00:02:17,050
|
| 95 |
+
இது தானாகவே இதற்கு அர்த்தம் <DT>divide</DT> மற்றும் <DT>conquer</DT> step க்கு பிறகு,
|
| 96 |
+
|
| 97 |
+
25
|
| 98 |
+
00:02:17,050 --> 00:02:24,442
|
| 99 |
+
<DT>left half</DT> ஏற்கனவே <DNT>right half</DNT> க்கு கீழே இருப்பதால், non-trivial முறையில் answers களை combine செய்ய வேண்டிய அவசியமில்லை. நாம் <DT>merge</DT> செய்ய தேவையில்லை.
|
| 100 |
+
|
| 101 |
+
26
|
| 102 |
+
00:02:28,309 --> 00:02:34,210
|
| 103 |
+
இந்த <DT>strategy</DT> ஐ பயன்படுத்தினால், <DT>merge sort </DT> போன்ற ஒரு <DT>recursive equation</DT> ஐ பெறுவோம்.
|
| 104 |
+
|
| 105 |
+
27
|
| 106 |
+
00:02:34,210 --> 00:02:42,370
|
| 107 |
+
<DNT>length n</DNT> இன் <DT>list</DT> ஐ <DT>sort</DT> செய்வதற்கு <DT>time</DT> தேவைப்படும். முதலில் <DNT>size n</DNT> இன் இரண்டு <DT>lists</DT> களை 2 ஆல் <DT>sort</DT> செய்ய வேண்டும்.
|
| 108 |
+
|
| 109 |
+
28
|
| 110 |
+
00:02:42,370 --> 00:02:50,039
|
| 111 |
+
நாம் <DNT>order n </DNT> ஐ செய்வோம் <DT>merging</DT> ஆக அல்ல. <DT>list</DT> ஐ <DT>decompose</DT> செய்வதற்காக. அதனால் அனைத்து <DT>smaller values</DT> களும் <DT>left</DT> மற்றும் <DNT>right</DNT> இல் இருக்கும்.
|
| 112 |
+
|
| 113 |
+
29
|
| 114 |
+
00:02:50,064 --> 00:02:54,483
|
| 115 |
+
நாம் <DT>recursive step</DT> செய்வதற்கு முன் rearranging <DT>step</DT> <DNT>order n</DNT> ஆகும்.
|
| 116 |
+
|
| 117 |
+
30
|
| 118 |
+
00:02:54,508 --> 00:02:57,879
|
| 119 |
+
அதேசமயம் <DT>merge</DT> என்பது <DT>recursive step</DT> க்கு பின் வரும் <DT>step</DT> ஆகும்.
|
| 120 |
+
|
| 121 |
+
31
|
| 122 |
+
00:02:57,879 --> 00:03:03,879
|
| 123 |
+
இது முந்தைய <DT>case</DT> ல் <DNT>order n</DNT> ஆக இருந்தது. ஆனால் நாம் <DT>recurrence</DT> ஐ <DT>solve</DT>செய்தால் அதே ஒன்றுதான். நமக்கு மற்றொரு <DNT>order n log n algorithm</DNT> கிடைக்கும்.
|
| 124 |
+
|
| 125 |
+
32
|
| 126 |
+
00:03:08,730 --> 00:03:12,340
|
| 127 |
+
இந்த <DT>approach</DT> இல் பெரிய <DT>bottleneck</DT> என்னவென்றால் <DT>median</DT> ஐ கண்டறிவதாகும்.
|
| 128 |
+
|
| 129 |
+
33
|
| 130 |
+
00:03:13,190 --> 00:03:20,663
|
| 131 |
+
ஒரு <DT>list</DT> ஐ <DT>sorting</DT> செய்வதன் நன்மைகளில் ஒன்று, <DT>sorting</DT> க்கு பின் <DT>median</DT> ஐ middle <DT>element</DT> ஆக நாம் அடையாளம் காணலாம் என்பதை நினைவில் கொள்ளுங்கள்.
|
| 132 |
+
|
| 133 |
+
34
|
| 134 |
+
00:03:21,890 --> 00:03:24,336
|
| 135 |
+
இப்போது, இங்கே நாம் <DT>sorting</DT> செய்வதற்கு முன் <DT>median</DT> ஐ கேட்கிறோம்.
|
| 136 |
+
|
| 137 |
+
35
|
| 138 |
+
00:03:24,996 --> 00:03:28,539
|
| 139 |
+
ஆனால், நமது நோக்கம் <DT>sort</DT> செய்வது. அது <DT>paradoxical</DT> ஆகும்.
|
| 140 |
+
|
| 141 |
+
36
|
| 142 |
+
00:03:28,539 --> 00:03:33,219
|
| 143 |
+
<DT>sorting</DT>ன் <DT>output</DT> <DT>sorting</DT> ஆன <DT>input</DT> ஆக இருக்க வேண்டும் என நாம் விரும்பினால்.
|
| 144 |
+
|
| 145 |
+
37
|
| 146 |
+
00:03:34,892 --> 00:03:42,580
|
| 147 |
+
எனவே, <DT>list</DT> ஐ <DNT>split</DNT> செய்து <DT>element</DT> ன் மிகவும் எளிமையான தேர்வு மூலம் <DT>strategy</DT> யை முயற்சிக்க வேண்டும் என்பதே இதன் பொருள்.
|
| 148 |
+
|
| 149 |
+
38
|
| 150 |
+
00:03:42,825 --> 00:03:46,780
|
| 151 |
+
<DT>median</DT> ஐ தேடுவதற்குப் பதிலாக, <DNT>list A</DNT> இல் சில <DT>value</DT> ஐ பெறுவோம்.
|
| 152 |
+
|
| 153 |
+
39
|
| 154 |
+
00:03:46,780 --> 00:03:49,689
|
| 155 |
+
மற்றும் <DT>pivot element</DT> என அழைக்கப்படுவதைப் பயன்படுத்தவும்.
|
| 156 |
+
|
| 157 |
+
40
|
| 158 |
+
00:03:49,689 --> 00:03:56,769
|
| 159 |
+
இந்த <DT>pivot</DT> ஐ பொறுத்து <DNT>A</DNT> என்று பிரிக்கிறோம். இதன���ல் அனைத்து <DT>smaller elements</DT> களும் <DT>left</DT> ஆகவும், <DT>bigger elements</DT> கள் அனைத்தும் <DNT>right</DNT> ஆகவும் இருக்கும்.
|
| 160 |
+
|
| 161 |
+
41
|
| 162 |
+
00:04:00,223 --> 00:04:11,636
|
| 163 |
+
இந்த <DT>algorithm</DT> <DT>quick sort</DT> என்று அழைக்கப்படுகிறது. இது 1960 களில் <DT>Tony Four</DT> என்ற நபரால் கண்டுபிடிக்கப்பட்டது மற்றும் இது மிகவும் பிரபலமான <DT>sorting algorithms</DT> களில் ஒன்றாகும்.
|
| 164 |
+
|
| 165 |
+
42
|
| 166 |
+
00:04:12,103 --> 00:04:16,082
|
| 167 |
+
பொதுவாக <DT>array</DT> இன் <DT>list</DT> ல் முதல் <DT>element</DT> ஆக இருக்கும் <DT>pivot element</DT> ஐ தேர்வு செய்கிறோம்.
|
| 168 |
+
|
| 169 |
+
43
|
| 170 |
+
00:04:16,759 --> 00:04:22,500
|
| 171 |
+
இந்த <DT>pivot</DT> இன் முடிவைப் பொறுத்து <DT>lower part</DT> லும் <DT>upper part</DT> லும் <DNT>partition A</DNT> செய்கிறோம்.
|
| 172 |
+
|
| 173 |
+
44
|
| 174 |
+
00:04:22,500 --> 00:04:24,943
|
| 175 |
+
எனவே, அனைத்து <DT>smaller elements</DT> களையும் <DT>left</DT> க்கு நகர்த்துகிறோம்.
|
| 176 |
+
|
| 177 |
+
45
|
| 178 |
+
00:04:25,056 --> 00:04:28,149
|
| 179 |
+
மற்றும் அனைத்து <DT> bigger elements</DT> முதல் <DNT>right</DNT> வரை <DT>pivotal</DT> தேர்வைப் பொறுத்து.
|
| 180 |
+
|
| 181 |
+
46
|
| 182 |
+
00:04:29,523 --> 00:04:34,163
|
| 183 |
+
இரண்டிற்கும் இடையே <DT>pivot</DT> வருவதை உறுதிசெய்கிறோம். ஏனெனில் <DT>array</DT> ல் முதல் <DT>element</DT> <DT>pivot</DT> ஆக எடுத்துள்ளோம்.
|
| 184 |
+
|
| 185 |
+
47
|
| 186 |
+
00:04:34,190 --> 00:04:41,036
|
| 187 |
+
இதற்குப் பிறகு நாம் அதை <DT>lower</DT> மற்றும் <DT>upper bound</DT> க்கு இடையில் உள்ள <DT>center</DT> க்கு நகர்த்த விரும்புகிறோம். பின்னர், இரண்டு <DT>partitions</DT> களை <DT>recursively sort</DT> செய்கிறோம்.
|
| 188 |
+
|
| 189 |
+
48
|
| 190 |
+
00:04:44,456 --> 00:04:48,910
|
| 191 |
+
ஒரு பொதுவான <DT>list</DT> ல் <DT>quick sort</DT> எவ்வாறு வேலை செய்யும் என்பது பற்றிய <DT>high level view</DT> இங்கே உள்ளது.
|
| 192 |
+
|
| 193 |
+
49
|
| 194 |
+
00:04:48,910 --> 00:04:56,143
|
| 195 |
+
இது தான் நமது <DT>list</DT> என்று வைத்துக்கொள்வோம். <DT>list</DT> ன் தொடக்கத்தை <DT>pivot element</DT> ஆக முதல் <DT>element</DT> ஐ அடையாளம் காண்போம்.
|
| 196 |
+
|
| 197 |
+
50
|
| 198 |
+
00:04:56,950 --> 00:05:01,569
|
| 199 |
+
இப்போது, மீதமுள்ள <DT>elements</DT> களில், எந்த <DNT>ones</DNT> <DT>smaller</DT> மற்றும் எந்த <DNT>ones</DNT> <DT>bigger</DT> என்பதைக் கண்டுபிடிக்க வேண்டும்.
|
| 200 |
+
|
| 201 |
+
51
|
| 202 |
+
00:05:02,410 --> 00:05:11,510
|
| 203 |
+
இதை எப்படிச் செய்வோம் என்று சொல்லாமல், 32, 22 மற்றும் 13 ஆகிய மூன்று <DT>elements</DT> களை <DT>smaller</DT> ஆகவும் <DNT>yellow</DNT> ல் <DT>marked </DT> செய்யபட்டதாகவும் அடையாளப்படுத்துகிறோம்.
|
| 204 |
+
|
| 205 |
+
52
|
| 206 |
+
00:05:11,810 --> 00:05:15,069
|
| 207 |
+
மற்றும் <DNT>green</DNT> இல் <DT>marked </DT> செய்யப்பட்ட மற்ற 4 <DT>elements</DT> கள் பெரியவை.
|
| 208 |
+
|
| 209 |
+
53
|
| 210 |
+
00:05:16,160 --> 00:05:20,040
|
| 211 |
+
முதல் <DT>step</DT> உண்மையில் இந்த <DT>criterion</DT> ஐ பொறுத்து <DT>partition</DT> செய்ய வேண்டும்.
|
| 212 |
+
|
| 213 |
+
54
|
| 214 |
+
00:05:20,040 --> 00:05:24,810
|
| 215 |
+
நாம் இந்த <DT>elements</DT> களை நகர்த்த வேண்டும். அதனால் அவை இரண்டு <DT>blocks</DT> ஆக வரும்.
|
| 216 |
+
|
| 217 |
+
55
|
| 218 |
+
00:05:24,810 --> 00:05:27,550
|
| 219 |
+
அந்த 13, 32 மற்றும் 22 <DT>left</DT> பக்கம் வரும்.
|
| 220 |
+
|
| 221 |
+
56
|
| 222 |
+
00:05:27,550 --> 00:05:33,430
|
| 223 |
+
63 57, 91 மற்றும் 78, <DNT>right</DNT> மற்றும் <DT>pivot element</DT> 43 <DT>middle</DT> ல் வருகிறது.
|
| 224 |
+
|
| 225 |
+
57
|
| 226 |
+
00:05:33,947 --> 00:05:36,781
|
| 227 |
+
இது <DT>rearranging step</DT> மற்றும் இப்போது
|
| 228 |
+
|
| 229 |
+
58
|
| 230 |
+
00:05:37,060 --> 00:05:41,529
|
| 231 |
+
நாம் <DNT>yellow bits</DNT> மற்றும் <DNT>green bits</DNT> ஆகியவற்றை <DT>recursively sort</DT> செய்வோம். பிறகு அதைச் செய்யலாம் என்று கருதினால்,
|
| 232 |
+
|
| 233 |
+
59
|
| 234 |
+
00:05:41,529 --> 00:05:45,480
|
| 235 |
+
ந���்மிடம் ஒரு <DT>sorted array</DT> உள்ளது மற்றும் அனைத்து <DNT>yellow</DNT> பொருட்களும் <DT>smaller than </DT>43 ஆக இருப்பதை கவனிக்கவும்.
|
| 236 |
+
|
| 237 |
+
60
|
| 238 |
+
00:05:45,480 --> 00:05:49,509
|
| 239 |
+
மேலும் அனைத்து <DNT>green</DNT> விஷயங்களும் <DT>bigger than</DT> 43. மேலும் <DT>merging</DT> செய்ய தேவையில்லை.
|
| 240 |
+
|
| 241 |
+
61
|
| 242 |
+
00:05:52,243 --> 00:05:54,899
|
| 243 |
+
எனவே, <DT>partitioning</DT> எவ்வாறு செயல்படுகிறது என்பதைப் பார்ப்போம்.
|
| 244 |
+
|
| 245 |
+
62
|
| 246 |
+
00:05:54,899 --> 00:05:59,350
|
| 247 |
+
இங்கே நம்மிடம் முந்தைய <DT>list</DT> ல் உள்ளது. மேலும் 43 ஐ நமது <DT>pivot element</DT> ஆக <DT>marked </DT> செய்துள்ளோம்.
|
| 248 |
+
|
| 249 |
+
63
|
| 250 |
+
00:05:59,350 --> 00:06:03,112
|
| 251 |
+
மீதமுள்ள <DT>elements</DT> களை <DT>scan</DT> செய்து அவற்றை <DT>divide</DT> செய்ய விரும்புகிறோம்.
|
| 252 |
+
|
| 253 |
+
64
|
| 254 |
+
00:06:03,137 --> 00:06:08,742
|
| 255 |
+
இரண்டு குழுக்கள், <DT>smaller than</DT> 43, <DNT>yellow ones</DNT>, <DT>bigger than</DT> 43, <DNT>green ones</DNT> மற்றும் அவற்றை <DT>rearrange</DT> செய்யவும்.
|
| 256 |
+
|
| 257 |
+
65
|
| 258 |
+
00:06:09,962 --> 00:06:13,839
|
| 259 |
+
நாம் என்ன செய்வோம் இரண்டு <DT>pointers</DT> கள் <DNT>yellow pointer</DNT> மற்றும் <DNT>green pointer</DNT> ஐ வைத்திருப்போம்.
|
| 260 |
+
|
| 261 |
+
66
|
| 262 |
+
00:06:14,155 --> 00:06:19,081
|
| 263 |
+
மேலும் பொதுவான விதி என்னவென்றால், எந்த ஒரு <DT>point</DT>லும் நாம் சிறிது <DT>distance</DT> ல் இருப்போம்.
|
| 264 |
+
|
| 265 |
+
67
|
| 266 |
+
00:06:19,355 --> 00:06:24,129
|
| 267 |
+
நான் <DNT>orange</DNT> நிறத்தில் வரையப் போகும் <DT>visible</DT> <DNT>yellow pointer</DNT> மற்றும் <DNT>green pointer</DNT>.
|
| 268 |
+
|
| 269 |
+
68
|
| 270 |
+
00:06:24,129 --> 00:06:29,165
|
| 271 |
+
இவை இந்த <DT>order</DT> ல் நகரும் <DNT>orange pointer</DNT> அல்லது <DNT>yellow pointer</DNT> எப்போதும் <DNT>green pointer</DNT> பின்னால் இருக்கும்.
|
| 272 |
+
|
| 273 |
+
69
|
| 274 |
+
00:06:29,565 --> 00:06:35,397
|
| 275 |
+
நீங்கள் பராமரிக்கும் <DT>inductive property</DT> என்னவென்றால், இந்த <DT>elements</DT> கள் 43 ஐ விட <DT>smaller than</DT> அல்லது சமமாகவோ இருக்கும்.
|
| 276 |
+
|
| 277 |
+
70
|
| 278 |
+
00:06:35,910 --> 00:06:40,643
|
| 279 |
+
இந்த <DT>elements</DT> கள் <DT>bigger than</DT> 43 மற்றும் இந்த <DT>elements</DT> கள் <DT>தெரியவில்லை</DT>.
|
| 280 |
+
|
| 281 |
+
71
|
| 282 |
+
00:06:42,577 --> 00:06:46,139
|
| 283 |
+
நாம் செய்ய முயற்சிப்பது என்னவென்றால், <DT>left</DT> ல் இருந்து <DNT>right</DNT> க்கு நகர்த்த முயற்சிக்கிறோம்.
|
| 284 |
+
|
| 285 |
+
72
|
| 286 |
+
00:06:46,139 --> 00:06:49,589
|
| 287 |
+
ஒவ்வொரு முறையும் <DT>unknown elements</DT> ஐ காணும் அனைத்து <DT>unknown elements</DT> களையும் <DT>classify</DT> செய்யவும்.
|
| 288 |
+
|
| 289 |
+
73
|
| 290 |
+
00:06:49,552 --> 00:06:52,660
|
| 291 |
+
இந்த property ஐ நாம் maintain பண்ண இரண்டு <DT>pointers</DT> களை மாற்றுவோம்.
|
| 292 |
+
|
| 293 |
+
74
|
| 294 |
+
00:06:52,700 --> 00:06:57,699
|
| 295 |
+
43 க்கும் முதல் <DT>pointer</DT> க்கும் இடையில் <DT>elements smaller than</DT> 43 அல்லது அதற்கு சமமாக உள்ளன.
|
| 296 |
+
|
| 297 |
+
75
|
| 298 |
+
00:06:57,699 --> 00:07:01,494
|
| 299 |
+
முதல் <DT>pointer</DT> க்கும் இரண்டாவது <DT>pointer</DT> க்கும் இடையில் நம் <DT>elements</DT> கள் கண்டிப்பாக 43 க்கு <DT>greater</DT> ஆக உள்ளது.
|
| 300 |
+
|
| 301 |
+
76
|
| 302 |
+
00:07:01,752 --> 00:07:05,230
|
| 303 |
+
மற்றும் <DNT>green pointer</DNT> இன் <DNT>right</DNT> பக்கம் இன்னும் <DT>scanned</DT> செய்யப்படாதவை உள்ளன.
|
| 304 |
+
|
| 305 |
+
77
|
| 306 |
+
00:07:07,023 --> 00:07:10,000
|
| 307 |
+
எனவே, ஆரம்பத்தில் எதுவும் தெரியவில்லை. பின்னர் நாம் 32 ஐ பார்க்கிறோம்.
|
| 308 |
+
|
| 309 |
+
78
|
| 310 |
+
00:07:10,000 --> 00:07:14,618
|
| 311 |
+
32 43 ஐ விட <DT>smaller than</DT> ஆக இருப்பதால், <DNT>yellow pointer</DNT> ஐ நகர்த்துகிறோம். மேலும் <DNT>green pointer</DNT> ஐ உடன் தள்ளுகிறோம்.
|
| 312 |
+
|
| 313 |
+
79
|
| 314 |
+
00:07:14,643 --> 00:07:16,949
|
| 315 |
+
தெரியாத விஷயம் 22 இல் தொடங்குகிறது.
|
| 316 |
+
|
| 317 |
+
80
|
| 318 |
+
00:07:16,949 --> 00:07:22,060
|
| 319 |
+
<DNT>yellow</DNT> மற்றும் <DNT>green pointer</DNT> ஆகியவற்றுக்கு இடையே எதுவும் இல்லை. <DT>value bigger than</DT> 43 ஐ நாம் இன்னும் கண்டுபிடிக்கவில்லை.
|
| 320 |
+
|
| 321 |
+
81
|
| 322 |
+
00:07:22,949 --> 00:07:24,910
|
| 323 |
+
எனவே, 22 க்கும் அதே நடக்கும்.
|
| 324 |
+
|
| 325 |
+
82
|
| 326 |
+
00:07:24,910 --> 00:07:28,629
|
| 327 |
+
இப்போது, 78ஐ பார்க்கும்போது, 78 <DT>bigger than</DT> 43 என்பதைக் கவனிக்கிறோம்.
|
| 328 |
+
|
| 329 |
+
83
|
| 330 |
+
00:07:29,008 --> 00:07:33,635
|
| 331 |
+
இப்போது, நாம் <DNT>green pointer</DNT> ஐ மட்டுமே நகர்த்துகிறோம். மேலும் <DNT>yellow pointer</DNT> ஐ அல்ல. இப்போது, இந்த 3 இடைவெளிகளை முன்பு போலவே வைத்திருக்கிறோம்.
|
| 332 |
+
|
| 333 |
+
84
|
| 334 |
+
00:07:33,935 --> 00:07:36,819
|
| 335 |
+
இது 43 க்கு குறைவான <DT>equal</DT> ஆன பகுதி என்பதை நினைவில் கொள்ளுங்கள்.
|
| 336 |
+
|
| 337 |
+
85
|
| 338 |
+
00:07:36,819 --> 00:07:44,350
|
| 339 |
+
இது <DT>greater than</DT> 43 உள்ள பகுதி மற்றும் இந்த பகுதி unknown <DNT>right</DNT>, நாம் இந்த வழியில் தொடர்கிறோம்.
|
| 340 |
+
|
| 341 |
+
86
|
| 342 |
+
00:07:44,350 --> 00:07:48,189
|
| 343 |
+
இப்போது நாம் 63 ஐ பார்க்கிறோம். மீண்டும் 63 <DNT>green zone</DNT> ஐ நீட்டிக்கிறது.
|
| 344 |
+
|
| 345 |
+
87
|
| 346 |
+
00:07:48,189 --> 00:07:52,540
|
| 347 |
+
57 ஒரு <DNT>green zone</DNT> ஐ நீட்டிக்கிறது 91 ஒரு <DNT>green zone</DNT> ஐ நீட்டிக்கிறது.
|
| 348 |
+
|
| 349 |
+
88
|
| 350 |
+
00:07:52,540 --> 00:07:56,470
|
| 351 |
+
இப்போது, 13 ஐ கண்டுபிடிக்கும்போது நாம் ஏதாவது செய்ய வேண்டும்.
|
| 352 |
+
|
| 353 |
+
89
|
| 354 |
+
00:07:56,470 --> 00:08:00,100
|
| 355 |
+
13 என்பது இப்போது <DNT>yellow zone</DNT> ல் சேர்க்கப்பட வேண்டிய ஒரு <DT>element</DT>.
|
| 356 |
+
|
| 357 |
+
90
|
| 358 |
+
00:08:00,205 --> 00:08:03,705
|
| 359 |
+
ஒரு <DT>strategy</DT> நிறைய மாற்றங்களைச் செய்ய வேண்டும்.
|
| 360 |
+
|
| 361 |
+
91
|
| 362 |
+
00:08:03,730 --> 00:08:07,360
|
| 363 |
+
நாம் 13 ஐ 22 இருக்கும் இடத்திற்கு அல்லது 22 க்குப் பிறகு நகர்த்துகிறோம்.
|
| 364 |
+
|
| 365 |
+
92
|
| 366 |
+
00:08:07,360 --> 00:08:10,180
|
| 367 |
+
மேலும் 78 இல் இருந்து எல்லாவற்றையும் <DNT>right</DNT> க்கு தள்ளுகிறோம்.
|
| 368 |
+
|
| 369 |
+
93
|
| 370 |
+
00:08:10,250 --> 00:08:15,220
|
| 371 |
+
ஆனால் உண்மையில், ஒரு புத்திசாலித்தனமான <DT>strategy</DT> என்னவென்றால், 13 இங்கே செல்ல வேண்டும் என்று சொல்வது.
|
| 372 |
+
|
| 373 |
+
94
|
| 374 |
+
00:08:17,605 --> 00:08:21,519
|
| 375 |
+
நாம் space ஐ உருவாக்க வேண்டும். ஆனால் <DT>space</DT> ஐ உருவாக்குவதற்கு பதிலாக.
|
| 376 |
+
|
| 377 |
+
95
|
| 378 |
+
00:08:21,519 --> 00:08:30,399
|
| 379 |
+
எப்படியும் <DNT>green</DNT> விஷயங்களை நாம் <DT>sort</DT> செய்யபோகிறோம். அது ஒரு பொருட்டல்ல என்று சொல்லலாம். இரண்டையும் எந்த வழியில் <DT>sort</DT> செய்கிறோம் என்பது எப்படி முக்கியம். இந்த 78ஐ எடுத்து 13க்கு நகர்த்துவோம்.
|
| 380 |
+
|
| 381 |
+
96
|
| 382 |
+
00:08:30,399 --> 00:08:33,009
|
| 383 |
+
எந்த மாற்றத்தையும் செய்வதற்கு பதிலாக.
|
| 384 |
+
|
| 385 |
+
97
|
| 386 |
+
00:08:33,009 --> 00:08:36,370
|
| 387 |
+
<DNT>green</DNT> zone ல் முதல் <DT>element</DT> ஐ <DT>exchange</DT> செய்கிறோம்.
|
| 388 |
+
|
| 389 |
+
98
|
| 390 |
+
00:08:36,370 --> 00:08:38,320
|
| 391 |
+
நாம் இதுவரை பார்க்கும் <DT>element</DT> உடன்.
|
| 392 |
+
|
| 393 |
+
99
|
| 394 |
+
00:08:38,320 --> 00:08:41,980
|
| 395 |
+
அது தானாகவே <DNT>yellow zone</DNT> மற்றும் <DNT>green zone</DNT> இரண்டையும் சரியாக நீட்டிக்கும்.
|
| 396 |
+
|
| 397 |
+
100
|
| 398 |
+
00:08:42,080 --> 00:08:49,299
|
| 399 |
+
நமது அடுத்த <DT>step</DT> 13 <DT>smaller than</DT> 43 என்பதை கண்டறிந்து, அதை 73 உடன் <DT>இடமாற்று</DT> செய்வது.
|
| 400 |
+
|
| 401 |
+
101
|
| 402 |
+
00:08:49,399 --> 00:08:54,070
|
| 403 |
+
இப்போது, நம்மிடம் உள்ள <DT>pivot</DT> ன் <DNT>right</DNT> க்கு ஒரு <DT>intermediate stage</DT> ஐ அடைந்துள்ளோம்.
|
| 404 |
+
|
| 405 |
+
102
|
| 406 |
+
00:08:54,070 --> 00:08:58,360
|
| 407 |
+
எல்லாவற்றையும் scanned செய்து, அவற்றை <DT>smaller</DT> ஆக வகைப்படுத்தியுள்ளோம்.
|
| 408 |
+
|
| 409 |
+
103
|
| 410 |
+
00:08:58,360 --> 00:08:59,889
|
| 411 |
+
மற்றும் <DT>bigger</DT> ஐயும்.
|
| 412 |
+
|
| 413 |
+
104
|
| 414 |
+
00:09:00,716 --> 00:09:04,216
|
| 415 |
+
இப்போது, <DNT>yellow</DNT> விஷயங்களை 43க்கு <DT>left</DT> பக்கம் <DT>push</DT> செய்ய வேண்டும்.
|
| 416 |
+
|
| 417 |
+
105
|
| 418 |
+
00:09:05,036 --> 00:09:09,165
|
| 419 |
+
இப்போது, <DNT>yellow zone</DNT> ல் 13ஐ சேர்த்தபோது பார்த்த அதே <DT>problem</DT> மீண்டும் ஒருமுறை நமக்கு வந்துள்ளது.
|
| 420 |
+
|
| 421 |
+
106
|
| 422 |
+
00:09:09,190 --> 00:09:13,210
|
| 423 |
+
நாம் 43 ஐ சரியான இடத்திற்கு நகர்த்தினால், இங்கே அனைத்தையும் <DNT>left</DNT> க்கு நகர்த்த வேண்டும்.
|
| 424 |
+
|
| 425 |
+
107
|
| 426 |
+
00:09:13,404 --> 00:09:18,940
|
| 427 |
+
ஆனால், அதற்குப் பதிலாக இந்த 13ஐ <DNT>yellow zone</DNT> ல் கடைசி <DT>element</DT> ஆக எடுத்துக்கொள்ளலாம்.
|
| 428 |
+
|
| 429 |
+
108
|
| 430 |
+
00:09:18,940 --> 00:09:22,149
|
| 431 |
+
மற்றும் அதை அங்கே <DT>replace</DT> செய்யவும். 32 மற்றும் 22 ஐ shift செய்ய வேண்டாம்.
|
| 432 |
+
|
| 433 |
+
109
|
| 434 |
+
00:09:22,149 --> 00:09:26,759
|
| 435 |
+
இது <DT>order</DT> ஐ சீர்குலைக்கிறது. ஆனால் எப்படியும் இது <DT>unsorted</DT> செய்யாமல், <DT>unsorted</DT> ஆக உள்ளது.
|
| 436 |
+
|
| 437 |
+
110
|
| 438 |
+
00:09:27,632 --> 00:09:29,889
|
| 439 |
+
நாம் இதை செய்கிறோம். இப்போது நம்மிடம் உள்ளது.
|
| 440 |
+
|
| 441 |
+
111
|
| 442 |
+
00:09:30,001 --> 00:09:36,171
|
| 443 |
+
நாம் விரும்பியபடி <DT>array rearranged</DT> செய்யப்பட்டது. எனவே, <DT>left</DT> ல் உள்ள இவை அனைத்தும் <DT>smaller than</DT> <DT>pivot</DT>.
|
| 444 |
+
|
| 445 |
+
112
|
| 446 |
+
00:09:37,244 --> 00:09:41,856
|
| 447 |
+
<DT>pivot</DT> நடுவில் உள்ளது. மற்றும் <DNT>right</DNT> ல் உள்ள அனைத்தும் <DT>bigger than</DT> <DT>pivot</DT>.
|
| 448 |
+
|
| 449 |
+
113
|
| 450 |
+
00:09:46,550 --> 00:09:53,830
|
| 451 |
+
இங்கே <DT>python</DT> இன் ஒரு <DT>implementation</DT> உள்ளது. <DT>quick sort</DT> என்பது <DT>merge sort </DT> மற்றும் <DT>binary research</DT> போன்றவற்றைக் கொண்டிருக்கும் என்பதை நினைவில் கொள்ளவும்.
|
| 452 |
+
|
| 453 |
+
114
|
| 454 |
+
00:09:53,830 --> 00:09:58,690
|
| 455 |
+
<DT>smaller</DT> மற்றும் <DT>smaller segments</DT> ல் அதை மீண்டும் மீண்டும் பயன்படுத்துகிறோம். பொதுவாக நாம் அதை <DT>pass</DT> செய்யவும்.
|
| 456 |
+
|
| 457 |
+
115
|
| 458 |
+
00:09:58,690 --> 00:10:03,523
|
| 459 |
+
நாம் <DNT>call A</DNT> என்ற <DT>list</DT> க்கும், <DT>segment</DT> ன் <DT>end points</DT> ஆன <DNT>left</DNT> மற்றும் <DNT>right</DNT>.
|
| 460 |
+
|
| 461 |
+
116
|
| 462 |
+
00:10:03,548 --> 00:10:07,238
|
| 463 |
+
நாம் ஒரு <DNT>slice l </DNT> முதல் <DNT>r minus 1</DNT> வரை செய்கிறோம்.
|
| 464 |
+
|
| 465 |
+
117
|
| 466 |
+
00:10:08,244 --> 00:10:13,210
|
| 467 |
+
இந்த <DT>slice</DT> 1 அல்லது 0 <DT>length</DT> ஆக இருந்தால், நாம் எதுவும் செய்ய மாட்டோம்.
|
| 468 |
+
|
| 469 |
+
118
|
| 470 |
+
00:10:14,223 --> 00:10:17,320
|
| 471 |
+
இல்லையெனில், நாம் முன்பு இருந்த இந்த <DT>partitioning strategy</DT> ஐ பின்பற்றுவோம்.
|
| 472 |
+
|
| 473 |
+
119
|
| 474 |
+
00:10:17,708 --> 00:10:22,120
|
| 475 |
+
அதாவது <DNT>l</DNT> இலிருந்து <DNT>r minus 1</DNT> வரை <DT>sorting</DT> செய்கிறோம்.
|
| 476 |
+
|
| 477 |
+
120
|
| 478 |
+
00:10:22,120 --> 00:10:24,220
|
| 479 |
+
எனவே, <DT>position l</DT>.
|
| 480 |
+
|
| 481 |
+
121
|
| 482 |
+
00:10:24,379 --> 00:10:25,899
|
| 483 |
+
இது <DT>pivot</DT> ஆகும்.
|
| 484 |
+
|
| 485 |
+
122
|
| 486 |
+
00:10:26,793 --> 00:10:29,671
|
| 487 |
+
<DNT>right</DNT> முதலில் இங்கே <DNT>yellow pointer</DNT> ஐ வைப்போம்.
|
| 488 |
+
|
| 489 |
+
123
|
| 490 |
+
00:10:31,011 --> 00:10:33,635
|
| 491 |
+
<DNT>yellow zone</DNT> இன் முடிவு என்று கூறுகிறது.
|
| 492 |
+
|
| 493 |
+
124
|
| 494 |
+
00:10:34,005 --> 00:10:38,500
|
| 495 |
+
உண்மையில் <DT>pivot</DT> உள்ளது அங்கு எதுவும் இல்லை. <DNT>yellow</DNT> என்பது <DNT>l plus 1</DNT> ஆகும்.
|
| 496 |
+
|
| 497 |
+
125
|
| 498 |
+
00:10:38,500 --> 00:10:50,781
|
| 499 |
+
இப்போது <DNT>green</DNT>ஐ தொடர அனுமதிக்கிறோம். ஒவ்வொரு <DT>time</DT>ம் <DNT>green</DNT> இல் ஒரு <DT>element</DT> ஐ பார்க்கும்போது புதிய <DNT>green</DNT> ஒன்���ைக் காட்டிலும் <DT>smaller than</DT> ஆக இருக்கும் <DT>pivot</DT> ஆகும். இது <DT>pivot</DT> என்பதை நினைவில் கொள்ளுங்கள்.
|
| 500 |
+
|
| 501 |
+
126
|
| 502 |
+
00:10:51,965 --> 00:10:55,661
|
| 503 |
+
<DNT>right</DNT> நாம் எப்போதாவது ஒரு <DNT>green</DNT> ஐ பார்த்தால், அடுத்த <DT>value</DT> ஐ.
|
| 504 |
+
|
| 505 |
+
127
|
| 506 |
+
00:10:55,686 --> 00:10:57,580
|
| 507 |
+
சரிபார்க்கப்பட வேண்டியதை விட <DT>smaller than</DT> அல்லது சமமானது.
|
| 508 |
+
|
| 509 |
+
128
|
| 510 |
+
00:10:57,590 --> 00:11:01,714
|
| 511 |
+
நாம் <DT>exchange</DT> செய்கிறோம். இதனால் இந்த <DT>value</DT> ஐ <DNT>yellow zone</DNT> ன் முடிவுக்குக் கொண்டு வருகிறோம்.
|
| 512 |
+
|
| 513 |
+
129
|
| 514 |
+
00:11:01,739 --> 00:11:03,220
|
| 515 |
+
இதைத்தான் 13ல் செய்தோம்.
|
| 516 |
+
|
| 517 |
+
130
|
| 518 |
+
00:11:03,344 --> 00:11:07,590
|
| 519 |
+
பின்னர், <DNT>yellow pointer</DNT> ஐ நகர்த்துகிறோம். இல்லையெனில் கண்டிப்பாக <DT>bigger</DT> <DT>value</DT> ஐ கண்டால் நகர்த்துவோம்.
|
| 520 |
+
|
| 521 |
+
131
|
| 522 |
+
00:11:07,590 --> 00:11:11,860
|
| 523 |
+
<DNT>green pointer</DNT> மட்டுமே <DT>for loop</DT> ஆல் மறைமுகமாக செய்யப்படுகிறது. மற்றொன்றை நகர்த்த மாட்டோம்.
|
| 524 |
+
|
| 525 |
+
132
|
| 526 |
+
00:11:11,929 --> 00:11:14,883
|
| 527 |
+
இதன் முடிவில் நமக்கு <DT>pivot</DT> உள்ளது.
|
| 528 |
+
|
| 529 |
+
133
|
| 530 |
+
00:11:15,894 --> 00:11:19,784
|
| 531 |
+
நாம் <DT>pivot</DT> க்கு சமமானதைக் காட்டிலும் குறைவானதைக் கொண்டுள்ளோம். பின்னர் <DT>greater than pivot</DT> ம் கொண்டுள்ளோம்.
|
| 532 |
+
|
| 533 |
+
134
|
| 534 |
+
00:11:19,809 --> 00:11:27,914
|
| 535 |
+
இந்த விதியின் முடிவில் நாம் அடைந்த அந்த intermediate stage இதுதான். இப்போது, நாம் <DT>pivot</DT> ஐ கண்டுபிடித்து சரியான இடத்திற்கு நகர்த்த வேண்டும். எனவே, <DNT>yellow</DNT> என்பதை நினைவில் கொள்ளுங்கள்.
|
| 536 |
+
|
| 537 |
+
135
|
| 538 |
+
00:11:29,241 --> 00:11:32,769
|
| 539 |
+
<DNT>yellow</DNT> <DNT>last</DNT> க்கு அப்பால் உள்ள <DT>position</DT> ஐ சுட்டிக்காட்டுகிறது.
|
| 540 |
+
|
| 541 |
+
136
|
| 542 |
+
00:11:32,769 --> 00:11:37,440
|
| 543 |
+
<DT>element அதை விட சிறியது</DT>. <DNT>yellow</DNT> இதற்கு முன் எப்போதும் ஒரு <DT>value</DT> ஆகும்.
|
| 544 |
+
|
| 545 |
+
137
|
| 546 |
+
00:11:37,440 --> 00:11:40,396
|
| 547 |
+
<DNT>yellow</DNT> minus 1 இன் <DT>value</DT> ஐ எடுத்து, <DT>left value</DT> உடன் <DT>exchange</DT> செய்வோம்.
|
| 548 |
+
|
| 549 |
+
138
|
| 550 |
+
00:11:41,414 --> 00:11:48,765
|
| 551 |
+
இப்போது நாம் செய்ய வேண்டியது என்னவென்றால், நம்மிடம் இப்போது <DNT> p, p and greater than p</DNT> ஐ விட குறைவாக உள்ளது.
|
| 552 |
+
|
| 553 |
+
139
|
| 554 |
+
00:11:49,627 --> 00:12:01,350
|
| 555 |
+
இங்குதான் <DNT>yellow</DNT> <DNT>சரியானது</DNT>. நாம் 0 இலிருந்து <DNT>yellow</DNT> minus 1 க்கு செல்ல வேண்டும். மீண்டும் <DNT>sort p </DNT> ஐ விரும்பவில்லை. ஏனெனில் <DNT>p</DNT> ஏற்கனவே சரியான இடத்தில் வைக்கப்பட்டுள்ளது.
|
| 556 |
+
|
| 557 |
+
140
|
| 558 |
+
00:12:01,350 --> 00:12:06,391
|
| 559 |
+
<DNT>L</DNT> இலிருந்து <DNT>yellow</DNT> minus 1 ஆகவும், <DNT>yellow</DNT> இலிருந்து <DNT>right</DNT> முனையிலும் <DT>quick sort</DT> செய்வோம்.
|
| 560 |
+
|
| 561 |
+
141
|
| 562 |
+
00:12:13,070 --> 00:12:17,070
|
| 563 |
+
<DT>slide</DT> ல் பார்த்த <DT>python code</DT> ஐ இங்கே ஒரு <DT>file</DT> ல் எழுதியுள்ளோம்.
|
| 564 |
+
|
| 565 |
+
142
|
| 566 |
+
00:12:17,070 --> 00:12:20,320
|
| 567 |
+
slide ல் இருந்த அதே <DT>code</DT> இதுதானா என்பதை சரிபார்க்கலாம்.
|
| 568 |
+
|
| 569 |
+
143
|
| 570 |
+
00:12:20,345 --> 00:12:28,786
|
| 571 |
+
நாம் அதை முயற்சி செய்து <DT>run</DT> செய்யலாம் மற்றும் அது செயல்படுகிறதா என்று சரிபார்க்கலாம். <DT>call python</DT>, இந்த <DT>function</DT> ஐ <DT>import</DT> செய்கிறோம்.
|
| 572 |
+
|
| 573 |
+
144
|
| 574 |
+
00:12:32,849 --> 00:12:37,699
|
| 575 |
+
இது மீண்டும் ஒரு வகையான <DT>sorts</DT> <DT>function</DT> என்பதை நினைவில் கொள்ளுங்கள். எதையாவது <DT>sort</DT> செய்து அதன் விளைவைப் பார்க்க விரும்பினால்.
|
| 576 |
+
|
| 577 |
+
145
|
| 578 |
+
00:12:37,753 --> 00:12:40,870
|
| 579 |
+
நாம் அதற்கு ஒரு <DT>name</DT> ஐ <DT>assign</DT> செய்ய வேண்டும். பின்னர் அந்த <DT>name</DT> ஐ <DT>sort</DT> செய்து, பிறகு <DT>name</DT> ஐ சரிபார்க்க வேண்டும்.
|
| 580 |
+
|
| 581 |
+
146
|
| 582 |
+
00:12:40,909 --> 00:12:48,137
|
| 583 |
+
எடுத்துக்காட்டாக, 500 முதல் 0 வரையிலான <DT>range</DT> of <DT>values</DT> ஐ எடுத்துக் கொள்வோம்.
|
| 584 |
+
|
| 585 |
+
147
|
| 586 |
+
00:12:50,287 --> 00:12:58,090
|
| 587 |
+
இப்போது நாம் <DNT>quicksort l</DNT> என்று சொன்னால், அதற்கு <DNT>of course</DNT> முடிவைக் கொடுக்க வேண்டும்.
|
| 588 |
+
|
| 589 |
+
148
|
| 590 |
+
00:13:01,020 --> 00:13:02,468
|
| 591 |
+
பிறகு <DNT>l</DNT> சரியாக <DT>sorted</DT> செய்யப்படும்.
|
| 592 |
+
|
| 593 |
+
149
|
| 594 |
+
00:13:04,311 --> 00:13:09,523
|
| 595 |
+
நீங்கள் அனைத்தையும் பார்க்க முடியாது. ஆனால் 83 84 முதல் நூறு வரை மற்றும் இரண்டு 500 வரை பார்க்க முடியும்.
|
| 596 |
+
|
| 597 |
+
150
|
| 598 |
+
00:13:10,995 --> 00:13:16,480
|
| 599 |
+
இப்போது, 1000 என்று சொன்னால், <DT>insertion sort</DT> ல் நமக்கு இருந்த அதே <DT>problem</DT> உள்ளது.
|
| 600 |
+
|
| 601 |
+
151
|
| 602 |
+
00:13:17,897 --> 00:13:22,596
|
| 603 |
+
பின்னர் நாம் இதை <DT>quicksort</DT> செய்ய முயற்சிக்கிறோம். நீங்கள் இதை <DT>recursion depth</DT> ஆல் பெறுவீர்கள்.
|
| 604 |
+
|
| 605 |
+
152
|
| 606 |
+
00:13:22,621 --> 00:13:29,644
|
| 607 |
+
<DT>worst case</DT> ல் நாம் பார்ப்பது போல, <DT>quick sort</DT> ஆனது <DT>insertion sort</DT> ஐ போலவே செயல்படுகிறது மற்றும் இது மோசமான case.
|
| 608 |
+
|
| 609 |
+
153
|
| 610 |
+
00:13:29,669 --> 00:13:33,759
|
| 611 |
+
இதைப் போக்க, நாம் வழக்கமான காரியத்தைச் செய்ய வேண்டும். <DT>SYS module</DT> ஐ <DT>import</DT> செய்ய வேண்டும்.
|
| 612 |
+
|
| 613 |
+
154
|
| 614 |
+
00:13:33,759 --> 00:13:35,409
|
| 615 |
+
<DT>recursion limit</DT> ஐ <DT>set</DT> செய்யவும்.
|
| 616 |
+
|
| 617 |
+
155
|
| 618 |
+
00:13:36,658 --> 00:13:43,652
|
| 619 |
+
எனவே, பொருத்தமான பெரிய ஒன்று பத்தாயிரம் அல்லது நூறாயிரம் என்று சொல்லுங்கள். பின்னர் அதை <DT>quicksort</DT> செய்ய சொன்னால் எந்த problem உம் இல்லை.
|
| 620 |
+
|
| 621 |
+
156
|
| 622 |
+
00:13:44,779 --> 00:13:49,299
|
| 623 |
+
<DT>python</DT> ல் இந்த <DT>recursion limit</DT> ஐ manually set செய்ய வேண்டிய மற்றொரு case இதுவாகும்.
|
| 624 |
+
|
| 625 |
+
157
|
| 626 |
+
00:13:49,647 --> 00:13:56,929
|
| 627 |
+
உண்மையில் நாம் பார்க்கக்கூடிய ஒரு விஷயம் என்னவென்றால், <DT>quicksort</DT> என்பது நாம் நம்புவது போல் நல்லதல்ல, ஏனெனில்.
|
| 628 |
+
|
| 629 |
+
158
|
| 630 |
+
00:13:57,008 --> 00:14:02,080
|
| 631 |
+
எடுத்துக்காட்டாக, 7500 என்று ஏதாவது <DT>size</DT> ஐ <DT>instance sort</DT> செய்யவும்.
|
| 632 |
+
|
| 633 |
+
159
|
| 634 |
+
00:14:05,504 --> 00:14:09,554
|
| 635 |
+
பின்னர் அது ஒரு புலப்படும் நேரம் எடுக்கும். எனவே, <DNT>n log n</DNT> என்று <DT>merge sort </DT> ஐ பார்த்தோம்.
|
| 636 |
+
|
| 637 |
+
160
|
| 638 |
+
00:14:09,790 --> 00:14:13,700
|
| 639 |
+
5,000 மற்றும் 10000 மற்றும் 100,000 கூட <DT>instantaneously</DT> செய்யும்.
|
| 640 |
+
|
| 641 |
+
161
|
| 642 |
+
00:14:13,832 --> 00:14:18,129
|
| 643 |
+
தெளிவாக <DT>quick sort</DT> மற்றும் <DT>merge sort </DT> செயல்படாது.
|
| 644 |
+
|
| 645 |
+
162
|
| 646 |
+
00:14:18,165 --> 00:14:22,480
|
| 647 |
+
மற்றும் உண்மையில் <DT>quick sort</DT> க்கு <DT>order</DT> <DNT>n log n</DNT> <DT>merge sort </DT> இல்லை என்பதை நாம் பார்ப்போம்.
|
| 648 |
+
|
| 649 |
+
163
|
| 650 |
+
00:14:22,511 --> 00:14:25,090
|
| 651 |
+
நாம் விரும்பியபடி நடத்தை.
|
| 652 |
+
|
| 653 |
+
164
|
| 654 |
+
00:14:25,090 --> 00:14:28,539
|
| 655 |
+
அதற்குக் காரணம், நாம் <DT>median</DT> ஐ பயன்படுத்தாமல், split செய்வதற்கான முதல் <DT>value</DT> ஐ பயன்படுத்துகிறோம்.
|
| 656 |
+
|
| 657 |
+
165
|
| 658 |
+
00:14:28,539 --> 00:14:33,909
|
| 659 |
+
அதை அடுத்த lecture ல் பார்ப்போம். ஏன் <DT>quick sort</DT> ல் உண்மையி���் ஒரு worst case <DNT>order n log n algorithm</DNT> அல்ல.
|
Translated_SRT/Week4_Lecture3_Cleaned_Tagged.ta.srt
ADDED
|
@@ -0,0 +1,660 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
1
|
| 2 |
+
00:00:02,246 --> 00:00:06,190
|
| 3 |
+
<DT>merge sort </DT> என்பது <DT>order</DT> <DNT>n log n</DNT> <DT>sorting algorithm</DT> என்று பார்த்தோம்.
|
| 4 |
+
|
| 5 |
+
2
|
| 6 |
+
00:00:06,190 --> 00:00:10,509
|
| 7 |
+
ஆனால் இது சில குறைபாடுகளைக் கொண்டுள்ளது. இது சில நேரங்களில் <DT>impractical</DT> ஆகிறது.
|
| 8 |
+
|
| 9 |
+
3
|
| 10 |
+
00:00:10,849 --> 00:00:14,740
|
| 11 |
+
முக்கிய பிரச்சனை என்னவென்றால், <DT>merging</DT> க்கு <DT>extra space</DT> தேவைப்படுகிறது.
|
| 12 |
+
|
| 13 |
+
4
|
| 14 |
+
00:00:14,869 --> 00:00:19,076
|
| 15 |
+
<DT>recursion</DT> ஐ பயன்படுத்தாமல் <DT>implement merge sort </DT> செய்வது கடினம் என்பதையும் நாம் பார்த்தோம்.
|
| 16 |
+
|
| 17 |
+
5
|
| 18 |
+
00:00:19,101 --> 00:00:22,108
|
| 19 |
+
மற்றும் <DT>recursion</DT> <DT>programming language</DT> ல் அதன் சொந்த செலவைக் கொண்டுள்ளது.
|
| 20 |
+
|
| 21 |
+
6
|
| 22 |
+
00:00:24,841 --> 00:00:26,952
|
| 23 |
+
எனவே, <DT>space problem</DT> ஐ தீர்க்கலாம்.
|
| 24 |
+
|
| 25 |
+
7
|
| 26 |
+
00:00:27,736 --> 00:00:33,310
|
| 27 |
+
<DT>merge function</DT> ஐ <DT>implement</DT> செய்யும் <DT>பொருட்டு</DT>, <DT>merge sort </DT> க்கு <DT>extra space</DT> தேவைப்படுகிறது.
|
| 28 |
+
|
| 29 |
+
8
|
| 30 |
+
00:00:33,590 --> 00:00:38,500
|
| 31 |
+
நாம் ஏன் <DT>merge</DT> செய்ய வேண்டும்? நாம் <DT>merge</DT> செய்ய வேண்டியதன் காரணம், நாம் <DT>merge sort </DT> ஐ செய்யும்போது,
|
| 32 |
+
|
| 33 |
+
9
|
| 34 |
+
00:00:38,500 --> 00:00:45,759
|
| 35 |
+
நம்மிடம் <DT>initial list</DT> உள்ளது. பின்னர் அதை இரண்டு பகுதிகளாக split செய்கிறோம். ஆனால், பொதுவாக <DT>left</DT> இலிருந்து <DT>items</DT> கள் இருக்கலாம்.
|
| 36 |
+
|
| 37 |
+
10
|
| 38 |
+
00:00:45,759 --> 00:00:50,409
|
| 39 |
+
<DNT>right</DNT> இலிருந்து <DT>bigger than items</DT>. எனவே, <DT>instance</DT> ஆக நாம் சொன்னால்,
|
| 40 |
+
|
| 41 |
+
11
|
| 42 |
+
00:00:50,450 --> 00:00:54,250
|
| 43 |
+
<DT>left</DT> ல் <DT>even numbers</DT> மற்றும் <DNT>right</DNT> ல் <DT>odd numbers</DT>.
|
| 44 |
+
|
| 45 |
+
12
|
| 46 |
+
00:00:54,550 --> 00:00:58,900
|
| 47 |
+
இரண்டு பக்கங்களிலிருந்தும் <DT>numbers alternately</DT> எடுத்துக்கொண்டு <DT>merge</DT> செய்ய வேண்டும்.
|
| 48 |
+
|
| 49 |
+
13
|
| 50 |
+
00:00:59,630 --> 00:01:09,646
|
| 51 |
+
<DT>divided problem</DT> ன் <DT>left</DT> பக்கத்தில் உள்ள அனைத்தும் <DT>divided problem</DT> ன் <DNT>வலது</DNT> பக்கத்தில் உள்ள அனைத்தையும் விட சிறியதாக இருக்கும்படி <DT>arrange</DT> செய்தால்,
|
| 52 |
+
|
| 53 |
+
14
|
| 54 |
+
00:01:10,593 --> 00:01:12,146
|
| 55 |
+
பின்னர், நாம் அனைத்தையும் <DT>merge</DT> செய்ய தேவையில்லை.
|
| 56 |
+
|
| 57 |
+
15
|
| 58 |
+
00:01:12,699 --> 00:01:18,130
|
| 59 |
+
மேலும் இது <DT>merge</DT> செய்வதற்கு, கூடுதல் space தேவைப்படும் <DT>problem</DT> ஐ தவிர்க்கலாம்.
|
| 60 |
+
|
| 61 |
+
16
|
| 62 |
+
00:01:20,689 --> 00:01:23,702
|
| 63 |
+
<DT>merge</DT> இல்லாமல் எப்படி <DT>divide</DT> மற்றும் <DT>conquer</DT> செய்வது.
|
| 64 |
+
|
| 65 |
+
17
|
| 66 |
+
00:01:25,243 --> 00:01:27,659
|
| 67 |
+
<DT>median value</DT> நமக்குத் தெரியும் என்று வைத்துக்கொள்வோம்.
|
| 68 |
+
|
| 69 |
+
18
|
| 70 |
+
00:01:27,659 --> 00:01:33,716
|
| 71 |
+
ஒரு <DT>set</DT> ல் உள்ள <DT>median value</DT> என்பது <DT>half</DT> the <DT>elements</DT> are <DT>smaller than half</DT> are <DT>bigger</DT> ஆக இருக்கும் <DT>value</DT> என்பதை நினைவில் கொள்ளுங்கள்.
|
| 72 |
+
|
| 73 |
+
19
|
| 74 |
+
00:01:35,649 --> 00:01:42,124
|
| 75 |
+
<DT>median</DT> விட <DT>smaller than</DT> <DT>values</DT> அனைத்தையும் <DT>left half</DT> க்கும், <DT>median</DT> விட <DT>bigger than</DT> அனைத்தையும் <DNT>right half</DNT> க்கும் நகர்த்தலாம்.
|
| 76 |
+
|
| 77 |
+
20
|
| 78 |
+
00:01:43,883 --> 00:01:52,180
|
| 79 |
+
நாம் பார்ப்பது போல, <DT>list</DT> ன் <DT>length</DT> க்கு <DT>time proportional</DT> ஆக புதிய <DT>array</DT> வை உருவாக்காமல் இதைச் செய்யலாம்.
|
| 80 |
+
|
| 81 |
+
21
|
| 82 |
+
00:01:53,816 --> 00:02:00,989
|
| 83 |
+
இந்த <DT>rearrangement</DT> ஐ செய்த பிறகு, அனைத்து <DT>smaller values</DT> களையும் <DT>left half</DT> க்கும் <DT>bigger values</DT> களை <DNT>right half</DNT> க்கும் நகர்த்தவும்.
|
| 84 |
+
|
| 85 |
+
22
|
| 86 |
+
00:02:00,989 --> 00:02:06,443
|
| 87 |
+
இந்த <DT>divide</DT> மற்றும் <DT>conquer strategy</DT> ஐ நாம் <DT>recursively</DT> பயன்படுத்தலாம். மேலும் <DNT>right</DNT> மற்றும் <DT>left half</DT> ஐ தனித்தனியாக <DT>sort</DT> செய்யலாம்.
|
| 88 |
+
|
| 89 |
+
23
|
| 90 |
+
00:02:07,519 --> 00:02:12,520
|
| 91 |
+
மேலும் <DT>left half</DT> ல் உள்ள அனைத்தும், <DNT>right half</DNT> ல் உள்ள அனைத்தையும் விட <DT>சிறியது</DT> என்று நாம் உத்தரவாதம் அளித்துள்ளோம்.
|
| 92 |
+
|
| 93 |
+
24
|
| 94 |
+
00:02:13,019 --> 00:02:17,050
|
| 95 |
+
இது தானாகவே இதற்கு அர்த்தம் <DT>divide</DT> மற்றும் <DT>conquer</DT> step க்கு பிறகு,
|
| 96 |
+
|
| 97 |
+
25
|
| 98 |
+
00:02:17,050 --> 00:02:24,442
|
| 99 |
+
<DT>left half</DT> ஏற்கனவே <DNT>right half</DNT> க்கு கீழே இருப்பதால், non-trivial முறையில் answers களை combine செய்ய வேண்டிய அவசியமில்லை. நாம் <DT>merge</DT> செய்ய தேவையில்லை.
|
| 100 |
+
|
| 101 |
+
26
|
| 102 |
+
00:02:28,309 --> 00:02:34,210
|
| 103 |
+
இந்த <DT>strategy</DT> ஐ பயன்படுத்தினால், <DT>merge sort </DT> போன்ற ஒரு <DT>recursive equation</DT> ஐ பெறுவோம்.
|
| 104 |
+
|
| 105 |
+
27
|
| 106 |
+
00:02:34,210 --> 00:02:42,370
|
| 107 |
+
<DNT>length n</DNT> இன் <DT>list</DT> ஐ <DT>sort</DT> செய்வதற்கு <DT>time</DT> தேவைப்படும். முதலில் <DNT>size n</DNT> இன் இரண்டு <DT>lists</DT> களை 2 ஆல் <DT>sort</DT> செய்ய வேண்டும்.
|
| 108 |
+
|
| 109 |
+
28
|
| 110 |
+
00:02:42,370 --> 00:02:50,039
|
| 111 |
+
நாம் <DNT>order n </DNT> ஐ செய்வோம் <DT>merging</DT> ஆக அல்ல. <DT>list</DT> ஐ <DT>decompose</DT> செய்வதற்காக. அதனால் அனைத்து <DT>smaller values</DT> களும் <DT>left</DT> மற்றும் <DNT>right</DNT> இல் இருக்கும்.
|
| 112 |
+
|
| 113 |
+
29
|
| 114 |
+
00:02:50,064 --> 00:02:54,483
|
| 115 |
+
நாம் <DT>recursive step</DT> செய்வதற்கு முன் rearranging <DT>step</DT> <DNT>order n</DNT> ஆகும்.
|
| 116 |
+
|
| 117 |
+
30
|
| 118 |
+
00:02:54,508 --> 00:02:57,879
|
| 119 |
+
அதேசமயம் <DT>merge</DT> என்பது <DT>recursive step</DT> க்கு பின் வரும் <DT>step</DT> ஆகும்.
|
| 120 |
+
|
| 121 |
+
31
|
| 122 |
+
00:02:57,879 --> 00:03:03,879
|
| 123 |
+
இது முந்தைய <DT>case</DT> ல் <DNT>order n</DNT> ஆக இருந்தது. ஆனால் நாம் <DT>recurrence</DT> ஐ <DT>solve</DT>செய்தால் அதே ஒன்றுதான். நமக்கு மற்றொரு <DNT>order n log n algorithm</DNT> கிடைக்கும்.
|
| 124 |
+
|
| 125 |
+
32
|
| 126 |
+
00:03:08,730 --> 00:03:12,340
|
| 127 |
+
இந்த <DT>approach</DT> இல் பெரிய <DT>bottleneck</DT> என்னவென்றால் <DT>median</DT> ஐ கண்டறிவதாகும்.
|
| 128 |
+
|
| 129 |
+
33
|
| 130 |
+
00:03:13,190 --> 00:03:20,663
|
| 131 |
+
ஒரு <DT>list</DT> ஐ <DT>sorting</DT> செய்வதன் நன்மைகளில் ஒன்று, <DT>sorting</DT> க்கு பின் <DT>median</DT> ஐ middle <DT>element</DT> ஆக நாம் அடையாளம் காணலாம் என்பதை நினைவில் கொள்ளுங்கள்.
|
| 132 |
+
|
| 133 |
+
34
|
| 134 |
+
00:03:21,890 --> 00:03:24,336
|
| 135 |
+
இப்போது, இங்கே நாம் <DT>sorting</DT> செய்வதற்கு முன் <DT>median</DT> ஐ கேட்கிறோம்.
|
| 136 |
+
|
| 137 |
+
35
|
| 138 |
+
00:03:24,996 --> 00:03:28,539
|
| 139 |
+
ஆனால், நமது நோக்கம் <DT>sort</DT> செய்வது. அது <DT>paradoxical</DT> ஆகும்.
|
| 140 |
+
|
| 141 |
+
36
|
| 142 |
+
00:03:28,539 --> 00:03:33,219
|
| 143 |
+
<DT>sorting</DT>ன் <DT>output</DT> <DT>sorting</DT> ஆன <DT>input</DT> ஆக இருக்க வேண்டும் என நாம் விரும்பினால்.
|
| 144 |
+
|
| 145 |
+
37
|
| 146 |
+
00:03:34,892 --> 00:03:42,580
|
| 147 |
+
எனவே, <DT>list</DT> ஐ <DNT>split</DNT> செய்து <DT>element</DT> ன் மிகவும் எளிமையான தேர்வு மூலம் <DT>strategy</DT> யை முயற்சிக்க வேண்டும் என்பதே இதன் பொருள்.
|
| 148 |
+
|
| 149 |
+
38
|
| 150 |
+
00:03:42,825 --> 00:03:46,780
|
| 151 |
+
<DT>median</DT> ஐ தேடுவதற்குப் பதிலாக, <DNT>list A</DNT> இல் சில <DT>value</DT> ஐ பெறுவோம்.
|
| 152 |
+
|
| 153 |
+
39
|
| 154 |
+
00:03:46,780 --> 00:03:49,689
|
| 155 |
+
மற்றும் <DT>pivot element</DT> என அழைக்கப்படுவதைப் பயன்படுத்தவும்.
|
| 156 |
+
|
| 157 |
+
40
|
| 158 |
+
00:03:49,689 --> 00:03:56,769
|
| 159 |
+
இந்த <DT>pivot</DT> ஐ பொறுத்து <DNT>A</DNT> என்று பிரிக்கிறோம். இதன���ல் அனைத்து <DT>smaller elements</DT> களும் <DT>left</DT> ஆகவும், <DT>bigger elements</DT> கள் அனைத்தும் <DNT>right</DNT> ஆகவும் இருக்கும்.
|
| 160 |
+
|
| 161 |
+
41
|
| 162 |
+
00:04:00,223 --> 00:04:11,636
|
| 163 |
+
இந்த <DT>algorithm</DT> <DT>quick sort</DT> என்று அழைக்கப்படுகிறது. இது 1960 களில் <DT>Tony Four</DT> என்ற நபரால் கண்டுபிடிக்கப்பட்டது மற்றும் இது மிகவும் பிரபலமான <DT>sorting algorithms</DT> களில் ஒன்றாகும்.
|
| 164 |
+
|
| 165 |
+
42
|
| 166 |
+
00:04:12,103 --> 00:04:16,082
|
| 167 |
+
பொதுவாக <DT>array</DT> இன் <DT>list</DT> ல் முதல் <DT>element</DT> ஆக இருக்கும் <DT>pivot element</DT> ஐ தேர்வு செய்கிறோம்.
|
| 168 |
+
|
| 169 |
+
43
|
| 170 |
+
00:04:16,759 --> 00:04:22,500
|
| 171 |
+
இந்த <DT>pivot</DT> இன் முடிவைப் பொறுத்து <DT>lower part</DT> லும் <DT>upper part</DT> லும் <DNT>partition A</DNT> செய்கிறோம்.
|
| 172 |
+
|
| 173 |
+
44
|
| 174 |
+
00:04:22,500 --> 00:04:24,943
|
| 175 |
+
எனவே, அனைத்து <DT>smaller elements</DT> களையும் <DT>left</DT> க்கு நகர்த்துகிறோம்.
|
| 176 |
+
|
| 177 |
+
45
|
| 178 |
+
00:04:25,056 --> 00:04:28,149
|
| 179 |
+
மற்றும் அனைத்து <DT> bigger elements</DT> முதல் <DNT>right</DNT> வரை <DT>pivotal</DT> தேர்வைப் பொறுத்து.
|
| 180 |
+
|
| 181 |
+
46
|
| 182 |
+
00:04:29,523 --> 00:04:34,163
|
| 183 |
+
இரண்டிற்கும் இடையே <DT>pivot</DT> வருவதை உறுதிசெய்கிறோம். ஏனெனில் <DT>array</DT> ல் முதல் <DT>element</DT> <DT>pivot</DT> ஆக எடுத்துள்ளோம்.
|
| 184 |
+
|
| 185 |
+
47
|
| 186 |
+
00:04:34,190 --> 00:04:41,036
|
| 187 |
+
இதற்குப் பிறகு நாம் அதை <DT>lower</DT> மற்றும் <DT>upper bound</DT> க்கு இடையில் உள்ள <DT>center</DT> க்கு நகர்த்த விரும்புகிறோம். பின்னர், இரண்டு <DT>partitions</DT> களை <DT>recursively sort</DT> செய்கிறோம்.
|
| 188 |
+
|
| 189 |
+
48
|
| 190 |
+
00:04:44,456 --> 00:04:48,910
|
| 191 |
+
ஒரு பொதுவான <DT>list</DT> ல் <DT>quick sort</DT> எவ்வாறு வேலை செய்யும் என்பது பற்றிய <DT>high level view</DT> இங்கே உள்ளது.
|
| 192 |
+
|
| 193 |
+
49
|
| 194 |
+
00:04:48,910 --> 00:04:56,143
|
| 195 |
+
இது தான் நமது <DT>list</DT> என்று வைத்துக்கொள்வோம். <DT>list</DT> ன் தொடக்கத்தை <DT>pivot element</DT> ஆக முதல் <DT>element</DT> ஐ அடையாளம் காண்போம்.
|
| 196 |
+
|
| 197 |
+
50
|
| 198 |
+
00:04:56,950 --> 00:05:01,569
|
| 199 |
+
இப்போது, மீதமுள்ள <DT>elements</DT> களில், எந்த <DNT>ones</DNT> <DT>smaller</DT> மற்றும் எந்த <DNT>ones</DNT> <DT>bigger</DT> என்பதைக் கண்டுபிடிக்க வேண்டும்.
|
| 200 |
+
|
| 201 |
+
51
|
| 202 |
+
00:05:02,410 --> 00:05:11,510
|
| 203 |
+
இதை எப்படிச் செய்வோம் என்று சொல்லாமல், 32, 22 மற்றும் 13 ஆகிய மூன்று <DT>elements</DT> களை <DT>smaller</DT> ஆகவும் <DNT>yellow</DNT> ல் <DT>marked </DT> செய்யபட்டதாகவும் அடையாளப்படுத்துகிறோம்.
|
| 204 |
+
|
| 205 |
+
52
|
| 206 |
+
00:05:11,810 --> 00:05:15,069
|
| 207 |
+
மற்றும் <DNT>green</DNT> இல் <DT>marked </DT> செய்யப்பட்ட மற்ற 4 <DT>elements</DT> கள் பெரியவை.
|
| 208 |
+
|
| 209 |
+
53
|
| 210 |
+
00:05:16,160 --> 00:05:20,040
|
| 211 |
+
முதல் <DT>step</DT> உண்மையில் இந்த <DT>criterion</DT> ஐ பொறுத்து <DT>partition</DT> செய்ய வேண்டும்.
|
| 212 |
+
|
| 213 |
+
54
|
| 214 |
+
00:05:20,040 --> 00:05:24,810
|
| 215 |
+
நாம் இந்த <DT>elements</DT> களை நகர்த்த வேண்டும். அதனால் அவை இரண்டு <DT>blocks</DT> ஆக வரும்.
|
| 216 |
+
|
| 217 |
+
55
|
| 218 |
+
00:05:24,810 --> 00:05:27,550
|
| 219 |
+
அந்த 13, 32 மற்றும் 22 <DT>left</DT> பக்கம் வரும்.
|
| 220 |
+
|
| 221 |
+
56
|
| 222 |
+
00:05:27,550 --> 00:05:33,430
|
| 223 |
+
63 57, 91 மற்றும் 78, <DNT>right</DNT> மற்றும் <DT>pivot element</DT> 43 <DT>middle</DT> ல் வருகிறது.
|
| 224 |
+
|
| 225 |
+
57
|
| 226 |
+
00:05:33,947 --> 00:05:36,781
|
| 227 |
+
இது <DT>rearranging step</DT> மற்றும் இப்போது
|
| 228 |
+
|
| 229 |
+
58
|
| 230 |
+
00:05:37,060 --> 00:05:41,529
|
| 231 |
+
நாம் <DNT>yellow bits</DNT> மற்றும் <DNT>green bits</DNT> ஆகியவற்றை <DT>recursively sort</DT> செய்வோம். பிறகு அதைச் செய்யலாம் என்று கருதினால்,
|
| 232 |
+
|
| 233 |
+
59
|
| 234 |
+
00:05:41,529 --> 00:05:45,480
|
| 235 |
+
ந���்மிடம் ஒரு <DT>sorted array</DT> உள்ளது மற்றும் அனைத்து <DNT>yellow</DNT> பொருட்களும் <DT>smaller than </DT>43 ஆக இருப்பதை கவனிக்கவும்.
|
| 236 |
+
|
| 237 |
+
60
|
| 238 |
+
00:05:45,480 --> 00:05:49,509
|
| 239 |
+
மேலும் அனைத்து <DNT>green</DNT> விஷயங்களும் <DT>bigger than</DT> 43. மேலும் <DT>merging</DT> செய்ய தேவையில்லை.
|
| 240 |
+
|
| 241 |
+
61
|
| 242 |
+
00:05:52,243 --> 00:05:54,899
|
| 243 |
+
எனவே, <DT>partitioning</DT> எவ்வாறு செயல்படுகிறது என்பதைப் பார்ப்போம்.
|
| 244 |
+
|
| 245 |
+
62
|
| 246 |
+
00:05:54,899 --> 00:05:59,350
|
| 247 |
+
இங்கே நம்மிடம் முந்தைய <DT>list</DT> ல் உள்ளது. மேலும் 43 ஐ நமது <DT>pivot element</DT> ஆக <DT>marked </DT> செய்துள்ளோம்.
|
| 248 |
+
|
| 249 |
+
63
|
| 250 |
+
00:05:59,350 --> 00:06:03,112
|
| 251 |
+
மீதமுள்ள <DT>elements</DT> களை <DT>scan</DT> செய்து அவற்றை <DT>divide</DT> செய்ய விரும்புகிறோம்.
|
| 252 |
+
|
| 253 |
+
64
|
| 254 |
+
00:06:03,137 --> 00:06:08,742
|
| 255 |
+
இரண்டு குழுக்கள், <DT>smaller than</DT> 43, <DNT>yellow ones</DNT>, <DT>bigger than</DT> 43, <DNT>green ones</DNT> மற்றும் அவற்றை <DT>rearrange</DT> செய்யவும்.
|
| 256 |
+
|
| 257 |
+
65
|
| 258 |
+
00:06:09,962 --> 00:06:13,839
|
| 259 |
+
நாம் என்ன செய்வோம் இரண்டு <DT>pointers</DT> கள் <DNT>yellow pointer</DNT> மற்றும் <DNT>green pointer</DNT> ஐ வைத்திருப்போம்.
|
| 260 |
+
|
| 261 |
+
66
|
| 262 |
+
00:06:14,155 --> 00:06:19,081
|
| 263 |
+
மேலும் பொதுவான விதி என்னவென்றால், எந்த ஒரு <DT>point</DT>லும் நாம் சிறிது <DT>distance</DT> ல் இருப்போம்.
|
| 264 |
+
|
| 265 |
+
67
|
| 266 |
+
00:06:19,355 --> 00:06:24,129
|
| 267 |
+
நான் <DNT>orange</DNT> நிறத்தில் வரையப் போகும் <DT>visible</DT> <DNT>yellow pointer</DNT> மற்றும் <DNT>green pointer</DNT>.
|
| 268 |
+
|
| 269 |
+
68
|
| 270 |
+
00:06:24,129 --> 00:06:29,165
|
| 271 |
+
இவை இந்த <DT>order</DT> ல் நகரும் <DNT>orange pointer</DNT> அல்லது <DNT>yellow pointer</DNT> எப்போதும் <DNT>green pointer</DNT> பின்னால் இருக்கும்.
|
| 272 |
+
|
| 273 |
+
69
|
| 274 |
+
00:06:29,565 --> 00:06:35,397
|
| 275 |
+
நீங்கள் பராமரிக்கும் <DT>inductive property</DT> என்னவென்றால், இந்த <DT>elements</DT> கள் 43 ஐ விட <DT>smaller than</DT> அல்லது சமமாகவோ இருக்கும்.
|
| 276 |
+
|
| 277 |
+
70
|
| 278 |
+
00:06:35,910 --> 00:06:40,643
|
| 279 |
+
இந்த <DT>elements</DT> கள் <DT>bigger than</DT> 43 மற்றும் இந்த <DT>elements</DT> கள் <DT>தெரியவில்லை</DT>.
|
| 280 |
+
|
| 281 |
+
71
|
| 282 |
+
00:06:42,577 --> 00:06:46,139
|
| 283 |
+
நாம் செய்ய முயற்சிப்பது என்னவென்றால், <DT>left</DT> ல் இருந்து <DNT>right</DNT> க்கு நகர்த்த முயற்சிக்கிறோம்.
|
| 284 |
+
|
| 285 |
+
72
|
| 286 |
+
00:06:46,139 --> 00:06:49,589
|
| 287 |
+
ஒவ்வொரு முறையும் <DT>unknown elements</DT> ஐ காணும் அனைத்து <DT>unknown elements</DT> களையும் <DT>classify</DT> செய்யவும்.
|
| 288 |
+
|
| 289 |
+
73
|
| 290 |
+
00:06:49,552 --> 00:06:52,660
|
| 291 |
+
இந்த property ஐ நாம் maintain பண்ண இரண்டு <DT>pointers</DT> களை மாற்றுவோம்.
|
| 292 |
+
|
| 293 |
+
74
|
| 294 |
+
00:06:52,700 --> 00:06:57,699
|
| 295 |
+
43 க்கும் முதல் <DT>pointer</DT> க்கும் இடையில் <DT>elements smaller than</DT> 43 அல்லது அதற்கு சமமாக உள்ளன.
|
| 296 |
+
|
| 297 |
+
75
|
| 298 |
+
00:06:57,699 --> 00:07:01,494
|
| 299 |
+
முதல் <DT>pointer</DT> க்கும் இரண்டாவது <DT>pointer</DT> க்கும் இடையில் நம் <DT>elements</DT> கள் கண்டிப்பாக 43 க்கு <DT>greater</DT> ஆக உள்ளது.
|
| 300 |
+
|
| 301 |
+
76
|
| 302 |
+
00:07:01,752 --> 00:07:05,230
|
| 303 |
+
மற்றும் <DNT>green pointer</DNT> இன் <DNT>right</DNT> பக்கம் இன்னும் <DT>scanned</DT> செய்யப்படாதவை உள்ளன.
|
| 304 |
+
|
| 305 |
+
77
|
| 306 |
+
00:07:07,023 --> 00:07:10,000
|
| 307 |
+
எனவே, ஆரம்பத்தில் எதுவும் தெரியவில்லை. பின்னர் நாம் 32 ஐ பார்க்கிறோம்.
|
| 308 |
+
|
| 309 |
+
78
|
| 310 |
+
00:07:10,000 --> 00:07:14,618
|
| 311 |
+
32 43 ஐ விட <DT>smaller than</DT> ஆக இருப்பதால், <DNT>yellow pointer</DNT> ஐ நகர்த்துகிறோம். மேலும் <DNT>green pointer</DNT> ஐ உடன் தள்ளுகிறோம்.
|
| 312 |
+
|
| 313 |
+
79
|
| 314 |
+
00:07:14,643 --> 00:07:16,949
|
| 315 |
+
தெரியாத விஷயம் 22 இல் தொடங்குகிறது.
|
| 316 |
+
|
| 317 |
+
80
|
| 318 |
+
00:07:16,949 --> 00:07:22,060
|
| 319 |
+
<DNT>yellow</DNT> மற்றும் <DNT>green pointer</DNT> ஆகியவற்றுக்கு இடையே எதுவும் இல்லை. <DT>value bigger than</DT> 43 ஐ நாம் இன்னும் கண்டுபிடிக்கவில்லை.
|
| 320 |
+
|
| 321 |
+
81
|
| 322 |
+
00:07:22,949 --> 00:07:24,910
|
| 323 |
+
எனவே, 22 க்கும் அதே நடக்கும்.
|
| 324 |
+
|
| 325 |
+
82
|
| 326 |
+
00:07:24,910 --> 00:07:28,629
|
| 327 |
+
இப்போது, 78ஐ பார்க்கும்போது, 78 <DT>bigger than</DT> 43 என்பதைக் கவனிக்கிறோம்.
|
| 328 |
+
|
| 329 |
+
83
|
| 330 |
+
00:07:29,008 --> 00:07:33,635
|
| 331 |
+
இப்போது, நாம் <DNT>green pointer</DNT> ஐ மட்டுமே நகர்த்துகிறோம். மேலும் <DNT>yellow pointer</DNT> ஐ அல்ல. இப்போது, இந்த 3 இடைவெளிகளை முன்பு போலவே வைத்திருக்கிறோம்.
|
| 332 |
+
|
| 333 |
+
84
|
| 334 |
+
00:07:33,935 --> 00:07:36,819
|
| 335 |
+
இது 43 க்கு குறைவான <DT>equal</DT> ஆன பகுதி என்பதை நினைவில் கொள்ளுங்கள்.
|
| 336 |
+
|
| 337 |
+
85
|
| 338 |
+
00:07:36,819 --> 00:07:44,350
|
| 339 |
+
இது <DT>greater than</DT> 43 உள்ள பகுதி மற்றும் இந்த பகுதி unknown <DNT>right</DNT>, நாம் இந்த வழியில் தொடர்கிறோம்.
|
| 340 |
+
|
| 341 |
+
86
|
| 342 |
+
00:07:44,350 --> 00:07:48,189
|
| 343 |
+
இப்போது நாம் 63 ஐ பார்க்கிறோம். மீண்டும் 63 <DNT>green zone</DNT> ஐ நீட்டிக்கிறது.
|
| 344 |
+
|
| 345 |
+
87
|
| 346 |
+
00:07:48,189 --> 00:07:52,540
|
| 347 |
+
57 ஒரு <DNT>green zone</DNT> ஐ நீட்டிக்கிறது 91 ஒரு <DNT>green zone</DNT> ஐ நீட்டிக்கிறது.
|
| 348 |
+
|
| 349 |
+
88
|
| 350 |
+
00:07:52,540 --> 00:07:56,470
|
| 351 |
+
இப்போது, 13 ஐ கண்டுபிடிக்கும்போது நாம் ஏதாவது செய்ய வேண்டும்.
|
| 352 |
+
|
| 353 |
+
89
|
| 354 |
+
00:07:56,470 --> 00:08:00,100
|
| 355 |
+
13 என்பது இப்போது <DNT>yellow zone</DNT> ல் சேர்க்கப்பட வேண்டிய ஒரு <DT>element</DT>.
|
| 356 |
+
|
| 357 |
+
90
|
| 358 |
+
00:08:00,205 --> 00:08:03,705
|
| 359 |
+
ஒரு <DT>strategy</DT> நிறைய மாற்றங்களைச் செய்ய வேண்டும்.
|
| 360 |
+
|
| 361 |
+
91
|
| 362 |
+
00:08:03,730 --> 00:08:07,360
|
| 363 |
+
நாம் 13 ஐ 22 இருக்கும் இடத்திற்கு அல்லது 22 க்குப் பிறகு நகர்த்துகிறோம்.
|
| 364 |
+
|
| 365 |
+
92
|
| 366 |
+
00:08:07,360 --> 00:08:10,180
|
| 367 |
+
மேலும் 78 இல் இருந்து எல்லாவற்றையும் <DNT>right</DNT> க்கு தள்ளுகிறோம்.
|
| 368 |
+
|
| 369 |
+
93
|
| 370 |
+
00:08:10,250 --> 00:08:15,220
|
| 371 |
+
ஆனால் உண்மையில், ஒரு புத்திசாலித்தனமான <DT>strategy</DT> என்னவென்றால், 13 இங்கே செல்ல வேண்டும் என்று சொல்வது.
|
| 372 |
+
|
| 373 |
+
94
|
| 374 |
+
00:08:17,605 --> 00:08:21,519
|
| 375 |
+
நாம் space ஐ உருவாக்க வேண்டும். ஆனால் <DT>space</DT> ஐ உருவாக்குவதற்கு பதிலாக.
|
| 376 |
+
|
| 377 |
+
95
|
| 378 |
+
00:08:21,519 --> 00:08:30,399
|
| 379 |
+
எப்படியும் <DNT>green</DNT> விஷயங்களை நாம் <DT>sort</DT> செய்யபோகிறோம். அது ஒரு பொருட்டல்ல என்று சொல்லலாம். இரண்டையும் எந்த வழியில் <DT>sort</DT> செய்கிறோம் என்பது எப்படி முக்கியம். இந்த 78ஐ எடுத்து 13க்கு நகர்த்துவோம்.
|
| 380 |
+
|
| 381 |
+
96
|
| 382 |
+
00:08:30,399 --> 00:08:33,009
|
| 383 |
+
எந்த மாற்றத்தையும் செய்வதற்கு பதிலாக.
|
| 384 |
+
|
| 385 |
+
97
|
| 386 |
+
00:08:33,009 --> 00:08:36,370
|
| 387 |
+
<DNT>green</DNT> zone ல் முதல் <DT>element</DT> ஐ <DT>exchange</DT> செய்கிறோம்.
|
| 388 |
+
|
| 389 |
+
98
|
| 390 |
+
00:08:36,370 --> 00:08:38,320
|
| 391 |
+
நாம் இதுவரை பார்க்கும் <DT>element</DT> உடன்.
|
| 392 |
+
|
| 393 |
+
99
|
| 394 |
+
00:08:38,320 --> 00:08:41,980
|
| 395 |
+
அது தானாகவே <DNT>yellow zone</DNT> மற்றும் <DNT>green zone</DNT> இரண்டையும் சரியாக நீட்டிக்கும்.
|
| 396 |
+
|
| 397 |
+
100
|
| 398 |
+
00:08:42,080 --> 00:08:49,299
|
| 399 |
+
நமது அடுத்த <DT>step</DT> 13 <DT>smaller than</DT> 43 என்பதை கண்டறிந்து, அதை 73 உடன் <DT>இடமாற்று</DT> செய்வது.
|
| 400 |
+
|
| 401 |
+
101
|
| 402 |
+
00:08:49,399 --> 00:08:54,070
|
| 403 |
+
இப்போது, நம்மிடம் உள்ள <DT>pivot</DT> ன் <DNT>right</DNT> க்கு ஒரு <DT>intermediate stage</DT> ஐ அடைந்துள்ளோம்.
|
| 404 |
+
|
| 405 |
+
102
|
| 406 |
+
00:08:54,070 --> 00:08:58,360
|
| 407 |
+
எல்லாவற்றையும் scanned செய்து, அவற்றை <DT>smaller</DT> ஆக வகைப்படுத்தியுள்ளோம்.
|
| 408 |
+
|
| 409 |
+
103
|
| 410 |
+
00:08:58,360 --> 00:08:59,889
|
| 411 |
+
மற்றும் <DT>bigger</DT> ஐயும்.
|
| 412 |
+
|
| 413 |
+
104
|
| 414 |
+
00:09:00,716 --> 00:09:04,216
|
| 415 |
+
இப்போது, <DNT>yellow</DNT> விஷயங்களை 43க்கு <DT>left</DT> பக்கம் <DT>push</DT> செய்ய வேண்டும்.
|
| 416 |
+
|
| 417 |
+
105
|
| 418 |
+
00:09:05,036 --> 00:09:09,165
|
| 419 |
+
இப்போது, <DNT>yellow zone</DNT> ல் 13ஐ சேர்த்தபோது பார்த்த அதே <DT>problem</DT> மீண்டும் ஒருமுறை நமக்கு வந்துள்ளது.
|
| 420 |
+
|
| 421 |
+
106
|
| 422 |
+
00:09:09,190 --> 00:09:13,210
|
| 423 |
+
நாம் 43 ஐ சரியான இடத்திற்கு நகர்த்தினால், இங்கே அனைத்தையும் <DNT>left</DNT> க்கு நகர்த்த வேண்டும்.
|
| 424 |
+
|
| 425 |
+
107
|
| 426 |
+
00:09:13,404 --> 00:09:18,940
|
| 427 |
+
ஆனால், அதற்குப் பதிலாக இந்த 13ஐ <DNT>yellow zone</DNT> ல் கடைசி <DT>element</DT> ஆக எடுத்துக்கொள்ளலாம்.
|
| 428 |
+
|
| 429 |
+
108
|
| 430 |
+
00:09:18,940 --> 00:09:22,149
|
| 431 |
+
மற்றும் அதை அங்கே <DT>replace</DT> செய்யவும். 32 மற்றும் 22 ஐ shift செய்ய வேண்டாம்.
|
| 432 |
+
|
| 433 |
+
109
|
| 434 |
+
00:09:22,149 --> 00:09:26,759
|
| 435 |
+
இது <DT>order</DT> ஐ சீர்குலைக்கிறது. ஆனால் எப்படியும் இது <DT>unsorted</DT> செய்யாமல், <DT>unsorted</DT> ஆக உள்ளது.
|
| 436 |
+
|
| 437 |
+
110
|
| 438 |
+
00:09:27,632 --> 00:09:29,889
|
| 439 |
+
நாம் இதை செய்கிறோம். இப்போது நம்மிடம் உள்ளது.
|
| 440 |
+
|
| 441 |
+
111
|
| 442 |
+
00:09:30,001 --> 00:09:36,171
|
| 443 |
+
நாம் விரும்பியபடி <DT>array rearranged</DT> செய்யப்பட்டது. எனவே, <DT>left</DT> ல் உள்ள இவை அனைத்தும் <DT>smaller than</DT> <DT>pivot</DT>.
|
| 444 |
+
|
| 445 |
+
112
|
| 446 |
+
00:09:37,244 --> 00:09:41,856
|
| 447 |
+
<DT>pivot</DT> நடுவில் உள்ளது. மற்றும் <DNT>right</DNT> ல் உள்ள அனைத்தும் <DT>bigger than</DT> <DT>pivot</DT>.
|
| 448 |
+
|
| 449 |
+
113
|
| 450 |
+
00:09:46,550 --> 00:09:53,830
|
| 451 |
+
இங்கே <DT>python</DT> இன் ஒரு <DT>implementation</DT> உள்ளது. <DT>quick sort</DT> என்பது <DT>merge sort </DT> மற்றும் <DT>binary research</DT> போன்றவற்றைக் கொண்டிருக்கும் என்பதை நினைவில் கொள்ளவும்.
|
| 452 |
+
|
| 453 |
+
114
|
| 454 |
+
00:09:53,830 --> 00:09:58,690
|
| 455 |
+
<DT>smaller</DT> மற்றும் <DT>smaller segments</DT> ல் அதை மீண்டும் மீண்டும் பயன்படுத்துகிறோம். பொதுவாக நாம் அதை <DT>pass</DT> செய்யவும்.
|
| 456 |
+
|
| 457 |
+
115
|
| 458 |
+
00:09:58,690 --> 00:10:03,523
|
| 459 |
+
நாம் <DNT>call A</DNT> என்ற <DT>list</DT> க்கும், <DT>segment</DT> ன் <DT>end points</DT> ஆன <DNT>left</DNT> மற்றும் <DNT>right</DNT>.
|
| 460 |
+
|
| 461 |
+
116
|
| 462 |
+
00:10:03,548 --> 00:10:07,238
|
| 463 |
+
நாம் ஒரு <DNT>slice l </DNT> முதல் <DNT>r minus 1</DNT> வரை செய்கிறோம்.
|
| 464 |
+
|
| 465 |
+
117
|
| 466 |
+
00:10:08,244 --> 00:10:13,210
|
| 467 |
+
இந்த <DT>slice</DT> 1 அல்லது 0 <DT>length</DT> ஆக இருந்தால், நாம் எதுவும் செய்ய மாட்டோம்.
|
| 468 |
+
|
| 469 |
+
118
|
| 470 |
+
00:10:14,223 --> 00:10:17,320
|
| 471 |
+
இல்லையெனில், நாம் முன்பு இருந்த இந்த <DT>partitioning strategy</DT> ஐ பின்பற்றுவோம்.
|
| 472 |
+
|
| 473 |
+
119
|
| 474 |
+
00:10:17,708 --> 00:10:22,120
|
| 475 |
+
அதாவது <DNT>l</DNT> இலிருந்து <DNT>r minus 1</DNT> வரை <DT>sorting</DT> செய்கிறோம்.
|
| 476 |
+
|
| 477 |
+
120
|
| 478 |
+
00:10:22,120 --> 00:10:24,220
|
| 479 |
+
எனவே, <DT>position l</DT>.
|
| 480 |
+
|
| 481 |
+
121
|
| 482 |
+
00:10:24,379 --> 00:10:25,899
|
| 483 |
+
இது <DT>pivot</DT> ஆகும்.
|
| 484 |
+
|
| 485 |
+
122
|
| 486 |
+
00:10:26,793 --> 00:10:29,671
|
| 487 |
+
<DNT>right</DNT> முதலில் இங்கே <DNT>yellow pointer</DNT> ஐ வைப்போம்.
|
| 488 |
+
|
| 489 |
+
123
|
| 490 |
+
00:10:31,011 --> 00:10:33,635
|
| 491 |
+
<DNT>yellow zone</DNT> இன் முடிவு என்று கூறுகிறது.
|
| 492 |
+
|
| 493 |
+
124
|
| 494 |
+
00:10:34,005 --> 00:10:38,500
|
| 495 |
+
உண்மையில் <DT>pivot</DT> உள்ளது அங்கு எதுவும் இல்லை. <DNT>yellow</DNT> என்பது <DNT>l plus 1</DNT> ஆகும்.
|
| 496 |
+
|
| 497 |
+
125
|
| 498 |
+
00:10:38,500 --> 00:10:50,781
|
| 499 |
+
இப்போது <DNT>green</DNT>ஐ தொடர அனுமதிக்கிறோம். ஒவ்வொரு <DT>time</DT>ம் <DNT>green</DNT> இல் ஒரு <DT>element</DT> ஐ பார்க்கும்போது புதிய <DNT>green</DNT> ஒன்���ைக் காட்டிலும் <DT>smaller than</DT> ஆக இருக்கும் <DT>pivot</DT> ஆகும். இது <DT>pivot</DT> என்பதை நினைவில் கொள்ளுங்கள்.
|
| 500 |
+
|
| 501 |
+
126
|
| 502 |
+
00:10:51,965 --> 00:10:55,661
|
| 503 |
+
<DNT>right</DNT> நாம் எப்போதாவது ஒரு <DNT>green</DNT> ஐ பார்த்தால், அடுத்த <DT>value</DT> ஐ.
|
| 504 |
+
|
| 505 |
+
127
|
| 506 |
+
00:10:55,686 --> 00:10:57,580
|
| 507 |
+
சரிபார்க்கப்பட வேண்டியதை விட <DT>smaller than</DT> அல்லது சமமானது.
|
| 508 |
+
|
| 509 |
+
128
|
| 510 |
+
00:10:57,590 --> 00:11:01,714
|
| 511 |
+
நாம் <DT>exchange</DT> செய்கிறோம். இதனால் இந்த <DT>value</DT> ஐ <DNT>yellow zone</DNT> ன் முடிவுக்குக் கொண்டு வருகிறோம்.
|
| 512 |
+
|
| 513 |
+
129
|
| 514 |
+
00:11:01,739 --> 00:11:03,220
|
| 515 |
+
இதைத்தான் 13ல் செய்தோம்.
|
| 516 |
+
|
| 517 |
+
130
|
| 518 |
+
00:11:03,344 --> 00:11:07,590
|
| 519 |
+
பின்னர், <DNT>yellow pointer</DNT> ஐ நகர்த்துகிறோம். இல்லையெனில் கண்டிப்பாக <DT>bigger</DT> <DT>value</DT> ஐ கண்டால் நகர்த்துவோம்.
|
| 520 |
+
|
| 521 |
+
131
|
| 522 |
+
00:11:07,590 --> 00:11:11,860
|
| 523 |
+
<DNT>green pointer</DNT> மட்டுமே <DT>for loop</DT> ஆல் மறைமுகமாக செய்யப்படுகிறது. மற்றொன்றை நகர்த்த மாட்டோம்.
|
| 524 |
+
|
| 525 |
+
132
|
| 526 |
+
00:11:11,929 --> 00:11:14,883
|
| 527 |
+
இதன் முடிவில் நமக்கு <DT>pivot</DT> உள்ளது.
|
| 528 |
+
|
| 529 |
+
133
|
| 530 |
+
00:11:15,894 --> 00:11:19,784
|
| 531 |
+
நாம் <DT>pivot</DT> க்கு சமமானதைக் காட்டிலும் குறைவானதைக் கொண்டுள்ளோம். பின்னர் <DT>greater than pivot</DT> ம் கொண்டுள்ளோம்.
|
| 532 |
+
|
| 533 |
+
134
|
| 534 |
+
00:11:19,809 --> 00:11:27,914
|
| 535 |
+
இந்த விதியின் முடிவில் நாம் அடைந்த அந்த intermediate stage இதுதான். இப்போது, நாம் <DT>pivot</DT> ஐ கண்டுபிடித்து சரியான இடத்திற்கு நகர்த்த வேண்டும். எனவே, <DNT>yellow</DNT> என்பதை நினைவில் கொள்ளுங்கள்.
|
| 536 |
+
|
| 537 |
+
135
|
| 538 |
+
00:11:29,241 --> 00:11:32,769
|
| 539 |
+
<DNT>yellow</DNT> <DNT>last</DNT> க்கு அப்பால் உள்ள <DT>position</DT> ஐ சுட்டிக்காட்டுகிறது.
|
| 540 |
+
|
| 541 |
+
136
|
| 542 |
+
00:11:32,769 --> 00:11:37,440
|
| 543 |
+
<DT>element அதை விட சிறியது</DT>. <DNT>yellow</DNT> இதற்கு முன் எப்போதும் ஒரு <DT>value</DT> ஆகும்.
|
| 544 |
+
|
| 545 |
+
137
|
| 546 |
+
00:11:37,440 --> 00:11:40,396
|
| 547 |
+
<DNT>yellow</DNT> minus 1 இன் <DT>value</DT> ஐ எடுத்து, <DT>left value</DT> உடன் <DT>exchange</DT> செய்வோம்.
|
| 548 |
+
|
| 549 |
+
138
|
| 550 |
+
00:11:41,414 --> 00:11:48,765
|
| 551 |
+
இப்போது நாம் செய்ய வேண்டியது என்னவென்றால், நம்மிடம் இப்போது <DNT> p, p and greater than p</DNT> ஐ விட குறைவாக உள்ளது.
|
| 552 |
+
|
| 553 |
+
139
|
| 554 |
+
00:11:49,627 --> 00:12:01,350
|
| 555 |
+
இங்குதான் <DNT>yellow</DNT> <DNT>சரியானது</DNT>. நாம் 0 இலிருந்து <DNT>yellow</DNT> minus 1 க்கு செல்ல வேண்டும். மீண்டும் <DNT>sort p </DNT> ஐ விரும்பவில்லை. ஏனெனில் <DNT>p</DNT> ஏற்கனவே சரியான இடத்தில் வைக்கப்பட்டுள்ளது.
|
| 556 |
+
|
| 557 |
+
140
|
| 558 |
+
00:12:01,350 --> 00:12:06,391
|
| 559 |
+
<DNT>L</DNT> இலிருந்து <DNT>yellow</DNT> minus 1 ஆகவும், <DNT>yellow</DNT> இலிருந்து <DNT>right</DNT> முனையிலும் <DT>quick sort</DT> செய்வோம்.
|
| 560 |
+
|
| 561 |
+
141
|
| 562 |
+
00:12:13,070 --> 00:12:17,070
|
| 563 |
+
<DT>slide</DT> ல் பார்த்த <DT>python code</DT> ஐ இங்கே ஒரு <DT>file</DT> ல் எழுதியுள்ளோம்.
|
| 564 |
+
|
| 565 |
+
142
|
| 566 |
+
00:12:17,070 --> 00:12:20,320
|
| 567 |
+
slide ல் இருந்த அதே <DT>code</DT> இதுதானா என்பதை சரிபார்க்கலாம்.
|
| 568 |
+
|
| 569 |
+
143
|
| 570 |
+
00:12:20,345 --> 00:12:28,786
|
| 571 |
+
நாம் அதை முயற்சி செய்து <DT>run</DT> செய்யலாம் மற்றும் அது செயல்படுகிறதா என்று சரிபார்க்கலாம். <DT>call python</DT>, இந்த <DT>function</DT> ஐ <DT>import</DT> செய்கிறோம்.
|
| 572 |
+
|
| 573 |
+
144
|
| 574 |
+
00:12:32,849 --> 00:12:37,699
|
| 575 |
+
இது மீண்டும் ஒரு வகையான <DT>sorts</DT> <DT>function</DT> என்பதை நினைவில் கொள்ளுங்கள். எதையாவது <DT>sort</DT> செய்து அதன் விளைவைப் பார்க்க விரும்பினால்.
|
| 576 |
+
|
| 577 |
+
145
|
| 578 |
+
00:12:37,753 --> 00:12:40,870
|
| 579 |
+
நாம் அதற்கு ஒரு <DT>name</DT> ஐ <DT>assign</DT> செய்ய வேண்டும். பின்னர் அந்த <DT>name</DT> ஐ <DT>sort</DT> செய்து, பிறகு <DT>name</DT> ஐ சரிபார்க்க வேண்டும்.
|
| 580 |
+
|
| 581 |
+
146
|
| 582 |
+
00:12:40,909 --> 00:12:48,137
|
| 583 |
+
எடுத்துக்காட்டாக, 500 முதல் 0 வரையிலான <DT>range</DT> of <DT>values</DT> ஐ எடுத்துக் கொள்வோம்.
|
| 584 |
+
|
| 585 |
+
147
|
| 586 |
+
00:12:50,287 --> 00:12:58,090
|
| 587 |
+
இப்போது நாம் <DNT>quicksort l</DNT> என்று சொன்னால், அதற்கு <DNT>of course</DNT> முடிவைக் கொடுக்க வேண்டும்.
|
| 588 |
+
|
| 589 |
+
148
|
| 590 |
+
00:13:01,020 --> 00:13:02,468
|
| 591 |
+
பிறகு <DNT>l</DNT> சரியாக <DT>sorted</DT> செய்யப்படும்.
|
| 592 |
+
|
| 593 |
+
149
|
| 594 |
+
00:13:04,311 --> 00:13:09,523
|
| 595 |
+
நீங்கள் அனைத்தையும் பார்க்க முடியாது. ஆனால் 83 84 முதல் நூறு வரை மற்றும் இரண்டு 500 வரை பார்க்க முடியும்.
|
| 596 |
+
|
| 597 |
+
150
|
| 598 |
+
00:13:10,995 --> 00:13:16,480
|
| 599 |
+
இப்போது, 1000 என்று சொன்னால், <DT>insertion sort</DT> ல் நமக்கு இருந்த அதே <DT>problem</DT> உள்ளது.
|
| 600 |
+
|
| 601 |
+
151
|
| 602 |
+
00:13:17,897 --> 00:13:22,596
|
| 603 |
+
பின்னர் நாம் இதை <DT>quicksort</DT> செய்ய முயற்சிக்கிறோம். நீங்கள் இதை <DT>recursion depth</DT> ஆல் பெறுவீர்கள்.
|
| 604 |
+
|
| 605 |
+
152
|
| 606 |
+
00:13:22,621 --> 00:13:29,644
|
| 607 |
+
<DT>worst case</DT> ல் நாம் பார்ப்பது போல, <DT>quick sort</DT> ஆனது <DT>insertion sort</DT> ஐ போலவே செயல்படுகிறது மற்றும் இது மோசமான case.
|
| 608 |
+
|
| 609 |
+
153
|
| 610 |
+
00:13:29,669 --> 00:13:33,759
|
| 611 |
+
இதைப் போக்க, நாம் வழக்கமான காரியத்தைச் செய்ய வேண்டும். <DT>SYS module</DT> ஐ <DT>import</DT> செய்ய வேண்டும்.
|
| 612 |
+
|
| 613 |
+
154
|
| 614 |
+
00:13:33,759 --> 00:13:35,409
|
| 615 |
+
<DT>recursion limit</DT> ஐ <DT>set</DT> செய்யவும்.
|
| 616 |
+
|
| 617 |
+
155
|
| 618 |
+
00:13:36,658 --> 00:13:43,652
|
| 619 |
+
எனவே, பொருத்தமான பெரிய ஒன்று பத்தாயிரம் அல்லது நூறாயிரம் என்று சொல்லுங்கள். பின்னர் அதை <DT>quicksort</DT> செய்ய சொன்னால் எந்த problem உம் இல்லை.
|
| 620 |
+
|
| 621 |
+
156
|
| 622 |
+
00:13:44,779 --> 00:13:49,299
|
| 623 |
+
<DT>python</DT> ல் இந்த <DT>recursion limit</DT> ஐ manually set செய்ய வேண்டிய மற்றொரு case இதுவாகும்.
|
| 624 |
+
|
| 625 |
+
157
|
| 626 |
+
00:13:49,647 --> 00:13:56,929
|
| 627 |
+
உண்மையில் நாம் பார்க்கக்கூடிய ஒரு விஷயம் என்னவென்றால், <DT>quicksort</DT> என்பது நாம் நம்புவது போல் நல்லதல்ல, ஏனெனில்.
|
| 628 |
+
|
| 629 |
+
158
|
| 630 |
+
00:13:57,008 --> 00:14:02,080
|
| 631 |
+
எடுத்துக்காட்டாக, 7500 என்று ஏதாவது <DT>size</DT> ஐ <DT>instance sort</DT> செய்யவும்.
|
| 632 |
+
|
| 633 |
+
159
|
| 634 |
+
00:14:05,504 --> 00:14:09,554
|
| 635 |
+
பின்னர் அது ஒரு புலப்படும் நேரம் எடுக்கும். எனவே, <DNT>n log n</DNT> என்று <DT>merge sort </DT> ஐ பார்த்தோம்.
|
| 636 |
+
|
| 637 |
+
160
|
| 638 |
+
00:14:09,790 --> 00:14:13,700
|
| 639 |
+
5,000 மற்றும் 10000 மற்றும் 100,000 கூட <DT>instantaneously</DT> செய்யும்.
|
| 640 |
+
|
| 641 |
+
161
|
| 642 |
+
00:14:13,832 --> 00:14:18,129
|
| 643 |
+
தெளிவாக <DT>quick sort</DT> மற்றும் <DT>merge sort </DT> செயல்படாது.
|
| 644 |
+
|
| 645 |
+
162
|
| 646 |
+
00:14:18,165 --> 00:14:22,480
|
| 647 |
+
மற்றும் உண்மையில் <DT>quick sort</DT> க்கு <DT>order</DT> <DNT>n log n</DNT> <DT>merge sort </DT> இல்லை என்பதை நாம் பார்ப்போம்.
|
| 648 |
+
|
| 649 |
+
163
|
| 650 |
+
00:14:22,511 --> 00:14:25,090
|
| 651 |
+
நாம் விரும்பியபடி நடத்தை.
|
| 652 |
+
|
| 653 |
+
164
|
| 654 |
+
00:14:25,090 --> 00:14:28,539
|
| 655 |
+
அதற்குக் காரணம், நாம் <DT>median</DT> ஐ பயன்படுத்தாமல், split செய்வதற்கான முதல் <DT>value</DT> ஐ பயன்படுத்துகிறோம்.
|
| 656 |
+
|
| 657 |
+
165
|
| 658 |
+
00:14:28,539 --> 00:14:33,909
|
| 659 |
+
அதை அடுத்த lecture ல் பார்ப்போம். ஏன் <DT>quick sort</DT> ல் உண்மையி���் ஒரு worst case <DNT>order n log n algorithm</DNT> அல்ல.
|
| 660 |
+
|