यहां Algorithm Design Manual में एक अभ्यास है।ग्राफ के अंदर एक त्रिकोण कैसे खोजें?
यह निर्धारित किया जाता अनिर्दिष्ट ग्राफ जी = (वी, ई) एक त्रिकोण या लंबाई के चक्र होता है कि क्या करने की समस्या पर विचार करें 3.
(क) एक हे दें (| वी |^3) यदि कोई अस्तित्व में है तो त्रिकोण ढूंढने के लिए।
(बी) समय में चलाने के लिए अपने एल्गोरिदम को सुधारें ओ (| वी | · | ई |)। आप मान सकते हैं | वी | ≤ | ई |
का निरीक्षण करें कि इन सीमाओं को आप समय जी
यहाँ की निकटता मैट्रिक्स और निकटता सूची अभ्यावेदन के बीच परिवर्तित करने के लिए देता है मेरे विचार है:
(क) ग्राफ एक के रूप में दिया जाता है आसन्नता सूची, मैं ओ (| वी |^2) द्वारा सूची को मैट्रिक्स में परिवर्तित कर सकता हूं। तो मैं करता हूं:
for (int i = 0;i < n;i++)
for (int j = i+1;j < n;j++)
if (matrix[i][j] == 1)
for (int k = j+1;k < n;k++)
if (matrix[i][k] == 1 && matrix[j][k] == 1)
return true;
यह त्रिभुज का परीक्षण करने के लिए ओ (| वी |^3) देना चाहिए।
(बी) मेरा पहला अंतर्ज्ञानी यह है कि यदि ग्राफ को आसन्नता सूची के रूप में दिया जाता है, तो मैं एक बीएफएस करूंगा। जब भी एक क्रॉस एज पाया जाता है, उदाहरण के लिए, if y-x is a cross edge
, तो मैं check whether parent[y] == parent[x], if true, then a triangle is found
होगा।
क्या कोई मुझे बता सकता है कि मेरी सोच सही है या नहीं?
इसके लिए भी (बी), मुझे इसकी जटिलता सुनिश्चित नहीं है। क्या यह ओ (| वी | + | ई |) होना चाहिए, है ना?
मैं इसे ओ (| वी | * | ई |) में कैसे कर सकता हूं?
(ए) की पहली तीन पंक्तियां सभी किनारों पर फिर से चल रही हैं ... – uty
@uty, आपका क्या मतलब है? –
चूंकि आपने ऑप्टिमाइज़ किया (ए) थोड़ा सा, आंतरिकतम लूप केवल तभी चलता है जब आईजे एक किनारे हो। इस प्रकार एक अधिक सावधानीपूर्वक विश्लेषण लागत ओ (वी^2) देता है जब ij एक nongege और O (EV) है जब ij एक किनारे है, कुल ओ (ईवी) के लिए यह मानते हुए कि E> = V. – uty