Cấu trúc dữ liệu « MicrosoftTech.Net

Bài toán Đệ Quy

Bài toán Đệ quy trong Lập trình | Lập trình Csharp | MicrosoftTech.Net

1. Giới thiệu Bài toán Đệ quy Đệ quy là một kỹ thuật lập trình khá hữu dụng trong nhiều trường hợp. Xét về bản chất, đệ quy chính là những vòng lặp nhưng dĩ nhiên đệ quy sẽ có những ưu điểm so với vòng lặp thông thường và khi sử dụng đệ quy sẽ đem lại kết quả tối ưu hơn với những cách thực hiện đơn giản hơn. Và tất nhiên những bài toán giải được bằng đệ quy thì có thể giải bằng vòng lặp thông thường (Quy trình khử đệ quy) (Có thể không tối ưu bằng).

Hình phía trên nhằm minh họa để ta dễ hiểu hơn về đệ quy. Hình được tạo ra khi tôi chạy chương trình team viewer trên 2 máy tính, trên máy tính này sẽ thấy màn hình máy tính kia và ngược lại… cứ như thế bên trong mỗi màn hình lại có chứa màn hình khác. Quá trình lặp đi lặp lại dường như đến vô tận (có thể xem quá trình này dừng lại khi kích thước khung hình được tạo ra quá nhỏ, không đủ pixel để hiển thị chi tiết) Ví dụ thường thấy là khi ta để 2 tấm gương phản chiếu hướng vào nhau, nhìn trong tấm này sẽ thấy hình ảnh tấm kia, cứ như vậy số lượng hình ảnh sẽ tăng lên… đến vô tận.

2. Khái niệm Đệ quy Đến đây chắc …..

Thuật toán Sắp xếp Nổi bọt– Bubble Sort

Thuật toán sắp xếp Nổi bọt - Bubble Sort | MicrosoftTech.Net

1. Bài toán sắp xếp Nổi bọt

Như đã biết ở bài viết trước về thuật toán Sắp xếp chọn ta thấy rằng sau mỗi vòng lặp ta lựa được một phần tử nhỏ nhất đưa về đầu danh sách, các phần tử còn lại hầu như không ảnh hưởng. Ta thấy rằng kết quả của vòng lặp trước không ảnh hưởng đến vòng lặp sau. Trong bài viết này chúng ta sẽ xét tới thuật toán sắp xếp Nổi bọt – Cải tiển hơn so với Thuật toán sắp xếp chọn.

Với thuật toán này, sẽ có 2 vòng lặp lồng nhau. Tại mỗi vòng lặp con sẽ chạy từ cuối danh sách trở về đầu danh sách. tại mỗi bước sẽ so sánh 2 phần tử kế cận nhau nếu phần tử nào nhỏ hơn sẽ được đảo về phía trước. Trong mỗi vòng lặp con, phần tử nhỏ nhất sẽ lần lượt được đưa về đầu dòng theo phương pháp tráo đổi – Đúng với tư tưởng “Nổi bọt” phần tử nhỏ sẽ dần được nổi lên trên cùng. Đặc điểm tối ưu hơn so với Sắp xếp chọn là tại mỗi vòng lặp con do có quá trình tráo đổi phần tử nhỏ về đầu dãy nên các phần tử lớn dần được đưa về cuối dãy và đồng thời những giá trị nhỏ cũng dần được đưa về đầu dãy. Đối với phương pháp sắp xếp chọn có tối …..

Thuật toán Sắp xếp chọn - Selection Sort

Thuật toán sắp xếp chọn - Selection Sort | MicrosoftTech.Net

1. Bài toán sắp xếp chọn

Trong quá trình thao tác dữ liệu, sẽ có những trường hợp cần phải sắp xếp dữ liệu trong danh sách theo một thứ tự nào đó theo các yêu cầu. Tùy từng loại cấu trúc dữ liệu khác nhau sẽ có phương án sắp xếp tối ưu cho cấu trúc dữ liệu đó. Xét giới hạn trong kiểu dữ liệu danh sách đơn giản là mảng các phần tử, Sắp xếp chọn – Selection Sort là một kiểu sắp xếp đơn giản nhất, thuật toán rõ ràng, dễ hiểu.

Tư tưởng của của thuật toán này như sau: Sẽ có n – 1 vòng lặp duyệt qua danh sách (n là tổng số phần tử), tại mỗi vòng lặp sẽ chọn phần tử nhỏ nhất đưa lên đầu danh sách. Như vậy sau vòng lặp thứ nhất thu được phần tử nhỏ nhất tại vị trí đầu tiên, sau vòng lặp thứ 2 thu được phần tử nhỏ nhất trong danh sách còn lại (không tính phần tử thứ 2) tại vị trí thứ hai… cứ như vậy cho đến vòng lặp thứ n – 1 sẽ còn 2 phần tử, ta lấy phần tử nhỏ hơn đưa vào vị trí thứ n – 1 và tất nhiên vị trí cuối cùng sẽ là phần tử lớn nhất. Tại mỗi vòng lặp để xác định phần tử có giá trị nhỏ nhất ta cần dùng thêm một …..