Biến thể vòng lặp cho một vòng lặp đôi khi không giảm?


7

Tôi đang làm việc với các bài toán thực hành cho một bài kiểm tra mà tôi có, và mọi ví dụ về biến thể vòng lặp đều giảm theo mỗi lần lặp của vòng lặp. Trên cái này, các giá trị vẫn giữ nguyên khi a <b. Những nỗ lực của tôi cũng mang lại cho tôi một biến thể vòng lặp có khả năng âm tính vì đôi khi a trở nên lớn hơn b và ngược lại. Có lời khuyên nào về việc cố gắng tìm và chứng minh biến thể vòng lặp cho câu hỏi này không?

def mystery(a,b):
# Precondition: a >= 0 and b >= 0
while a >= 0 and b >= 0:
    if a < b:
        a, b = b, a
    else:
        a = a - 1
return a

EDIT: Đối với bất kỳ ai quan tâm đến câu hỏi này, giải pháp tốt nhất của tôi là như sau.

f1=a+2b+1

1
Rất đẹp! Tôi nghĩ bạn nên làm cho nó một câu trả lời (hoặc thậm chí là câu trả lời).
Anton Trunov

Câu trả lời:


7

Bây giờ chỉ là một gợi ý, vì đây là một vấn đề thực tiễn: xem xét sự kết hợp từ vựng của các đơn đặt hàng.

Chi tiết hơn: Giả sử bạn có hai bản đồ và từ chương trình của bạn, thành các miền được sắp xếp hợp lý và . Kết hợp từ vựng của và là thứ tự trên được đưa ra bởi nếu hoặc . Nó cũng có cơ sở.f1:SD1f2:SD2S(D1,1)(D2,2)12D1×D2(x1,y1)(x2,y2)x11x2x1=x2,y12y2

Vì vậy, nếu là như vậyf1,f2

  • f1 không bao giờ tăng và
  • Bất cứ khi nào không giảm, không,f1f2

sau đó bản đồ là một biến thể chứng minh chấm dứt.(f1,f2):SD1×D2


Cảm ơn các gợi ý! Chúng tôi chưa thực hiện các kết hợp từ vựng, tôi sẽ xem xét ngay bây giờ. Bạn có thể giải thích làm thế nào mà nó sẽ cho phép nó giảm trong mọi trường hợp?
Andrew Raleigh

@AndrewRaleigh Tôi đã thêm một số chi tiết
Klaus Draeger

Điều đó rất có ý nghĩa, không bao giờ nghĩ về nó theo cách đó. Trong trường hợp này, và ? Mặc dù đôi khi nó vẫn giữ nguyên, và các slide bài giảng không nói gì về việc có được phép hay không.
f1=a
f2=ba
Andrew Raleigh

1
Vấn đề với là nó có thể tăng (khi bị tráo đổi). Cố gắng tìm một biểu thức không thay đổi trong trường hợp này và giảm trong biểu thức kia (khi bị giảm). f1=aa,ba
Klaus Draeger

1

Đây là một cách tiếp cận chỉ liên quan đến một ánh xạ: Phân tích trường hợp đơn giản có thể cho thấy luôn giảm khi bạn đi qua vòng lặp.

f=(a+1)(b+1)+(ba)
f
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.