สูงสุด 2 มิติในท้องถิ่น
การป้อนข้อมูล: 2 มิติอาร์เรย์n × nA
เอาต์พุต:ค่าสูงสุดในพื้นที่ - คู่ที่ A [ i , j ]ไม่มีเซลล์ข้างเคียงในอาร์เรย์ที่มีค่าที่ใหญ่กว่าอย่างเคร่งครัด ( i , j )A [ i , j ]
(เซลล์เพื่อนบ้านคือเซลล์ที่มีอยู่ในอาร์เรย์) ตัวอย่างเช่นถ้าAคือA [ i , j + 1 ] , A [ i , j - 1 ] , A [ i - 1 , j ] , A [ i + 1 , j ]A
0324125033014113
จากนั้นแต่ละเซลล์ที่มีตัวหนาจะมีค่าสูงสุดในท้องถิ่น ทุกอาร์เรย์ที่ไม่ว่างจะมีค่าสูงสุดอย่างน้อยหนึ่งค่า
ขั้นตอนวิธี มีอัลกอริทึม - เวลา: เพียงตรวจสอบแต่ละเซลล์ นี่คือแนวคิดสำหรับอัลกอริทึมที่เร็วกว่าแบบเรียกซ้ำได้O ( n2)
รับ , กำหนด cross Xเพื่อให้ประกอบด้วยเซลล์ในคอลัมน์กลางและเซลล์ในแถวกลาง แรกตรวจสอบแต่ละเซลล์ในXเพื่อดูว่ามือถือเป็นสูงสุดในท้องถิ่น หากเป็นเช่นนั้นให้ส่งคืนเซลล์ดังกล่าว มิฉะนั้นให้( i , j )เป็นเซลล์ในXด้วยค่าสูงสุด เนื่องจาก( i , j )ไม่ใช่ค่าสูงสุดในท้องถิ่นจึงต้องมีเซลล์ใกล้เคียง( i ′ , j ′ ) ที่มีค่ามากกว่าAXXA( i , j )X( i , j )( ฉัน', j')
พาร์ติชัน (อาเรย์A , ลบเซลล์ในX ) ออกเป็นสี่ส่วน - ซ้ายบน, ขวาบน, ซ้ายล่างและ quadrants ขวาล่าง - ตามธรรมชาติ เซลล์ข้างเคียง( i ′ , j ′ ) ที่มีค่ามากกว่าจะต้องเป็นหนึ่งในจตุภาคนั้น เรียกว่าวอด' A ∖ XAX( ฉัน', j')A'
บทแทรก Quadrant 'มีสูงสุดในท้องถิ่นของA'A
พิสูจน์ พิจารณาเริ่มต้นที่เซลล์ ) หากไม่ใช่ค่าสูงสุดในท้องถิ่นให้ย้ายไปยังเพื่อนบ้านที่มีค่ามากกว่า สามารถทำซ้ำได้จนกว่าจะถึงเซลล์ที่มีค่าสูงสุดในพื้นที่ ว่าเซลล์สุดท้ายจะต้องมีใน'เพราะ'เป็นที่สิ้นสุดในทุกด้านโดยเซลล์ที่มีค่ามีขนาดเล็กกว่าค่าของเซลล์( ฉัน' , J ' ) สิ่งนี้พิสูจน์บทแทรก ⋄( ฉัน', j')A'A'( ฉัน', j')⋄
อัลกอริทึมเรียกตัวเองซ้ำใน sub-arrayA′เพื่อค้นหาค่าสูงสุดในพื้นที่(i,j) ที่นั่นจากนั้นส่งคืนเซลล์นั้นn2× n2A′(i,j)
เวลาทำงานสำหรับn × nตอบสนองเมทริกซ์T ( n ) = T ( n / 2 ) + O ( n )ดังนั้นT ( n ) = O ( n ) T(n)n×nT(n)=T(n/2)+O(n)T(n)=O(n)
ดังนั้นเราได้พิสูจน์ทฤษฎีบทต่อไปนี้:
ทฤษฎีบท. มีความเป็นเรียลไทม์อัลกอริทึมสำหรับการค้นหาในท้องถิ่นสูงสุดในn × nอาร์เรย์O(n)n×n
หรือว่าพวกเรา