khoahoc.vietjack.com

Câu hỏi:

13/07/2024 1,224 Lưu

Với thuật toán sắp xếp chèn, chứng minh rằng nếu thay toàn bộ phần Chèn A[i] vào vị trị đúng của dãy con A[@), A[l], ..., A[i - 1]> bằng các lệnh sau thì chương trình vẫn đúng:

j=1

while j>0 and A[j]<A[j-1]:

       Đổi chỗ A[j] và A[j-1]

       j=j-1

Quảng cáo

Trả lời:

verified Giải bởi Vietjack

Để chứng minh tính đúng đắn của thuật toán sắp xếp chèn với các lệnh thay đổi trên, ta cần chứng minh hai điều kiện sau đây:

Điều kiện ban đầu (trước khi bắt đầu vòng lặp): Sau khi thực hiện lệnh j = 1, giá trị của j đang là 1, và dãy con A[0] chỉ gồm một phần tử là A[0] (vì j-1 là 0). Do đó, dãy con này đã được sắp xếp đúng.

Điều kiện duy trì (trong quá trình vòng lặp): Trong mỗi vòng lặp của while, nếu A[j] < A[j-1], ta hoán đổi giá trị của A[j] và A[j-1] bằng lệnh Đổi chỗ A[j] và A[j-1]. Sau đó, ta giảm giá trị của j đi 1 đơn vị bằng lệnh j = j - 1. Lúc này, giá trị của A[j] là giá trị của A[j-1] trước khi hoán đổi, và giá trị của A[j-1] là giá trị của A[j] trước khi hoán đổi. Điều này đồng nghĩa với việc dãy con A[0], A[1], ..., A[j-1] đã được sắp xếp đúng sau mỗi vòng lặp.

Vậy nên, dãy con A[0], A[1], ..., A[j-1] luôn được sắp xếp đúng sau mỗi vòng lặp của while, và dãy con này sẽ không bị thay đổi giá trị trong quá trình hoán đổi. Do đó, tính đúng đắn của thuật toán sắp xếp chèn vẫn được duy trì sau khi thay toàn bộ phần chèn A[i] vào vị trí đúng của dãy con A[0], A[1], ..., A[i-1] bằng các lệnh trên.

CÂU HỎI HOT CÙNG CHỦ ĐỀ

Lời giải

def is_prime(n):

    if n <= 1:

        return "KHÔNG" # Trường hợp n <= 1 không phải số nguyên tố

    elif n <= 3:

        return "CÓ" # Trường hợp n = 2 hoặc n = 3 là số nguyên tố

    elif n % 2 == 0:

        return "KHÔNG" # Trường hợp n chẵn lớn hơn

Lời giải

Các bước thiết kế như trên cần thay đổi như sau:

def Insertionsort(A):

      n=len(A)

     for i in range(1,n):

              value=A[i]

          j=i-1

          while j>=0 and A[j]<value:

                  A[j+1]=A[j]

                  j=j-1

         A[j+1]=value

Lời giải

Bạn cần đăng ký gói VIP ( giá chỉ từ 250K ) để làm bài, xem đáp án và lời giải chi tiết không giới hạn.

Nâng cấp VIP

Lời giải

Bạn cần đăng ký gói VIP ( giá chỉ từ 250K ) để làm bài, xem đáp án và lời giải chi tiết không giới hạn.

Nâng cấp VIP