Ôn tập kiến thức Tin học 11 định hướng Khoa học máy tính Cánh diều bài 8: Lập trình một số thuật toán sắp xếp

Ôn tập kiến thức Tin học 11 định hướng Khoa học máy tính Cánh diều bài 8: Lập trình một số thuật toán sắp xếp. Nội dung ôn tập bao gồm cả lí thuyết trọng tâm và bài tập ôn tập để các em nắm chắc kiến thức trong chương trình học. Hi vọng đây sẽ là tài liệu hữu ích giúp các em ôn luyện và kiểm tra. Kéo xuống để tham khảo

[toc:ul]

1. BÀI TOÁN SẮP XẾP

- Trong tin học, thuật ngữ sắp xếp đề cấp đến việc tổ chức lại một tập hợp dữ liệu theo một tiêu chí sắp xếp, tức là đáp ứng một yêu cầu cụ thể về trình tự.

- Yêu cầu sắp xếp cần chỉ rõ cách so sánh hai mục dữ liệu để quyết định thứ tự.

Ví dụ: Bài toán sắp xếp đơn giản và minh họa bằng sắp xếp dãy số.

- Đầu vào: Dãy n số a0, a1 ,..., an – 1.

- Đầu ra: Dãy được sắp xếp theo thứ tự tăng dần (không giảm).

Sắp xếp tại chỗ và không tại chỗ

- Một thuật toán không dùng thêm một dãy khác ở bên ngoài dãy ban đầu để thực hiện sắp xếp được gọi là sắp xếp tại chỗ.

- Nếu thuật toán sử dụng một dãy khác ở bên ngoài dãy ban đầu để chứa kết quả thì gọi là sắp xếp không tại chỗ.

Nghịch thế 

- Nếu i < jai > aj thì cặp hai phần tử (ai, aj) gọi là một nghịch thế.

- Một thuật toán sắp xếp dựa trên ý tưởng giảm dần và tiến đến triệt tiêu các nghịch thế trong dãy.

2. THUẬT TOÁN SẮP XẾP NỔI BỌT (BUBBLE SORT)

- Ý tưởng sắp xếp nổi bọt (Bubble Sort):

+ Xét lần lượt các cặp phần tử liên tiếp: nếu ai > ai+1 thì đổi chỗ [ai, ai+1]. 

+ Lặp lại cho đến khi triệt tiêu hết các cặp nghịch thế. 

+ Có thể chứng minh sau vòng lặp 1 thì số lớn nhất trong dãy sẽ được chuyển đến vị trí cuối dãy, tức là phần tử a[n – 1] đã ở đúng vị trí. Như vậy vòng lặp 2 chỉ cần rà soát nghịch thế và đổi chỗ đến vị trí n – 2.

- Sau vòng lặp i thì phần tử a[n – i – 1] đã ở đúng vị trí.

- Mã giả của thuật toán sắp xếp nổi bọt:

2. THUẬT TOÁN SẮP XẾP NỔI BỌT (BUBBLE SORT) - Ý tưởng sắp xếp nổi bọt (Bubble Sort):  + Xét lần lượt các cặp phần tử liên tiếp: nếu ai > ai+1 thì đổi chỗ [ai, ai+1].   + Lặp lại cho đến khi triệt tiêu hết các cặp nghịch thế.   + Có thể chứng minh sau vòng lặp 1 thì số lớn nhất trong dãy sẽ được chuyển đến vị trí cuối dãy, tức là phần tử a[n – 1] đã ở đúng vị trí. Như vậy vòng lặp 2 chỉ cần rà soát nghịch thế và đổi chỗ đến vị trí n – 2.  - Sau vòng lặp i thì phần tử a[n – i – 1] đã ở đúng vị trí.  - Mã giả

3. THUẬT TOÁN SẮP XẾP CHÈN TUYẾN TÍNH (INSERTION SORT)

Ý tưởng sắp xếp chèn tuyến tính:

- Vì dãy con a0 chỉ có một phần tử, nên dãy con này có thứ tự.

- Lặp lại việc chèn ai  với 1 ≤ i < n như sau:

Xét dãy con a0,..., ai – 1 đã có thứ tự, ta chèn ai vào dãy con này sao cho dãy con sau khi chèn sẽ có thứ tự.

Mô tả thuật toán chèn tuyến tính: 

3. THUẬT TOÁN SẮP XẾP CHÈN TUYẾN TÍNH (INSERTION SORT) Ý tưởng sắp xếp chèn tuyến tính:  - Vì dãy con a0 chỉ có một phần tử, nên dãy con này có thứ tự.  - Lặp lại việc chèn ai  với 1 ≤ i < n như sau:  Xét dãy con a0,..., ai – 1 đã có thứ tự, ta chèn ai vào dãy con này sao cho dãy con sau khi chèn sẽ có thứ tự.  Mô tả thuật toán chèn tuyến tính:

Mô tả các bước của thuật toán như sau:

Bước 0. i ← 1;

Bước 1. 

      if i ≥ n: kết thúc;

     else: val ← ai; k ← i – 1;

Bước 2. 

     if k ≥ 0:

           if ak > val: ak + 1 ← ak; k ← k – 1; đến Bước 2;

Bước 3. ak + 1 ← val; i ← i + 1; đến Bước 1;

Để “chèn ai vào đúng chỗ của nó” trong dãy a0, a1 ,..., ai – 1 cần:

a) Tìm được chỗ đúng thứ tự của ai : Cho k đi từ i – 1 qua trái cho đến khi ak ≤ ai hoặc k = – 1.

b) Lấy ai ra khỏi dãy; dịch chuyển dãy ak + 1 ,..., ai – 1 sang phải một vị trí để có chỗ trống tại ak + 1; đưa ai vào chỗ trống đó.

Mã giả thuật toán sắp xếp chèn tuyến tính

Thuật toán sắp xếp chèn tuyến tính kết hợp làm đồng thời hai việc a) và b) theo cách dịch chuyển dần từng bước sang trái, từ vị trí i tới vị trí k + 1.

- Vòng lặp for bên ngoài kiểm soát việc thực hiện đúng n – 1 bước.

- Vòng lặp while lồng bên trong thực hiện đồng thời cùng

4. THỰC HÀNH

Nhiệm vụ 1.

a) Số lần lặp của vòng lặp bên trong với bước i sẽ không quá i.

b) Vòng lặp ngoài của thuật toán được thực hiện đúng n – 1 lần như đã nhận xét trong bài học.

c) Ước lượng độ phức tạp thời gian của thuật toán sắp xếp chèn tuyến tính là O(n2) vì không vượt quá tổng 1 + 2 + … + n – 1.

Nhiệm vụ 2. Tham khảo chương trình sau:

def sxNoibot(a):

    n = len(a)

    for i in range(n):

        CoDoiCho = False

        for k in range(n-1-i):

            if a[j] > a[j+1]:

                CoDoiCho = True

                a[j], a[j+1] = a[j+1], a[j]

        if (not CoDoiCho):

            return

Nhiệm vụ 3. Tham khảo chương trình sau:

def sxChen(a): # chèn tuyến tính

    n = len(a)

    for i in range(1,n):

       val = a[i]

       j, i = i, i+1

       # dịch dần từng bước, tìm vị trí để chèn

       while(j>0) and (a[j-1] > val):

           a[j] = a[j-1]

           j = j - 1

    a[j] = val

=> Kết luận:

- Thuật toán sắp xếp nổi bọt có hai vòng lặp lồng nhau; vòng lặp trong thực hiện đổi chỗ một lượt các cặp phần tử là nghịch thế, vòng lặp ngoài kiểm tra điều kiện “không xảy ra đổi chỗ”.

- Việc tìm vị trí chèn đúng chỗ trong thuật toán sắp xếp chèn có thể thực hiện bằng cách dịch dần từng bước.

Tìm kiếm google: Ôn tập kiến thức Tin học 11 định hướng Khoa học máy tính Cánh diều bài 8: Lập trình một số thuật toán sắp xếp, Kiến thức trọng tâm Tin học 11 định hướng Khoa học máy tính Cánh diều bài 8: Lập trình một số thuật toán sắp xếp

Xem thêm các môn học

Giải tin học 11 định hướng Khoa học máy tính Cánh diều mới


Copyright @2024 - Designed by baivan.net