DANH MỤC TÀI LIỆU
QuickSort, TimSort hay Insertion Sort? Đâu là thuật toán sắp xếp nhanh nhất
QuickSort, TimSort hay Insertion Sort? Đâu là thu t toán s p x p ắ ế
nhanh nh t
L i nói đ uờ ầ
Thu còn ng i trên gh tr ng h c đ i h c, khi h c môn “C u trúc D ế ườ
li u & Gi i thu t” hay là lúc đi ph ng v n 1 công ty ABC, XYZ nào đó, ấ ở
mà cũng có th đ n t n lúc ng i trà đá bàn lu n v i anh em đ ng nghi p ể ế
chuy n ngh , chuy n nghi p … thì ch c h n đã t ng có l n anh em Dev ắ ẳ
chúng ta đ c h i ho c là nghe th y câu h i: “Thu t toán s p x p nào là ượ ỏ ắ ế
nhanh nh t?” Và bài vi t này c a mình s ph n nào giúp các b n tìm ra ế ẽ ầ
đáp án cho câu h i trên.
Câu tr l i là QuickSort, TimSort hay Insertion Sort nh ?ả ờ
Xem nào, nghe câu ch thì đã th y th ng Quick Sort có v là nhanh r i ấ ằ
(Quick là nhanh mà), và th c t , thì Quick Sort cũng là đáp án đ c nhi u ự ế ượ
ng i l a ch n nh t khi đ c h i câu h i trên. Nh ng th c t , thì l i ườ ự ượ ư ế
không ph i v y, ph n l n m i ng i đã sai khi l a ch n Quick Sort là câu ả ậ ầ ớ ườ
tr l i c a mình. V y đáp án là Tim Sort ? hay Insertion Sort nh Cùng ả ờ ư
nhìn vào b ng th ng kê đ ph c t p trung bình c a các thu t toán s p x p ứ ạ ế
Nhìn vào
b ng trên thì rõ ràng Quick Sort có đ ph c t p trung bình là O(n log(n)), ứ ạ ơ
ch ng ph i d a vào k t qu này thì Quick Sort là nhanh nh t còn gì n a? ả ự ế
Ch m l i 1 chút, chúng ta hãy th đ t câu h i ng c l i đây xem sao ượ ạ ở
nhé: “N u QuickSort là nhanh nh t thì t i sao l i còn ph i đ ra ti t các ế ả ẻ
lo i thu t toán s p x p khác làm cái l gì nh ?” ắ ế
Ti p theo, chúng ta s xem t c đ s p x p c a các thu t toán d a theo d ế ộ ắ ế
li u đ u vào, d li u đây có các case t d li u Random đ n Nearly ệ ở ừ ữ ế
Sorted hay c vi c Reversed D li u ữ ệ
Nhìn vào th ng kê phía trên, có th th y v i m i ki u d li u khác nhau thì ữ ệ
l i có 1 ki u s p x p chi m u th riêng, ví d v i d li u Nearly Sorted ế ế ư ế ớ ữ
thì Insertion Sort là nhanh nh t nh ng khi v i nh ng ki u d li u ph c t p ư ữ ệ
h n thì Insertion Sort l i không ph i là nhanh nh t. Nh v y, t nh ng ơ ư ậ
th ng kê trên chúng ta đã d n d n hình dung ra đáp án cho câu h i “Thu t ầ ầ
toán s p x p nào là nhanh nh t” r i nhắ ế
V y câu tr l i đúng là gì? ả ờ
=> “Không có 1 b t kỳ thu t toán s p x p nào c th c , nó còn ph thu c ế ể ả
vào nhi u y u t Và “ph thu c vào nhi u y u t ” cũng là lý do mà có ế ố ế ố
r t nhi u lo i thu t toán s p x p khác nhau ra đ i. Chúng ta nhìn vào 1 vài ắ ế
ví d c th d i đây đ th y nh ng y u t nào s nh h ng vi c l a ụ ể ướ ể ấ ế ố ưở
ch n thu t toánọ ậ
Quick Sort s là t t nh t n u ấ ế
1. Không lo l ng v các case đ u vào k c tr ng h p x u nh t (tr t ắ ề ườ ợ ấ ấ
t nói chung là ng u nhiên)ự ẫ
2. Không quan tâm đ n dung l ng b nh , b nh là hoàn toàn lý ế ượ ộ ớ ộ ớ
t ng và phù h p đâyưở ợ ở
N u d li u đã đ c s p x p s n, thì nên ch n Insertion Sort ho c ế ữ ệ ượ ế
Shell Sort s t t h n.ẽ ố ơ
N u chúng ta th c s ph i lo i b case x u nh t, có th s d ng ế ể ử
Heap (ho c ít nh t là Quick3) v i đ ph c t p NlogN ứ ạ
Tim Sort s có đ ph c t p th p h n Quick Sort c Best Case l n ơ ở ả
Worse Case, Tim Sort là s k t h p c a Merge Sort và Insertion Sort. ự ế
Python s d ng thu t toán s p x p này là m c đ nh c a hử ụ ế
Trong tr ng h p, d li u r t ít ph n t (10-20 ph n t ), l a ch n ườ ầ ử ầ ử
Selection Sort s nhanh h n Quick SortTóm l i 1 l n n a , v ơ ầ ữ
thuy t thì Quick Sort th t s là thu t toán s p x p nhanh nh t trong ế ậ ự ế
ph n l n các tr ng h p. Tuy nhiên, trên th c t , vi c l a ch n thu t ườ ự ế ệ ự
toán s p x p d a vào nhi u y u t nh d li u đ u vào s l ng ắ ế ự ề ế ố ư ệ ầ ượ
nh th nào, có s p x p s n hay không, dung l ng b nh ra sao, ư ế ế ượ
t c đ x lý CPU… ộ ử
Thu t toán và bài h c cu c s ng ộ ố
Mình v n th ng hay nói đùa r ng: “Code không bao gi l a d i chúng ta ườ ờ ừ
c ”. Và th c s thì khi Code mình cũng chiêm nghi m ra nhi u bài h c ự ự
cu c s ng cho chính mình luôn. đây, t m t câu h i thu t toán s p x p ừ ộ ế
vô cùng đ n gi n nh ng chúng ta có th rút ra đ c r t nhi u bài h c th c ơ ư ượ ấ
t :ế
Hãy h c cách đ t l i câu h i cho v n đ đang đ c h i, đ t đó ượ ể ừ
phân tích tìm ra câu tr l i chính xác nh t. Đôi khi làm d án th c t , ả ờ ế
khách hàng s đ a ra nh ng yêu c u m h , thay vì c p đ u vào tìm ẽ ư ơ ồ
gi i pháp, hay code thì chúng ta hãy h i rõ khách hàng, làm rõ v n đ ấ ề
đó tr c đãướ
Trong cu c s ng, không có gì là hoàn h o c hãy nhìn đ t v n đ ặ ấ
g p ph i d i nhi u góc nhìn khác nhau, đ cân nh c và l a ch n ả ướ
gi i pháp cho h p lýả ợ
thông tin tài liệu
Thuật toán sắp xếp nào là nhanh nhất?” Và bài viết này của mình sẽ phần nào giúp các bạn tìm ra đáp án cho câu hỏi trên.
Mở rộng để xem thêm
xem nhiều trong tuần
yêu cầu tài liệu
Giúp bạn tìm tài liệu chưa có

LÝ THUYẾT TOÁN


×