सकर्मक प्रतिक्रिया चाप सेट (TFAS): NP- पूर्ण?


13

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

एक टूर्नामेंट को देखते हुए , वहाँ एक प्रतिक्रिया चाप सेट है एफ में जी कि एक सकर्मक संबंध को परिभाषित करता है?G=(V,E)FEG

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

क्या यह समस्या एनपी-हार्ड है? यदि हां, तो इसे कैसे साबित किया जाए?


1
बहुत बहुत धन्यवाद! (मैंने टिप्पणी हटा दी क्योंकि मैंने मानक G = (V, E) :-) के बजाय G = (E, V) लिखा था
Marzio De Biasi

6
अगर मैं सही तरीके से समझूं, तो यह पूछने के बराबर है कि क्या किसी टूर्नामेंट में किनारों को दो DAG में विभाजित किया जा सकता है, जिनमें से एक सकरात्मक रूप से बंद है।
dspyz

1
फिर से dspyz की टिप्पणी, DAG पर बहुत सी समस्याएं नहीं हैं जिनका अध्ययन उनकी जटिलता के कारण किया जा सकता है। वहाँ भी है कि DAGs पर कई प्रमेयों यह प्रतीत होता है। पेड़ थोड़े अधिक सुलभ हैं। आपकी समस्या (जबकि स्पष्ट रूप से दिलचस्प के रूप में वोटों में परिलक्षित होती है) लगता है कि बहुत सारे असामान्य तत्वों को एक साथ मिलाया गया है और किसी विशेष श्रेणी में फिट नहीं किया गया है।
vzn

5
@IgorShinkar किसी भी पगडंडी के तीर को दो DAG में तुच्छ रूप से विभाजित किया जा सकता है: कोने को मनमाने ढंग से क्रमबद्ध करें; एक DAG आगे का किनारा है, दूसरा DAG पीछे का किनारा है।
साशो निकोलेव

1
@SashoNikolov बेशक!
इगोर शिनकर

जवाबों:


4

थोड़ा सा संदर्भ जोड़ने के लिए, यहां एक ग्राफ के लिए एक निर्माण है जिसमें एक सकर्मक प्रतिक्रिया आर्क सेट नहीं है। इस निर्माण के लिए, मैं निम्नलिखित गैजेट ग्राफ का उपयोग करूंगा:

गैजेट ग्राफ का उपयोग निहितार्थों को बाध्य करने के लिए किया जाता है

इस टूर्नामेंट में निम्नलिखित गुण हैं (जो मैंने एक प्रोग्राम का उपयोग करके जांचा था, मैंने इसे औपचारिक रूप से साबित नहीं किया है):

  • यदि (2,7) किसी दिए गए TFAS में नहीं है, तो (1,3) है
  • यदि (5,1) दिए गए TFAS में है, तो ऐसा है (3,6)
  • यदि (7,3) दिए गए TFAS में है, तो (5,1) नहीं है

या थोड़ा गाली देना तर्क तर्क को समर्पित करता है:

  • ¬(2,7)(1,3)
  • (5,1)(3,6)
  • (7,3)¬(5,1)

आप देखेंगे कि प्रत्येक निहितार्थ के लिए, दो किनारों को जोड़ीदार नापसंद है, इसलिए निम्नलिखित निर्माण कार्य:

ग्राफ़ के लिए निर्माण जिसमें TFAS नहीं है

A


मुझे क्षमा करें, मैं अनुसरण नहीं करता। क्या कोई कारण है कि आप सिर्फ किनारों की सूची पोस्ट नहीं कर सकते हैं इसलिए मैं इसे एएसपी सॉल्वर के माध्यम से चला सकता हूं और इसे सत्यापित करने का प्रयास कर सकता हूं। क्लिंगो के अनुसार, आपके गैजेट के ग्राफ़ में 8 अलग-अलग TFAS हैं। यहाँ सबसे छोटा है: tfas (एज (5,0)) tfas (एज (6,0)) tfas (एज (7,0)) tfas (एज (6,2)) tfas (एज (7,3)) tfas (एज (1,2)) tfas (एज (1,3)) tfas (एज (7,5))
dspyz

मैंने अभी देखा कि आपने गैजेट ग्राफ में बढ़त (6,3) का उल्लेख किया है, लेकिन आपके द्वारा प्रदान की गई छवि में बढ़त है (3,6)
dspyz

मुझे यह पता चला, मेरा अद्यतन उत्तर देखें: cstheory.stackexchange.com/a/20778/13643
dspyz

@dspyz मुझे लगा कि निर्माण केवल किनारों की एक सूची की तुलना में स्पष्ट था, क्योंकि यदि मेरा तर्क गलत नहीं है, तो यह सत्यापित करने के लिए सभी की आवश्यकता होगी कि क्या निर्माण के ऊपर टूर्नामेंट वास्तव में उन निहितार्थ गुण हैं। बढ़त (3,6) के बारे में गलती को इंगित करने के लिए धन्यवाद! मुझे उस गैजेट के लिए 8 टीएफएएस भी मिला, जिसे आपने सूचीबद्ध किया था।
जी। बाक

मुझे माफ कर दो। मैंने गलत ग्राफ का निर्माण किया। मैंने इसे ठीक कर दिया और अब क्लिंगो कोई TFAS रिपोर्ट करता है।
dspyz

1

मैंने एक छोटा क्लिंगो कार्यक्रम चलाया, जिसमें बिना TFAS के कोई ग्राफ नहीं था, लेकिन एक बग था। मैंने इसे ठीक किया और अब यह पुष्टि करता है कि n = 8 या उससे कम के लिए TFAS के बिना कोई ग्राफ नहीं है। N = 9 के लिए, यह इसे ढूंढता है:

is_edge(edge(2,3)) is_edge(edge(1,4)) is_edge(edge(2,4)) is_edge(edge(3,5)) is_edge(edge(4,5)) is_edge(edge(1,6)) is_edge(edge(2,6)) is_edge(edge(3,6)) is_edge(edge(5,6)) is_edge(edge(1,7)) is_edge(edge(4,7)) is_edge(edge(5,7)) is_edge(edge(6,7)) is_edge(edge(1,8)) is_edge(edge(3,8)) is_edge(edge(4,8)) is_edge(edge(5,9)) is_edge(edge(6,9)) is_edge(edge(7,9)) is_edge(edge(2,1)) is_edge(edge(3,1)) is_edge(edge(4,3)) is_edge(edge(5,1)) is_edge(edge(5,2)) is_edge(edge(6,4)) is_edge(edge(7,2)) is_edge(edge(7,3)) is_edge(edge(8,2)) is_edge(edge(8,5)) is_edge(edge(8,6)) is_edge(edge(8,7)) is_edge(edge(9,1)) is_edge(edge(9,2)) is_edge(edge(9,3)) is_edge(edge(9,4)) is_edge(edge(9,8))

यहाँ (फिक्स्ड) एन्कोडिंग है

% tfas.asp
#show is_edge/1.
vertex(1..n).

opp_edges(edge(A,B),edge(B,A)) :- vertex(A), vertex(B), A < B.
possible_edge(E1;E2) :- opp_edges(E1,E2).

{is_edge(E1); is_edge(E2)} = 1 :- opp_edges(E1, E2).
ntfas(E) :- possible_edge(E), not is_edge(E).
ntfas(edge(X, X)) :- vertex(X).

tfas(E) | fs(E) :- is_edge(E).
ntfas(E) :- fs(E).

broken :- ntfas(edge(A,C)), tfas(edge(A, B)), tfas(edge(B,C)).

reachable(X, Y) :- fs(edge(X, Y)), is_edge(edge(X, Y)).
reachable(X, Z) :- reachable(X, Y), fs(edge(Y, Z)), is_edge(edge(Y, Z)).
broken :- reachable(X, X).

tfas(E) :- broken, possible_edge(E).
fs(E) :- broken, possible_edge(E).
:- not broken.

इसे चलाएं clingo -c n=7 tfas.asp(क्लिंगो 4.2.1 का उपयोग करके)

(n = 7 ठीक 7 कोने के रेखांकन दर्शाता है)

यह संतोषजनक होना चाहिए, यदि केवल और 7 ग्राफ़ पर कोई TFAS के साथ कोई ग्राफ़ मौजूद हो।


ठीक है, मुझे पता चला कि क्या ग्राफ @ G.Bach वर्णन कर रहा था और इसे कोडिंग में कोडित किया गया था (नीचे क्लिंगो विवरण देखें)। यह गैजेट के ग्राफ़ के विवरण के साथ शुरू होता है और पूर्ण प्राप्त करने के लिए एक साथ इसकी प्रतियां शामिल करने के तरीके का वर्णन करने के लिए आगे बढ़ता है। 34-वर्टेक्स टूर्नामेंट ग्राफ जी.बच वर्णन कर रहा है। मैंने ग्राउंडेड ग्राफ विवरण भी संलग्न किया है)।

मैं तब उस ग्राफ़ पर क्लिंगो को चलाने के लिए आगे बढ़ा और इसने 241 किनारों के साथ एक TFAS को खोजने का दावा किया। लेकिन मैंने ग्राफ़ एन्कोडिंग में एक गलती की। मैंने गलती को ठीक किया और क्लिंगो अब असंतोषजनक (यानी कोई TFAS नहीं है) रिपोर्ट करता है।

यहां ग्राफ पर TFAS खोजने का कार्यक्रम है

{tfas(E)} :- is_edge(E).
:- not tfas(edge(A,C)), tfas(edge(A, B)), tfas(edge(B,C)).

reachable(X, Y) :- not tfas(edge(X, Y)), is_edge(edge(X, Y)).
reachable(X, Z) :- reachable(X, Y), not tfas(edge(Y, Z)), is_edge(edge(Y, Z)).
:- reachable(X, X).

tfas_count(N) :- N = #count{tfas(E) : tfas(E)}.

#show tfas/1.
#show tfas_count/1.

यहां जी.बाख का ग्राफ बनाने के लिए (अद्यतन) कार्यक्रम है। मैंने यह जांचने के लिए संकेतक जोड़े कि ग्राफ एक सुव्यवस्थित टूर्नामेंट ग्राफ है:

gadget_vertex(0..7).

gadget_edge(0,1).
gadget_edge(0,2).
gadget_edge(0,3).
gadget_edge(0,4).
gadget_edge(1,2).
gadget_edge(1,3).
gadget_edge(1,6).
gadget_edge(1,7).
gadget_edge(2,3).
gadget_edge(2,4).
gadget_edge(2,5).
gadget_edge(2,7).
gadget_edge(3,4).
gadget_edge(3,5).
gadget_edge(3,6).
gadget_edge(4,1).
gadget_edge(4,5).
gadget_edge(4,6).
gadget_edge(4,7).
gadget_edge(5,0).
gadget_edge(5,1).
gadget_edge(5,6).
gadget_edge(6,0).
gadget_edge(6,2).
gadget_edge(6,7).
gadget_edge(7,0).
gadget_edge(7,3).
gadget_edge(7,5).

special_edge(a;b;c;d;e).

forces(a,b).
forces(b,c).
forcesn(c,a).
nforces(a,d).
forces(d,e).
forces(e,a).

relates(A,B) :- forces(A,B).
relates(A,B) :- nforces(A,B).
relates(A,B) :- forcesn(A,B).

is_se_pair(se_pair(A,B)) :- relates(A,B).
vertex_name(v(V,P)) :- gadget_vertex(V), is_se_pair(P).

matches(from(A), v(5, se_pair(A,B))) :- forces(A,B).
matches(to(A), v(1, se_pair(A,B))) :- forces(A,B).
matches(from(B), v(3, se_pair(A,B))) :- forces(A,B).
matches(to(B), v(6, se_pair(A,B))) :- forces(A,B).

matches(from(A), v(2, se_pair(A,B))) :- nforces(A,B).
matches(to(A), v(7, se_pair(A,B))) :- nforces(A,B).
matches(from(B), v(1, se_pair(A,B))) :- nforces(A,B).
matches(to(B), v(3, se_pair(A,B))) :- nforces(A,B).

matches(from(A), v(7, se_pair(A,B))) :- forcesn(A,B).
matches(to(A), v(3, se_pair(A,B))) :- forcesn(A,B).
matches(from(B), v(5, se_pair(A,B))) :- forcesn(A,B).
matches(to(B), v(1, se_pair(A,B))) :- forcesn(A,B).

same_vertex(V, V) :- vertex_name(V).
same_vertex(M, N; N, M) :- matches(X, M), matches(X, N).

already_found(v(Y,N2)) :- vertex_name(v(X,N1)), same_vertex(v(X,N1),v(Y,N2)), N1 < N2.
vertex(V) :- vertex_name(V), not already_found(V).

named_gadget_edge(edge(v(X,SE),v(Y,SE))) :- gadget_edge(X,Y), is_se_pair(SE).
from_gadget_edge_named(edge(A, B), edge(C,D)) :- named_gadget_edge(edge(C,D)), same_vertex(A,C), same_vertex(B,D), vertex(A), vertex(B).
from_gadget_edge(edge(A,B)) :- from_gadget_edge_named(edge(A,B),edge(C,D)).
is_edge(E) :- from_gadget_edge(E).
is_edge(edge(A,B)) :- vertex(A), vertex(B), A < B, not from_gadget_edge(edge(B,A)).

vertex_count(VN) :- VN = #count{vertex(V) : vertex(V)}.
edge_count(EN) :- EN = #count{is_edge(E) : is_edge(E)}.

#show vertex_count/1.
#show edge_count/1.

bidirectional :- is_edge(edge(A,B)), is_edge(edge(B,A)).
phantom_vertex :- is_edge(edge(A,B)), not vertex(A).
phantom_vertex :- is_edge(edge(A,B)), not vertex(B).
incomplete :- vertex(A), vertex(B), not is_edge(edge(A,B)), not is_edge(edge(B,A)), A != B.

#show bidirectional/0.
#show phantom_vertex/0.
#show incomplete/0.

मैं सकारात्मक हूं कि 18 शीर्षकों पर एक टूर्नामेंट है जिसमें TFAS नहीं है।
जी बाख

क्या आप कृपया इसे एक उदाहरण के रूप में दे सकते हैं? बस सूचीबद्ध किनारों के साथ एक फाइल संलग्न करें
dspyz

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

किसी भी फ़ाइल होस्ट पर अपलोड करें और इसे लिंक करें (देखें meta.stackexchange.com/a/4643/185877 ), या यदि इसकी एक नियमित संरचना है, तो बस इसका वर्णन करें (बिल्डिंग ब्लॉक्स दें)
dspyz

n

0

SWAG अनुमान [कुछ नहीं से बेहतर है?]:

G=(V,E)FEGO(1)

नोट: गोलीबारी का प्रतिकार का स्वागत! अब तक किसी को नहीं दिया गया लगता है। विशेष रूप से ग्राफ कक्षाओं से संबंधित एज ओरिएंटेशन के पैटर्न के कुछ अवलोकन बेहतर होंगे। या कुछ और प्रेरणा या इसे कुछ मौजूदा साहित्य में बाँधना। प्रूफ़्स एंड रिफ्यूटेशन्स (लाकटोस) की शैली में पेश किया गया ... भी, क्योंकि यह एक ऐसी ऑफबीट समस्या लगती है, जो [अभी तक नहीं] संबंधित है, बहुत अनुभव से इसका अध्ययन करने का सुझाव दें ....


1
मैंने यह जाँचने के लिए एक कार्यक्रम चलाया कि क्या यह पाया जाता है और पाया गया कि ऐसे टूर्नामेंट हैं जिनमें सकर्मक प्रतिक्रिया आर्क सेट नहीं है। मैं कल एक पोस्ट करूंगा, मैं आज इसके आसपास नहीं पहुंचूंगा।
जी। बछ

@vz आप एक यादृच्छिक टूर्नामेंट के लिए अनुमान साबित कर सकते हैं?
इगोर शिनकर

केवल 5 सिरों के साथ प्रतिधारण: a-> b, a-> c, b-> c, d-> a, b-> d, c-> d, e-> a, e-> b, c-> e , d-> ई। किसी भी चार कोने के लिए, प्रेरित ग्राफ़ में एक चक्र होता है, इसलिए एक सकर्मक DAG में ग्राफ़ के 3 कोने के बीच में अधिकतम 3 किनारे हो सकते हैं। केवल 5 संभावनाएं हैं (अन्य सभी ट्रिपल चक्र हैं): abc, eab, dea, bcd, cde यह जांचना आसान है कि प्रत्येक पांच मामलों में अन्य 7 किनारों के बीच एक चक्र है
dspyz

1
हाँ, एनवीआर मन, यह
प्रतिपक्ष

1
@dspyz मैंने 8 कोने तक सभी टूर्नामेंटों में एक क्रूर बल जांच की। उन सभी के पास सकर्मक फीडबैक आर्क सेट हैं, लेकिन कुछ ऐसे हैं जिनका उपयोग आप एक टूर्नामेंट बनाने के लिए कर सकते हैं।
जी। बाक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.