2010-07-12 7 views
5

मेरे पास एक क्षेत्र पदानुक्रम (विचार राज्य, जिला, तालुक, आदि) है जिसे मुझे वृक्ष का उपयोग करके प्रतिनिधित्व करने की आवश्यकता है। मैंने सार्वजनिक डोमेन में एक पेड़ के कुछ कार्यान्वयन देखा लेकिन यह सुनिश्चित नहीं किया कि वे कितने अच्छे हैं और उन्हें कितनी अच्छी तरह से बनाए रखा जाता है। अपाचे संग्रह में उन लोगों में से एक नहीं है जो Google संग्रह करते हैं। मैं सोच रहा हूं कि आप में से कोई भी मुझे जावा में एक वृक्ष के कार्यान्वयन के लिए इंगित कर सकता है (जेनेरिक के साथ)। मैं एक पेड़ आंकड़ा संरचना रहा हूँक्या आप एक वृक्ष के लिए जावा डेटास्ट्रक्चर/लाइब्रेरी का उपयोग करते हैं

धन्यवाद,

अद्यतन, अधिमानतः जेनेरिक्स का उपयोग कर लागू किया: अच्छी तरह से परीक्षण किया गया।

+0

मुझे आपके लिए लगता है, कोई भी वास्तव में आपके प्रश्न का उत्तर नहीं दे रहा है। –

उत्तर

1

जेनिक्स का उपयोग करके एक पेड़ को लागू करना बहुत आसान है, इसे अपने आप को क्यों न दें? यदि आप जेनेरिक के साथ सहज नहीं हैं, तो आप एक पेड़ घोषित करने का प्रयास कर सकते हैं जिसमें इंटरफ़ेस को लागू करने वाले तत्व शामिल हैं, फिर बस अपने सभी विभिन्न क्षेत्र तत्वों को उस इंटरफ़ेस को लागू करें।

+2

मैंने लंबे समय पहले सी/सी ++ में पेड़ों को कई बार लागू किया है। अगर कुछ ऐसा था जो मैं पुन: उपयोग कर सकता था, तो मैं कुछ यूनिट परीक्षण और समय परीक्षण का उपयोग करना चाहता था! – anjanb

+0

एक बुनियादी पेड़ को लागू करना आसान है। लेकिन गंभीर पेड़ों को कुछ पुनर्वसन (जैसे लाल-काले पेड़) की आवश्यकता होती है। वे सही और कुशल पाने के लिए समय लेते हैं। उदाहरण के लिए, मुझे जो याद है, आरबी-पेड़ों के लिए 7 अलग-अलग रोटेशन मामले हैं। –

+0

यदि आप आरबी पेड़ को पुनर्व्यवस्थित करते हैं तो आप पेड़ की ऑर्डरिंग संपत्ति में रुचि रखते हैं, संरचनात्मक गुण (माता-पिता, बच्चे) नहीं। यदि ऐसा है, तो जावा में बिल्कुल ट्रीसेट है जो वास्तव में करता है, पुस्तकालयों की जांच करें। यदि आप कार्यान्वयन की तुलना में माता-पिता/बाल संबंधों को ट्रैक करने के लिए "वृक्ष संरचना" चाहते हैं तो यह मामूली है और आपके आपत्ति का कोई मतलब नहीं है। –

1

क्या आपका मतलब वृक्ष विजेट या डेटा संरचना जैसे पेड़ है? यदि आप ट्री विजेट के बारे में बात कर रहे हैं, तो स्विंग में एक कार्यान्वयन है।

JTree

+0

धन्यवाद। मेरा मतलब एक वृक्ष डेटास्ट्रक्चर था। – anjanb

1

आप क्या वर्णन कर रहे हैं और अधिक एक दस्तावेज़ ऑब्जेक्ट मॉडल (डोम) की तरह है। आम तौर पर जब लोग "वृक्ष" डेटा संरचना का संदर्भ लेते हैं, तो वे एक संतुलित बाइनरी पेड़ (जैसे लाल-काले पेड़ की तरह, जो निश्चित रूप से जावा संग्रह पुस्तकालय में मौजूद है) के बारे में बात कर रहे हैं। लेकिन उन प्रकार के पेड़ तेजी से इन-ऑर्डर सम्मिलन और लुकअप के लिए हैं।

किसी भी तरह, ज्यादातर लोग, जब लोग डोम का उपयोग करते हैं, वे एक्सएमएल पढ़ रहे हैं या लिख ​​रहे हैं, लेकिन ऐसा कोई कारण नहीं है कि आप अपने मनमाना पदानुक्रमित डेटा के लिए डीओएम का उपयोग नहीं कर सके। भले ही आप इसे एक्सएमएल तक कभी नहीं बनाते।

+0

डोम। जब आप XML के लिए इसका उपयोग नहीं कर रहे हैं तो डोम कितना महंगा है? – anjanb

+0

मुझे वास्तव में पता नहीं है, लेकिन मैं कुछ चीजों के बारे में अनुमान लगा सकता हूं ...डीओएम को एक महंगी एक्सएमएल-पार्सिंग तकनीक माना जाता है, यही कारण है कि आपको एक्सएमएल के माध्यम से स्कैनिंग और एसएएक्स कार्यक्रमों को फायर करने की बजाए पूरी एक्सएमएल फाइल को पार्स करना और स्मृति में रखना है। लेकिन आपके मामले में, आपको किसी भी तरह मेमोरी में पूरे दस्तावेज़ की ज़रूरत है, इसलिए मुझे नहीं लगता कि एक डीओएम कार्यान्वयन जो भी कस्टम डेटा संरचना आप स्वयं को रोल कर सकता है उससे कहीं अधिक महंगा होगा। (और निश्चित रूप से, आप I/O लागत का भुगतान नहीं करेंगे।) फिर, आपको अपने पेड़ मॉडल में एक्सएमएल के विशिष्ट अर्थशास्त्र के साथ रहना होगा। – benjismith

1

क्या यह http://www.java-tips.org/java-se-tips/java.lang/red-black-tree-implementation-in-java.html काम करेगा?

इसके अलावा, ओपनजेडीके से java.util.TreeMap स्रोत से शुरू करने के बारे में कैसे? http://download.java.net/openjdk/jdk7/

+0

उन कार्यान्वयन बाइनरी पेड़ के लिए हैं। क्या प्रत्येक राज्य में केवल दो जिले हैं, और प्रत्येक जिले में केवल दो तालुक हैं? यदि ऐसा है, तो वे काम कर सकते हैं। यदि आपको पदानुक्रम में प्रत्येक स्तर के दो से अधिक उदाहरणों को समायोजित करने की आवश्यकता है, हालांकि (और मैं आपको अनुमान लगा रहा हूं), तो आप अपना खुद का रोल करना चाहेंगे। मैंने कुछ हफ्ते पहले कुछ एक्सएमएल पार्सिंग के लिए यह किया था, और यह मुझे डिजाइन, परीक्षण, लिखित और दस्तावेज प्राप्त करने में केवल कुछ घंटे लगा। मैं कोड साझा नहीं कर सकता (यह वैसे भी सी # में है), लेकिन अगर आप अपने आप को कुछ भी काम नहीं करना चाहते हैं तो मैं डिज़ाइन साझा कर सकता हूं। – TMN

+0

यह आरबी पेड़ उदाहरण है जो Google में पहले पॉप अप करता है यदि आप आरबी पेड़ के जावा कार्यान्वयन की खोज करते हैं। लेकिन कोई यूनिट परीक्षण नहीं है, और यह अपूर्ण है: निकालना ऑपरेशन लागू नहीं किया गया है, और मैं देख सकता हूं क्यों (आरबी पेड़ों के लिए इसकी जटिलता दी गई)। –

2

DefaultMutableTreeNode देखें। यह सामान्य नहीं है, लेकिन अन्यथा बिल फिट बैठता है। भले ही यह javax.swing पैकेज में है, यह किसी भी एडब्ल्यूटी या स्विंग कक्षाओं पर निर्भर नहीं है। असल में, स्रोत कोड में वास्तव में टिप्पणी // ISSUE: this class depends on nothing in AWT -- move to java.util?

संबंधित मुद्दे