u+1=vเป็นโพสต์เงื่อนไขของลูป while (ทำไมคุณถึงคิดว่ามัน“ ชัดเจน” ไม่ใช่ในกรณี?) นี่เป็นกรณีที่มี while while ที่ไม่มี a break
: เสมอเมื่อออกจาก loop มันอาจเป็นเพราะเงื่อนไข loop (ที่นี่ ) เป็นเท็จ มันไม่ใช่สิ่งเดียวที่จะเป็นจริงเมื่อลูปออกจากที่นี่ (อัลกอริทึมนี้คำนวณสิ่งที่น่าสนใจอย่างที่คุณเห็นในชั้นเรียนของคุณดังนั้นและก็โพสต์เงื่อนไข) แต่ก็ชัดเจนที่สุดu+1≠vu=[this interesting thing]v=[this interesting thing]
ตอนนี้เพื่อค้นหาคุณสมบัติที่น่าสนใจอื่น ๆ ไม่มีสูตรทั่วไป ในความเป็นจริงมีความรู้สึกอย่างเป็นทางการที่ไม่มีสูตรทั่วไปในการค้นหาค่าคงที่ของวง สิ่งที่ดีที่สุดที่คุณสามารถทำได้คือใช้เทคนิคบางอย่างที่ใช้งานได้ในบางกรณีเท่านั้นหรือโดยทั่วไปแล้วไปตกปลาเพื่อสังเกตการณ์ที่น่าสนใจ
หากคุณวนซ้ำสองสามครั้งโดยมีค่าคุณจะเห็นว่าในการวนซ้ำแต่ละครั้ง:n
- ทั้งกระโดดขึ้นไป ;u(u+v)/2
- หรือกระโดดลงไป 2v(u+v)/2
โดยเฉพาะอย่างยิ่งเริ่มน้อยกว่าและจะไม่มีวันแซงหน้ามัน นอกจากนี้เริ่มเป็นบวกและเพิ่มขึ้นขณะที่เริ่มต้นที่และลดลง ดังนั้นจึงเป็นค่าคงที่ตลอดโปรแกรมนี้uvuvn+10≤u≤v≤n+1
สิ่งหนึ่งที่ไม่ชัดเจนมากนักคือว่าสามารถเท่ากับหรือไม่ นั่นเป็นสิ่งสำคัญ: หากและเท่ากันเราจะมีและวนรอบจะดำเนินต่อไปเรื่อย ๆ ดังนั้นคุณต้องพิสูจน์ว่าและไม่เท่ากันเพื่อพิสูจน์ว่าอัลกอริทึมนั้นถูกต้อง (เช่นไม่วนซ้ำตลอดไป) เมื่อความต้องการนี้ได้รับการพิสูจน์แล้วมันเป็นเรื่องง่ายที่จะพิสูจน์ (ฉันออกจากเรื่องนี้เป็นแบบฝึกหัด) ว่าเป็นค่าคงที่แบบวนรอบ (โปรดจำไว้ว่าและเป็นจำนวนเต็มดังนั้นนี่จึงเท่ากับ )uvuvx=u=vuvu<vuvu+1≤v
เนื่องจากที่ส่วนท้ายของโปรแกรมโพสต์เงื่อนไขที่คุณได้รับยังสามารถเขียนได้ (ส่วนที่เป็นเรื่องเล็กน้อย) เหตุผลที่เราต้องการให้โพสต์ในสภาพเช่นนี้เกี่ยวข้องกับคือว่าเราต้องการที่จะผูกผลของโปรแกรมที่มีการป้อนข้อมูลที่nทำไมสภาพที่แม่นยำนี้ เรากำลังมองหาบางสิ่งที่แม่นยำที่สุดเท่าที่จะเป็นไปได้และเราจะดูว่ามีปรากฎในลูป:v=u+1u2≤n<v20≤u2nnn
- เรามี ;u≤x≤v
- เมื่อเราเลือกต่อไปเป็นดังนั้น (และไม่เปลี่ยนแปลง);u x u 2 ≤ n vx2≤nuxu2≤nv
- เมื่อเราเลือกถัดไปเป็นดังนั้น (และจะไม่เปลี่ยนแปลง)v x n < v 2 ux2>nvxn<v2u
การแบ่งขั้วนี้บอกเป็นนัย ๆ ว่าบางทีตลอดเวลา กล่าวอีกนัยหนึ่งเราสงสัยว่ามันเป็นค่าคงที่แบบวนซ้ำ การตรวจสอบสิ่งนี้ถูกทิ้งไว้เป็นแบบฝึกหัดให้กับผู้อ่าน (อย่าลืมตรวจสอบว่าคุณสมบัตินั้นเป็นจริงในตอนแรก)u2≤n<v2
และตอนนี้เราได้ทำสิ่งนี้เสร็จแล้วเราจะเห็นว่าและ :คือรากที่สองของปัดเศษลงเป็นจำนวนเต็มที่ใกล้ที่สุด( u + 1 ) 2 > n u nu2≤n(u+1)2>nun