2011-06-06 8 views
6

मैं जावा में एक पावर सबसिस्टम मॉडलिंग कर रहा हूं। एक साधारण SQLite डेटाबेस में लाइन रिप्लेबल यूनिट्स (एलआरयू) का एक सेट और उनके बीच कनेक्शन शामिल हैं। मैं डीडीडी पैटर्न और भंडारों का उपयोग कर डेटा स्टोर के प्रश्नों को सरल बनाने के लिए एक पावर मॉडल एपीआई लिख रहा हूं।क्या जावा में एक निर्देशित एसाइक्लिक ग्राफ (डीएजी) डेटा प्रकार है, और क्या मुझे इसका उपयोग करना चाहिए?

मैं क्वेरी परिणामों का मॉडल करने के लिए एक उचित जावा संग्रह की तलाश में हूं। वहाँ एक LRU कनेक्शन धारा में कुछ विशेष मामलों है कि मॉडल किए जाने हैं:

  1. प्रारंभ में, वहाँ कई बंदरगाहों (< = 16) के साथ एक विद्युत वितरण इकाई (PDU) कि नीचे की ओर LRUs करने की शक्ति खिलाती है।
  2. एक पावर स्ट्रीम में विशिष्ट कनेक्शन में एक स्रोत एलआरयू शामिल होता है जहां बिजली उत्पन्न होती है और एक सिंक एलआरयू जहां बिजली निकाली जाती है।
  3. हालांकि, डाउनस्ट्रीम एक एकल स्रोत एलआरयू हो सकता है जो कई सिंक एलआरयू से जुड़ा हुआ है।
  4. पावर स्ट्रीम में कोई चक्र नहीं हैं।

उपर्युक्त # 3 को शामिल करने से मुझे एपीआई से पेड़ के रूप में क्वेरी परिणाम लौटने के बारे में सोचना पड़ा है। लेकिन java.util में पाया गया एकमात्र पेड़ TreeMap कुंजी-मूल्य वाला लाल-काला पेड़ है, जो उचित प्रतीत नहीं होता है (या मैं इसके साथ मॉडलिंग पावर स्ट्रीम के लिए उपयुक्त अमूर्तता के बारे में नहीं सोच सकता।) I LinkedHashSet पर भी विचार कर रहा है, लेकिन मुझे विश्वास नहीं है कि यह उचित है। यह मुझे स्पष्ट नहीं है कि इस संरचना में एक नोड डाउनस्ट्रीम नोड्स को इंगित करेगा।

मैं इस समय समय या स्थान में दक्षता के बारे में चिंतित नहीं हूं। मेरे एपीआई को केवल बाहरी ग्राहकों को पावर कनेक्शन जानकारी की आपूर्ति करके काम करना है (यानी, जावा-आधारित पावर मॉनीटरिंग & कंट्रोल ऐप का प्रेजेंटेशन टियर।) ओपन सोर्स डेटा प्रकार/पुस्तकालयों के उपयोग पर कोई प्रतिबंध नहीं है।

सामान्य कंप्यूटर विज्ञान व्याख्यान में, जो मैं वास्तव में खोज रहा हूं वह एक निर्देशित-विश्वकोश-ग्राफ (डीएजी) है।

क्या जावा के लिए इसका कोई कार्यान्वयन है? क्या मैं सही हूं कि मेरे परिदृश्य के लिए एक डीएजी उपयुक्त है?

उत्तर

1

इस विशेष समस्या के लिए। मैंने LinkedListMultimap from Guava का उपयोग करने का निर्णय लिया है।

+0

का उपयोग करके प्रतिनिधित्व करने में असमर्थ हैं प्रत्येक नोड के लिए नक्शा, या पूरे ग्राफ के लिए एक मानचित्र? –

2

जैसा कि आप देख सकते हैं कि "संबंधित" प्रश्नों के संबंध में, इसी तरह के प्रश्न पहले से ही पूछे गए थे। और नहीं, Java does not have a general-purpose graph/tree/DAG data type (अगर हम स्विंग के ट्रीमोडेल की गणना नहीं करते हैं)।

अपना खुद का बनाओ।


यहाँ एक उदाहरण है (रीड-ओनली) इंटरफ़ेस:

interface Node<N extends Node<N,E>, E extends Edge<N,E>> { 
    public Set<E> outgoingEdges(); 
    public Set<E> ingoingEdges(); 
} 

interface Edge<N extends Node<N,E>, E extends Edge<N,E>> { 
    public E source(); 
    public E sink(); 
} 

फिर आप

interface LRU implements Node<LRU, Line> { ... } 
interface Line implements Edge<LRU, Line> { ... } 

(या वर्गों के बजाय) के लिए होगा।

+0

ठीक है, लेकिन क्या मेरी ज़रूरतों को पूरा करने वाली भाषा में एक और डेटाटाइप है? मैं निश्चित रूप से अपना खुद का डीएजी रोल कर सकता हूं, लेकिन मैं एक परिपक्व कार्यान्वयन का उपयोग करना पसंद करूंगा जिसका उपयोग बड़े समुदाय द्वारा किया/परीक्षण किया गया है। मुझे इस समस्या पर समय के लिए दबाया गया है, और मैं अपने ग्राहक को लंबी अवधि में अधिक कोड बनाए रखने के लिए मजबूर करने के लिए पहिया को फिर से शुरू नहीं करना चाहता हूं। – retrodrone

+0

मुझे किसी के बारे में पता नहीं है, और मैं खुद का उपयोग करूंगा ... लेकिन देखते हैं कि अन्य लोग यहां क्या सिफारिश कर सकते हैं। –

+1

ध्यान रखें Swing's TreeModel एक कनेक्टेड डीएजी है। कुछ डीएजी डिस्कनेक्ट हो गए हैं और इसलिए, TreeModel – Ogen

3

मुझे नहीं पता कि यह मदद कर सकता है लेकिन JGraphT पर एक नज़र डालें।

0

एफडब्ल्यूआईडब्ल्यू अगर कोई मानक-पुस्तकालय केवल समाधान चाहता है, तो सेट का नक्शा या अन्य संग्रहों का नक्शा नौकरी भी कर सकता है, हालांकि यह भी नहीं।

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