Độ phức tạp thời gian của một vòng lặp ba lồng


13

Vui lòng xem xét vòng lặp ba lồng sau đây:

for (int i = 1; i <= n; ++i)
    for (int j = i; j <= n; ++j)
        for (int k = j; k <= n; ++k)
            // statement

Câu lệnh ở đây được thực thi chính xác lần. Ai đó có thể vui lòng giải thích làm thế nào công thức này đã thu được? Cảm ơn bạn.n(n+1)(n+2)6


1
Câu hỏi Công thức phức tạp thời gian của các vòng lặp lồng nhau cũng có thể được quan tâm.
Juho

Câu trả lời:


14

Bạn có thể đếm số lần vòng lặp trong cùng cho vòng lặp được thực hiện bằng cách đếm số lượng bộ ba (i,j,k) mà nó được thực hiện.

Bởi các điều kiện vòng lặp chúng ta biết rằng: 1ijkn . Chúng ta có thể giảm nó thành vấn đề tổ hợp đơn giản sau đây.

  • Hãy tưởng tượng n+2 hộp màu đỏ được đặt trong một mảng từ trái sang phải.
  • Chọn bất kỳ 3 hộp từ hộp n+2 và sơn chúng màu xanh.
  • Tạo thành một bộ ba như sau: (i,j,k)
    • = 1 + số hộp màu đỏ ở bên trái hộp màu xanh đầu tiên.i
    • = 1 + số hộp màu đỏ ở bên trái hộp màu xanh thứ hai.j
    • = 1 + số hộp màu đỏ ở bên trái hộp màu xanh thứ ba.k

Vì vậy, chúng ta chỉ cần đếm số cách chọn 3 hộp từ hộp là ( n + 2n+2 .(n+23)


2
Câu trả lời tốt đẹp! Các giá trị chính xác của i, j, k không quan trọng. Chúng ta chỉ cần biết rằng bất kỳ hộp màu xanh nào cũng có thể được đặt ở n vị trí có thể và vị trí của chúng bị giới hạn: thứ 2 luôn luôn đứng sau số 1 và trước số 3.
Dávid Natingga

@rizwanhudda Xóa trừ phần trong n + 2 . Bạn có thể giải thích nó được không? n + 3 trông giống số đúng. +2n+2n+3
saadtaame

1
@saadtaame Vâng. Bạn có thể tưởng tượng có hộp màu đỏ, nhưng có thể tự do chọn 3 hộp màu đỏ để sơn màu xanh trong số " n + 2 hộp màu đỏ", vì bạn không thể tô màu hộp đầu tiên thành màu xanh lam (Vì tôi 1 )n+3n+2i1
rizwanhudda

3

đối với tôi, dễ dàng nhận thấy vòng lặp bên trong được thực hiện lần và tổng số lần thực hiện trong vòng lặp bên trong làni

(ni)+(ni1)+(ni2)++1

điều này có thể được viết lại dưới dạng và được thực hiện n lần, vì vậy tổng số lần thực hiện làj=0ninijn

i=0nj=0ninij=n(n+1)(n+2)6

Một thách thức cho bạn: Hãy tưởng tượng bạn có một vòng lặp x lồng nhau. Theo câu trả lời trước, nó sẽ thực thi (n + x-1) chọn x lần. Làm thế nào bạn sẽ tính toán công thức của bạn?
Dávid Natingga

may mắn thay, OP đã không yêu cầu x lồng nhau! Làm thế nào để câu trả lời khác được mở rộng cho một vòng lặp x lồng nhau? Câu trả lời của tôi sẽ nhận được nhiều khoản tiền hơn từ 0 đến n, 0 đến n-i_1, 0 đến n-i_2, ..., 0 đến n-i_x. Nhưng tôi không biết làm thế nào để tính toán điều đó.
andy mcevoy

1
Câu trả lời không mở rộng rõ ràng cho một x chung, nhưng quá trình suy luận được trình bày rất dễ thực hiện theo các vòng lặp x lồng nhau. Bạn chỉ cần thêm nhiều hộp màu xanh. Tôi cũng không biết mình sẽ tính những khoản tiền đó như thế nào.
Dávid Natingga
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.