मैं इस एल्गोरिदम के एक सरल संस्करण को लागू करने की कोशिश कर रहा हूं लेकिन जो वर्गिक एल्गोरिदम से बेहतर काम करता है। मेरा विचार मूल रूप से केवल एक्स समन्वय द्वारा अंक को क्रमबद्ध करना है और इसे वहां से हल करने का प्रयास करना है। एक बार जब मैं एक्स समन्वय द्वारा अंक की अपनी सरणी को सॉर्ट करता हूं, तो मैं सरणी पर फिर से शुरू करना चाहता हूं और मूल रूप से उन बिंदुओं पर छोड़ना चाहता हूं जिनकी दूरी पहले दो बिंदुओं से अधिक है।अंक एल्गोरिदम की निकटतम जोड़ी
उदाहरण के लिए, मेरा currentminDist = x;
यदि दो बिंदुओं की जोड़ी मैं देख रहा हूं, तो दूरी> x (केवल इसके x समन्वय से) है, मैं बिंदु को अनदेखा करता हूं और इसे सरणी में पीछे ले जाता हूं।
मेरे पास विचार है, लेकिन मैं इस तरह से वास्तव में इसे लागू करने के तरीके पर अटक गया हूं (विशेष रूप से हालत भाग)। मेरे पास एक ऐसा कार्य है जो मुझे अपने एक्स समन्वय के आधार पर दो बिंदुओं के बीच की दूरी देता है।
मैं अपने लूप के लिए वास्तव में अपनी स्थितियों को लिखने के तरीके से उलझन में हूं क्योंकि मैं एक बिंदु को अनदेखा करना चाहता हूं अगर दूरी बहुत दूर होती है और फिर भी मेरी सरणी भरती है जिसमें प्रत्येक I के लिए निकटतम बिंदुओं के उत्तर होंगे (मैं वर्तमान बिंदु हूं मैं देख रहा हूँ)।
कोई सुझाव या निर्देशों की बहुत सराहना की जाएगी। मैं कोडिंग एल्गोरिदम में बहुत जानकार नहीं हूं इसलिए यह काफी निराशाजनक है।
for (i = 0; i < numofmypoints; i++)
{
for (int j = i + 1; (j < numpofmypoints) && ((inputpoints[j].x - inputpoints[i].x) < currbest); j++)
{
currdist = Auxilary.distbyX(inputpoints[i],inputpoints[j]);
if (currdist < bestdist)
{
closest[i] = j;
bestdist = currdist;
}
}
}
distbyX मेरी समारोह है कि सिर्फ दो अंक के बीच की दूरी देता है:
यहाँ मेरी कोड का हिस्सा है।
धन्यवाद!
@Paul: यदि आप इस अक्सर करते हैं की जरूरत है? अपने अंक को "क्वाड्री" सहायता में संग्रहीत नहीं करेंगे? http://en.wikipedia.org/wiki/Quadtree – TacticalCoder
ध्यान दें कि आप बेवकूफ एल्गोरिदम के मुकाबले बेहतर प्रदर्शन प्राप्त कर सकते हैं, लेकिन फिर भी आप 'ओ (एन^2) 'हालांकि होंगे। – ARRG
आपके कोड में 'currbest' और 'bestdist' क्यों है? अंतर क्या है? – Ishtar