एक भारित डैग को देखते हुए, क्या प्रत्येक भार को अपने पूर्वज भार के योग से बदलने के लिए O (V + E) एल्गोरिदम है?


34

समस्या, निश्चित रूप से, दोहरी गिनती है। यह DAGs के कुछ वर्गों = एक पेड़, या यहां तक ​​कि एक धारावाहिक-समानांतर पेड़ के लिए करना काफी आसान है। एकमात्र एल्गोरिथ्म मैंने पाया है जो उचित समय में सामान्य डीएजी पर काम करता है, एक अनुमानित एक (सिनॉप्सिस डिफ्यूजन) है, लेकिन इसकी सटीकता बढ़ाना बिट्स की संख्या में घातीय है (और मुझे बहुत बिट्स की आवश्यकता है)।

बैकग्राउंड: यह कार्य कई बार (विभिन्न 'वेट के साथ) किया जाता है। git bisect ')। प्रश्न में डीएजी इसलिए एक संशोधन इतिहास है। इसका मतलब है कि किनारों की संख्या नोड्स की संख्या के वर्ग के करीब पहुंचने की संभावना नहीं है, यह कुछ छोटे कश्मीर के लिए नोड्स की संख्या से कई गुना कम होने की संभावना है। दुर्भाग्य से मुझे संशोधन DAG का कोई अन्य उपयोगी गुण नहीं मिला है। उदाहरण के लिए, मैं उम्मीद कर रहा था कि सबसे बड़ा ट्राइकनेक्टेड घटक केवल नोड्स की संख्या के वर्ग-मूल के रूप में बढ़ेगा, लेकिन दुख की बात है (कम से कम लिनक्स कर्नेल के इतिहास में) यह रैखिक रूप से बढ़ता है।


बस स्पष्ट करने के लिए: यह केवल नोड्स हैं जिनके पास वजन है, किनारों पर नहीं?
हेनरिक एपेल्मस

हाँ, बस नोड्स।
एल्डवुल्फ

4
इस का एक लगभग डुप्लिकेट हो रहा है cstheory.stackexchange.com/questions/553/... ?
जुका सुओमेला

यह वास्तव में और अधिक सामान्य लगता है, क्योंकि सभी वर्टिस को यूनिट वेट असाइन करने से यह समस्या रीचैबिलिटी समस्या में कम हो जाती है।
सुरेश वेंकट

कुछ अतिरिक्त पॉलीग्लो कारकों के साथ करना मुश्किल नहीं लगता ...
हर-

जवाबों:


17

हम मानते हैं कि वर्टेक्स वज़न मनमाने ढंग से सकारात्मक पूर्णांक हो सकता है, या अधिक सटीक रूप से, वे अधिकतम 2 एन पर सकारात्मक पूर्णांक हो सकते हैं । तब वर्तमान कार्य को थोड़े कमजोर समय बद्ध O ( n 2 ) में भी नहीं किया जा सकता है , जब तक कि मनमाने ढंग से निर्देशित ग्राफ के सकर्मक समापन को O ( n 2 ) समय में गणना नहीं की जा सकती है , जहाँ n , कोने की संख्या को दर्शाता है। (ध्यान दें कि सकर्मक समापन के लिए एक O ( n 2 ) -टाइम एल्गोरिथ्म एक सफलता होगी।) यह निम्नलिखित दावे का गर्भनिरोधक है:

दावा करें । यदि वर्तमान कार्य O ( n 2 ) के समय में किया जा सकता है , तो इसके आसन्न मैट्रिक्स के रूप में दिए गए एक मनमाने ढंग से निर्देशित ग्राफ के सकर्मक समापन को O ( n 2 ) समय (कुछ उचित कम्प्यूटेशनल मॉडल मानकर) में गणना की जा सकती है ।

सबूत । प्रीप्रोसेसिंग के रूप में, हम DAG G AG प्राप्त करने के लिए समय O ( n 2 ) में दिए गए निर्देशित ग्राफ G के दृढ़ता से जुड़े घटक अपघटन की गणना करते हैं । ध्यान दें कि हम की सकर्मक बंद की गणना कर सकता है, तो जी ', हम की सकर्मक बंद फिर से संगठित कर सकते हैं जी

अब वजन 2 आवंटित मैं प्रत्येक शीर्ष करने के लिए मैं DAG के जी 'और वर्तमान समस्या के लिए एल्गोरिथ्म का उपयोग करें। फिर योग प्रत्येक शीर्ष करने के लिए आवंटित की बाइनरी प्रतिनिधित्व मैं के पूर्वजों की वास्तव में सेट का वर्णन करता है मैं दूसरे शब्दों में, है, हम की सकर्मक बंद गणना की है जी '। QED

दावे की बातचीत भी रखती है: आप किसी दिए गए DAG की सकर्मक बंद की गणना कर सकता है, यह समय ओ (में अतिरिक्त कार्य के लिए आवश्यक रकम की गणना करने के लिए आसान है n 2 )। इसलिए, सिद्धांत रूप में आप Coppersmith-Winograd मैट्रिक्स गुणन एल्गोरिथ्म के आधार पर सकर्मक बंद के लिए एल्गोरिथ्म का उपयोग करके समय O ( n 2.376 ) में वर्तमान कार्य प्राप्त कर सकते हैं ।

संपादित करें : संशोधन 2 और इससे पहले स्पष्ट रूप से शीर्ष भार की सीमा के बारे में धारणा नहीं बताई गई थी। प्रति वोगसेन ने एक टिप्पणी में कहा कि यह निहित धारणा उचित नहीं हो सकती है (धन्यवाद!), और मैं सहमत हूं। भले ही अनुप्रयोगों में मनमानी वजन की आवश्यकता नहीं है, मुझे लगता है कि यह उत्तर तर्क की निम्नलिखित पंक्ति द्वारा कुछ दृष्टिकोणों को खारिज कर सकता है: “यदि इस दृष्टिकोण ने काम किया, तो यह मनमाना वजन के लिए एक एल्गोरिथ्म देगा, जो कि जब तक संक्रामक नहीं होता है बंद होने की गणना समय O ( n 2 ) में की जा सकती है । ”

संपादित करें : संशोधन 4 और पहले किनारों की दिशा गलत बताई गई थी।


4
मैं कल रात इस बारे में सोच रहा था क्योंकि एक व्यावहारिक समाधान अपवर्जन गिनती करने के लिए बिट वैक्टर का उपयोग करता है। मुझे लगता है कि एकमात्र प्रश्न यह है कि क्या यह मान लेना उचित है कि भार की लंबाई n के अनुपात में हो सकती है। व्यवहार में, मैं कल्पना कर सकता हूँ कि वज़न कुछ k से बंधे हुए हैं ताकि अधिकतम संभव राशि kn हो, जो इस ट्रिक को खींचने के लिए पर्याप्त बिट्स नहीं है।
प्रति सोग्नसेप 29'10

@Per: मैं मानता हूं कि वर्टेक्स वेट n- बिट पूर्णांक हो सकता है यह धारणा संदिग्ध हो सकती है। मैंने इस धारणा को स्पष्ट करने के लिए उत्तर को संपादित किया। धन्यवाद!
त्सुयोशी इतो

1
@Per: मुझे एहसास हुआ कि यदि शीर्ष वेट O (1) से विभाजित पूर्णांक हैं, तो समस्या उस स्थिति में कम हो जाती है जहाँ सभी वर्टिकल में उपयुक्त तरीके से वर्टिकल डुप्लिकेट करके वजन 1 होता है।
त्सुयोशी इतो

दुर्भाग्य से मुझे गिनती की समस्या के लिए उस थ्रेड में कोई उत्तर दिखाई नहीं दे रहा है। काउंट्स में क्षणिक बंद होने की सूची की तुलना में लॉगरिदमिक रूप से कम जानकारी होती है, O (n log n) बनाम O (n ^ 2), इसलिए मैं यह नहीं देखता कि एक सीधी कमी कैसे काम कर सकती है।
प्रति वोगेसेन

वैसे, इस समस्या का एक दिलचस्प संस्करण तब है जब हमारे पास डीएजी की पीढ़ियों (एक ला टोपोलोजिकल प्रकार) के आकार में वृद्धि पर शाखा कारक और जानकारी के लिए बाध्य है। यदि विकास घातीय है, तो पैटर्न अनिवार्य रूप से पेड़ जैसा है। क्या होगा अगर यह रैखिक, लॉग-रैखिक, द्विघात, आदि है?
प्रति वोगेसेन

2

यह त्सुयोशी के उत्तर पर मेरी टिप्पणी का विस्तार है। मुझे लगता है कि प्रश्न का नकारात्मक उत्तर बिना शर्त के बनाया जा सकता है।

इस समस्या को ( एन ) किनारों के साथ रेखांकन के लिए भी सबसे खराब स्थिति में अतिरिक्त संचालन की आवश्यकता लगती है । अत: आवश्यक बाध्यता प्राप्त करना संभव नहीं लगता है।ω(n)O(n)

एक ग्राफ पर विचार से मिलकर आर × कोने, एक ग्रिड में व्यवस्थित। प्रत्येक आर पंक्तियों में कोने ऊपर की पंक्ति में ठीक दो कोने पर निर्भर करते हैं। आर और सी के मूल्यों के उपयुक्त संयोजन और किनारों की उपयुक्त व्यवस्था के लिए परिवार में इस तरह के रेखांकन होते हैं ।Gr,cr×crrc

विशेष रूप से, और सी = 2 एन / लॉग एन । इसके अलावा, शीर्ष पंक्ति के वज़न को 2 की अलग-अलग शक्तियां होने दें।r=(log n)/2c=2n/log n

नीचे पंक्ति में प्रत्येक कोने तब पर निर्भर करेगा शीर्ष पंक्ति में कोने। जहाँ तक मेरा बता सकते हैं, वहाँ तो निचली पंक्ति वजन से प्रत्येक के लिए अलग-अलग मान, जैसे कि के साथ एक विशिष्ट DAG मौजूदω(लॉगएन)गैर पुन: प्रयोज्य अतिरिक्त इन रकम से प्रत्येक के लिए औसतन आवश्यक हैं।nω(log n)

कुल मिलाकर , इससे जोड़ की संख्या के लिए एक कम होता है, जबकि किनारों की संख्या 2 c ( r - 1 ) = O ( n ) हैω(n)2c(r1)=O(n)

यह प्रतीत होता है कि अंतर्निहित आंशिक क्रम घना है, लेकिन डीएजी अपनी सकर्मक कमी का प्रतिनिधित्व करता है, जो विरल हो सकता है।


यह तर्क दिलचस्प है, लेकिन मुझे यकीन नहीं है कि इसे किसी दिलचस्प बयान के प्रमाण में बनाया जा सकता है। समस्याओं की निचली सीमा को साबित करने की व्यापक कठिनाई को ध्यान में रखते हुए, यह तर्क मेरे लिए बहुत उपयोगी है।
त्सुकोशी इतो

@ त्सुयोशी: मुझे लगता है कि अस्तित्व को एक संभाव्य तर्क के माध्यम से काम करना चाहिए, और निचली सीमा कमजोर है इसलिए काम करने के लिए पर्याप्त जगह है। लेकिन आप सही हैं, यह हाथवाला है, यह वाक्यांश "औसतन गैर-पुन: प्रयोज्य जोड़" एक बेहतर नींव की आवश्यकता है।
एंड्रस सलामोन

-2

यह गलत है और प्रश्न पर गलतफहमी पर आधारित है। धैर्य से मेरी त्रुटि की ओर इशारा करने के लिए त्सुकोशी का धन्यवाद। दूसरों के मामले में छोड़ देने से वही गलती हो जाती है।

k

kO(k|V|)

O(|V|+|E|) time, which gives you the asymptotic bound you are looking for. But in the application you describe, the linear number of additions is likely to dominate.

This approach should also work well if there are some nodes with many immediate predecessors, as long as they are relatively infrequent.


4
I do not get it. How do you avoid the double-counting when the DAG is not a tree? In fact, if I am not mistaken, the general case can be reduced to the case where each vertex has at most two predecessors, and any linear-time algorithm for the latter case gives a line-time algorithm for the general case.
Tsuyoshi Ito

The requested bound was O(|V|+|E|) and the remark about double counting seems besides the point. The bounded number of immediate predecessors seems enough; each value is used in at most k partial sums.
András Salamon

I am afraid that you misunderstood my comment. I am questioning the correctness of your algorithm, not the running time. Suppose a DAG with four vertices A, B, C, D with edges A→B→D and A→C→D with each vertex given some weight. After computing the partial sums for B and C, you cannot simply add the partial sums for B and C to compute the sum for D because doing so would add the weight of the vertex A twice.
Tsuyoshi Ito

@Tsuyoshi: so the semantics is meant to be "compute u<vw(u)"? I have then misunderstood the question, summing over all predecessor paths.
András Salamon

1
Yes. And now I remember that the first time I saw this question, I misread the question in the same way and thought it would be obvious. But no, the real question is more difficult than that. Time to think….
Tsuyoshi Ito
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.