निम्नलिखित अभ्यास छात्रों को सौंपा गया है जिनकी मैं देखरेख करता हूं:
प्लेन में पॉइंट्स को देखते हुए , एक एल्गोरिथ्म तैयार करें, जो उन सभी पॉइंट्स को जोड़े जो सभी पॉइंट्स के बीच कम से कम दूरी पर हों। एल्गोरिथ्म समय में चलना चाहिए ।o ( n 2 )
वहाँ एक (अपेक्षाकृत) सरल विभाजन और जीत एल्गोरिथ्म है जो कार्य को समय में हल करता है ।
प्रश्न 1 : क्या कोई एल्गोरिथ्म है जो दी गई समस्या को सबसे खराब समय हल करता है ?
मुझे क्या संदेह था कि यह संभव हो सकता है एक परिणाम है जो मुझे कुछ चर्चा (संदर्भ की सराहना) में देखा गया है। यह कुछ की पंक्तियों के साथ कहा गया है कि अंकों की एक स्थिर संख्या से अधिक नहीं में विमान में कुछ बिंदु चारों ओर त्रिज्या एक चक्र के अंदर में साथ व्यवस्थित किया जा सकता है। शामिल बिंदुओं में से किसी दो के बीच न्यूनतम दूरी। मुझे लगता है कि , केंद्र में साथ एक समभुज षट्भुज बनाने वाले बिंदु (चरम मामले में)। पी आर ∈ आर आर सी = 7 पी
उस स्थिति में, निम्न एल्गोरिथम उन्हें चरणों में समस्या का समाधान करना चाहिए ।
fun mindist [] | p::[] = INFINITY
| mindist p1::p1::[] = dist(P[0], P[1])
| mindist p::r = let m = mindist(r) in
min(m, nextNeighbour(p, r, m))
end
ध्यान दें कि यह (होने का दावा किया जाता है) रैखिक समय में क्योंकि केवल अंकों की एक निरंतर संख्या इससे r
दूर नहीं हो सकती m
है p
(ऊपर दिए गए कथन को मानते हुए); नया न्यूनतम खोजने के लिए केवल इन बिंदुओं की जांच की जानी चाहिए। निश्चित रूप से एक पकड़ है; आप कैसे लागू करते हैं nextNeighbour
(शायद रैखिक समय में प्रीप्रोसेसिंग के साथ)?
प्रश्न 2 : अंक और बिंदु का एक सेट दें । चलो के साथपी ∉ आर एम ∈ आर
तथा
।
मान लें । क्या यह संभव है कि में (amortized) time से न्यूनतम दूरी के साथ हो ? (आप मान सकते हैं जांच अंक जोड़कर निर्माण किया जा करने के लिए एक के बाद एक।) पी ' ∈ आर पी , m पी ओ ( 1 ) आर पी