एक ग्राफ में पथों का कॉम्पैक्ट प्रतिनिधित्व


9

मैं एक ग्राफ में सरल रास्तों का सबसेट हूँ। रास्तों की लंबाई से घिरा है ।

सबसे कॉम्पैक्ट तरीका क्या है (मेमोरी-वार) मैं उन रास्तों का प्रतिनिधित्व कर सकता हूं जैसे कि चयनित लोगों के अलावा कोई दूसरा रास्ता नहीं है?

ध्यान दें कि मैं एक एल्गोरिथ्म में इस प्रतिनिधित्व का उपयोग करना चाहता हूं जो बार-बार पथों के इस सबसेट के माध्यम से पुनरावृत्ति करेगा और मैं काफी तेज होना चाहता हूं, इसलिए उदाहरण के लिए, मैं किसी भी मानक संपीड़न एल्गोरिदम का उपयोग नहीं कर सकता हूं।

मेरे दिमाग में आया एक प्रतिनिधित्व पेड़ों के एक समूह के रूप में उनका प्रतिनिधित्व कर रहा था। मैं अनुमान लगा रहा हूँ कि यह पेड़ों की एक इष्टतम संख्या के लिए नीचे हो रही है, एनपी कठिन है? क्या अन्य प्रतिनिधित्व अच्छा होगा?


2
जब "इस सबसेट के माध्यम से पुनरावृत्ति", आपको प्रत्येक पथ के बारे में कौन सी जानकारी की आवश्यकता है? लंबाई? देखे गए नोड्स? अन्य रास्तों के साथ अंतर्संबंध? ... कई हो सकते हैं , इसलिए आपको "वास्तव में तेजी से नहीं" के लिए तैयार रहना होगा यदि आपको पूरे रास्ते को स्टोर करने की आवश्यकता है। 2
राफेल

मुझे नहीं पता कि आपको किसी अज्ञात प्रक्रिया द्वारा सिर्फ रास्ते दिए गए हैं या नहीं, लेकिन शायद आप ब्याज की राह की गणना करते समय कुछ बहीखाते कर सकते हैं। त्वरित विचार: को होस्ट ग्राफ होने दें , और प्रत्येक किनारे का वजन शून्य पर सेट करें। जब आपको ब्याज का मार्ग मिल जाता है , तो में प्रत्येक किनारे का भार जो । अंत में, किनारे का वजन बताता है कि वह किनारा कितने रास्तों में दिखाई देता है। हो सकता है कि अब आप एक न्यूनतम फैले हुए पेड़ की गणना कर सकते हैं , और सभी किनारों को वजन शून्य, या ऐसा कुछ छोड़ सकते हैं। जीपीजीपीजी
जुहो

ठीक है, यहां तक ​​कि दो किनारे-असंतुष्ट सरल रास्तों का मिलन एक चक्र बना सकता है, इसलिए एमएसटी की गणना करने से आपको लगता है कि मेरे द्वारा किए गए रास्तों में से एक खो जाएगा। लेकिन उपरोक्त आपको कुछ विचार दे सकता है।
जुहो

2
आप सबसे छोटे रास्तों और संबंधित साहित्य पर एपपस्टीन के पेपर को देखना चाहते हैं । वे कॉम्पैक्ट अभ्यावेदन के साथ भी व्यवहार करते हैं।
जुहो

रास्तों का प्रतिनिधित्व करने के लिए FSM का उपयोग करने की कुछ संभावना है और फिर कोई यूनियनों, चौराहों, घटाव आदि जैसे बुनियादी कार्यों को कर सकता है ... और साथ ही FSM को कम करने का "संपीड़न" ऑपरेशन अच्छी तरह से समझा / इष्टतम और कुशल है। havent यह एक कागज में देखा है, लेकिन यह एक और कुछ इसी तरह की समस्या पर प्रस्तावित ...
vzn

जवाबों:


4

एक ट्राइ कर सकता है ट्रिक: http://en.wikipedia.org/wiki/Trie

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

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


दिलचस्प। एक तिकड़ी हालांकि विनिर्देशों के एक बहुत बड़े सेट के साथ आती है जो मुझे वास्तव में परवाह नहीं है (त्वरित खोज, एक कुंजी के साथ सहयोग, आदि) इसलिए मुझे आश्चर्य है कि अगर कुछ बेहतर संभव है ...
ऑप्ट

2

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

पेड़ों, शब्दकोशों, आदि के लिए ऐसी संरचनाएं हैं, मुझे कोई याद नहीं है कि आप जो चाहते हैं वही करेंगे, लेकिन शायद उनमें से कुछ संयोजन या संशोधन आपकी मदद करेंगे।


1

आपके एल्गोरिथ्म के लिए आवश्यक जटिलता और पूर्व / पोस्ट प्रसंस्करण के आधार पर, शायद सबसे सरल विकल्प तरीका है। आप तुच्छ रूप से उन्हें सरणियों के रूप में प्रस्तुत कर सकते हैं, और उन्हें एचडीएफ 5 में संपीड़ित कर सकते हैं। यह लाइब्रेरी कुछ तेज संपीड़न एल्गोरिदम से सुसज्जित है, ताकि संपीड़ित डेटा को पढ़ना और लिखना असम्पीडित से भी तेज हो सकता है।

यहाँ कुछ भूखंड हैं:

एक 15 जीबी इयर्रे और अलग-अलग हिस्सा के लिए प्रति तत्व अनुक्रमिक पहुंच समय: http://pytables.github.io/_images/seq-chunksize-15GB.png

पॉटेबल्स पर ब्लॉस्क का उपयोग कर अपघटन की गति: यहाँ छवि विवरण दर्ज करें

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.