मैंने इसका समाधान निकाला है।
मुझे लगता है कि सरणी सभी 0 के साथ शुरू की जाती है (अन्यथा एन को 0 से भरा होना चाहिए) और एम ग्राफ के लिए आसन्नता मैट्रिक्स है। मैं n नोड्स की संख्या होने दें (एन = | वी |)।
j,i = 1;
N = new int[n]
while (j <= n && i <= n) {
if (N[i] == 1) {
i++
} else if (N[j] == 1) {
j++;
} else if (M[i,j] == 1) {
N[i] = 1
i++
} else if (i == j) {
j++
} else {
N[j] = 1
j++
}
}
for (z = 1 to n) {
if (N[z] == 0) {
return z
}
}
return NULL
क्यों इस काम करता है (नहीं औपचारिक प्रमाण): से जा रहा है किसी भी किनारों के साथ किसी भी नोड एक सार्वभौमिक सिंक नहीं है। इस प्रकार, यदि एम [i, j] किसी भी जे के लिए 1 है, तो मैं एक सिंक नहीं हो सकता।
यदि एम [i, j] किसी के लिए 0 है, तो मेरे पास जम्मू नहीं है, और जे सार्वभौमिक सिंक नहीं हो सकता है।
एन पर एक 1 [i] यह निर्दिष्ट करता है कि मुझे पता है कि यह एक सिंक नहीं है, और मुझे पता है कि कोई भी नोड एक सिंक नहीं है I और j दोनों पर छोड़ दिया जा सकता है। जब मैं एन से बाहर निकलता हूं तो मैं रुक जाता हूं।
इस तरह से मैं किसी भी नोड्स को जांचता रहता हूं, कि मुझे अभी भी पता नहीं है कि 1 या 0 संभव सिंक बने रहें।
इस प्रकार लूप के अंत में 0 अभी भी कोई भी नोड सिंक होना चाहिए, और उनमें से केवल 1 या 0 होगा।
यह ओ (एन): यह हमेशा या तो जे या बढ़ाता है। यह बंद हो जाता है जब या तो ex exeds। इस प्रकार लूप के लिए सबसे खराब मामला 2 एन है। लूप में काम स्थिर है। अंतिम पाश सबसे खराब मामला है। इसलिए एल्गोरिदम ओ (3 एन) = ओ (एन) है।
यह समाधान सेलिब्रिटी समस्या के विचार पर आधारित है, जो एक ही समस्या पर विचार करने का एक तरीका है।
क्या आपका मतलब ओ (ई) समय है? आपको शायद कुछ मामलों के लिए सभी किनारों का निरीक्षण करना होगा, और किनारों का # एन^2 तक है। –
नहीं, मेरा मतलब है ओ (| वी |) - आपको सभी किनारों का निरीक्षण करने की आवश्यकता नहीं है। – flybywire