2015-12-25 22 views
5

Trong khóa học lập trình hướng đối tượng của chúng tôi, chúng tôi đã thảo luận một chủ đề mà tôi không nghĩ rằng anh ấy đã từng đặt tên, tôi đã cố gắng tìm ra tên của nó là tìm một cách thích hợp để giải quyết chúng, nhưng tôi không có may mắn.Cơ thể lặp này lặp lại bao nhiêu lần?

Đây không phải là bài tập về nhà, mà là một câu hỏi để làm rõ về quy trình giải quyết vấn đề này.

for I = (N + 2) downto -1 
    for J = (I - 1) to (N + 4) 
     // Code is run here 

Câu hỏi là "Đã bao nhiêu lần // Code is run here chạy?"

Dưới đây là những gì tôi đã cố gắng để giải quyết này:

1) I = (N + 2), J = [(N + 2) - 1] từ này (và những gì tôi nhớ) bạn sử dụng b - a - 1 để giải quyết cho số lần thực hiện, mang đến cho chúng ta X = [(N + 2) - 1] - (N + 2) - 1 có thể được đơn giản hóa để X = -2

2) I = -1, J = ((-1) - 1) and X = ((-1) - 1) - (-1) - 1 which simplifies to X = -2`

tôi m bị mất khi xử lý vòng lặp thứ hai for và cách kết thúc sự cố. Tôi biết rằng chúng tôi phải kết thúc bằng một câu trả lời chẳng hạn như r(r + 1)/2

Tôi chỉ muốn nói rằng tôi đã cố gắng tìm tên loại kỹ thuật này, nhưng ông ấy gọi đơn giản là "Tính toán mã" t trả lại bất kỳ tìm kiếm nào liên quan đến chủ đề này.

Cảm ơn bạn

EDIT: Khóa học này bằng Java, vì vậy đó là lý do tôi sử dụng thẻ Java cho câu hỏi này, nếu có ai đó tò mò.

EDIT2: Để làm rõ, đây là trên viết thi, vì vậy chúng tôi dự kiến ​​sẽ thực hiện điều này thông qua bút và giấy, tôi muốn một lời giải thích làm thế nào để giải quyết vấn đề này như tôi đã cố gắng nó nhiều lần và vẫn kết thúc với câu trả lời sai.

+0

là 'ranh giới to' bao gồm? – luk2302

+0

Bạn có thể không chỉ làm cách tiếp cận vật lý cổ điển để nhận được câu trả lời và làm việc ngược? Chỉ cần đặt một truy cập trong vòng I, sau đó cô lập vòng lặp J và làm như vậy. Hy vọng rằng một truy cập trong vòng lặp IJ sẽ cung cấp cho bạn truy cập trong J * truy cập trong tôi. – user2589273

+0

Bất kỳ cơ hội nào, ý của bạn là "Ký hiệu O"? – gian1200

Trả lời

3

Chỉ cần nhìn vào "mã" và bắt đầu đếm một cách hợp lý. Trong lần lặp đầu tiên của vòng lặp ngoài (được gọi là OL), bạn thực hiện vòng lặp bên trong (IL) (N + 4) - (N + 2 - 1) + 1 lần = 4 lần.

Giải thích +1: nếu chúng tôi chạy vòng lặp từ -1 đến 2, chúng tôi thực tế chạy 4 lần: -1, 0, 1, 2, toán học là `2 - (-1) + 1.

Lần sau I = N + 1, do đó IL chạy (N + 4) - (N + 1 - 1) + 1 lần = 5 lần. Tương tự, bước tiếp theo và bước sau đó, số lần IL được thực hiện tăng lên một lần mỗi lần: 4 + 5 + 6 + .... Câu hỏi còn lại là chúng ta đi bao xa.

Bước cuối cùng là I = -1, có IL được chạy (N + 4) - (-1 - 1) + 1 = N + 7 lần.

Số tiền bạn đang tìm kiếm do đó có vẻ là 4 + 5 + 6 + ... + (N + 6) + (N + 7). Mà trên thực tế là một cái gì đó giống như r(r + 1)/2 với một vài chất nền và bổ sung.

Các con số trên giả sử các đường bao gồm to.

Lưu ý: bất cứ khi nào bạn đưa ra một loại hình thức nào đó, hãy chọn thông số đầu vào như một thứ nhỏ (như 0 hoặc 1) và xác minh rằng công thức hoạt động cho giá trị đó.

Tổng hợp các giá trị bằng cách sử dụng công thức gaussian nhỏ r * (r + 1)/2 chúng tôi có r -> N + 7. Và do đó (N + 7) * (N + 8)/2. Nhưng sau đó chúng tôi đếm 3, 2 và 1 là tốt, mà thực sự không có trong danh sách trên, chúng ta cần phải trừ chúng và đi đến giải pháp cuối cùng của:

(N + 7) * (N + 8)/2 - 6 
+0

Tôi đăng câu trả lời cho câu hỏi này theo nhận xét của bạn trên bài đăng gốc của tôi, câu trả lời được cho là: '[(N + 7) (N + 8)/2 ] - 6' nhưng tôi không thể tìm ra cách này. – liquidsystem

+1

@liquidsystem, giải pháp hiện tại của tôi sẽ là '(N + 6) (N + 7)/2 - 3' khá gần. Tôi đoán sự khác biệt là câu hỏi chính xác mà tôi đã hỏi trước đây về việc bao gồm các giới hạn. – luk2302

+0

Chúng tôi không bao giờ thảo luận liệu anh ấy có cho chúng tôi các vấn đề toàn diện hay độc quyền hay không, vì vậy tôi muốn giả sử nó độc quyền. Ngoài ra, tôi đã tự hỏi nếu các phương trình mà ông nói với chúng tôi để sử dụng, 'b-a-1' là chính xác và làm thế nào để sử dụng để" rút ngắn "số lượng thời gian để đi bộ qua vòng lặp này? – liquidsystem

1

Thuật toán như được hiển thị trong câu hỏi như cú pháp cơ bản cũ tốt

for X down/to Y, that includes Y 

các vòng ngoài đi từ n+2 để -1, vì vậy vòng lặp bên trong đi

n+1 to n+4 => 4 iterations 
... 
-2 to n+4 => n+7 iterations 

Tổng hợp tất cả trong số này, chúng tôi nhận

n+3 
∑ (4+i) = 4(n+4) + (n+3)(n+4)/2 
i=0 
      = (n+11)(n+4)/2 

đó cũng là tương đương với (N + 7)(N + 8)/2 - 6

+0

Đúng vậy, ý tưởng chung của việc ghi nhớ điều này là một phần phức tạp, vì chúng tôi chỉ thảo luận ngắn gọn ý tưởng này và sau đó tiếp tục với các chủ đề khác, đó là một nỗi đau vì vài câu hỏi cuối cùng bao gồm các câu hỏi như cái này và khiến tôi mất điểm vì nó! – liquidsystem

+0

Phần khó nhất là không mắc lỗi trong phép tính lặp bên trong, sau đó đối với loại vấn đề đó, phương trình 'tổng (1 đến N) = N (N + 1)/2' được sử dụng rất nhiều. Đây có lẽ là phương trình chính cần nhớ. –

Các vấn đề liên quan