2010-04-21 24 views
5

द्वारा कार्यान्वित प्राथमिकता कतार पर डिजस्ट्रा के एल्गोरिदम के लिए चलने का समय तो मुझे यह जानकर उत्सुकता है कि एल्गोरिदम के लिए चलने वाला समय एक क्रमबद्ध सूची/सरणी द्वारा लागू प्राथमिकता कतार पर चल रहा है। मुझे एक अपरिवर्तित सूची/सरणी के लिए पता है यह ओ ((एन^2 + एम) है) जहां एन शिखर की संख्या है और किनारों की संख्या एम है। इस प्रकार यह ओ (एन^2) समय के बराबर है। लेकिन अगर मैं एक क्रमबद्ध सूची/सरणी का उपयोग करता तो यह तेज़ होगा ... चलने का समय क्या होगा? मुझे पता है कि extractmin निरंतर समय होगा।
एक साथ सभी क्रमबद्ध समीपता सूचियों विलय:क्रमबद्ध सूची/सरणी

उत्तर

5

ठीक है, की समीक्षा क्या हम डिज्कस्ट्रा एल्गोरिथ्म के लिए की जरूरत है (भविष्य में संदर्भ के लिए, आम तौर पर कोने और किनारों वी और ई के रूप में उपयोग किया जाता है, उदाहरण के ओ (VlogE) के लिए) चलो ओ (ई)
निकालें न्यूनतम: हे (1)
घटाएँ कुंजी: हे (वी)
डिज्कस्ट्रा हे (वी का उपयोग करता है) कम से कम संचालन निकालने, और हे (ई) मुख्य संचालनों में कमी है, इसलिए:
हे (1) * ओ (वी) = ओ (वी)
ओ (ई) * ओ (वी) = ओ (ईवी) = ओ (वी^2)
सबसे असम्बद्ध रूप से महत्वपूर्ण भाग लेना:
अंतिम एसिम्प्टोटिक रनटाइम ओ (वी^2) है।
क्या इसे बेहतर बनाया जा सकता है? हाँ। बाइनरी ढेर में देखें, और प्राथमिकता कतारों के बेहतर कार्यान्वयन।

संपादित करें: मैंने वास्तव में एक गलती की, अब मैं इसे फिर से देखता हूं। ई V^2 से अधिक नहीं हो सकता है, या दूसरे शब्दों में ई = ओ (वी^2)।
इसलिए, सबसे खराब स्थिति में, एल्गोरिथ्म है कि हम हे में रन निष्कर्ष निकाला (EV) वास्तव में हे (वी^2 * वी) == हे है (वी^3)

संबंधित मुद्दे