डोनाल्ड बी जॉनसन एल्गोरिथ्म में स्यूडोकोड को समझना

वोट
5

किसी को पता है डोनाल्ड बी जॉनसन एल्गोरिथ्म है, जो एक में सभी प्राथमिक सर्किट (चक्र) विश्लेषण करता निर्देशित ग्राफ?

मैं कागज वह 1975 में प्रकाशित किया था है, लेकिन मैं स्यूडोकोड नहीं समझ सकता।

मेरा लक्ष्य जावा में इस एल्गोरिथ्म लागू करने के लिए है।

कुछ सवाल मेरे पास है, उदाहरण के लिए, क्या मैट्रिक्स A है k यह करने के लिए संदर्भित करता है। स्यूडोकोड में, यह है कि उल्लेख है

Ak:=adjacency structure of strong component K with least 
    vertex in subgraph of G induced by {s,s+1,....n};

मतलब यह है कि मैं एक एल्गोरिथ्म है कि एक पाता लागू करना कश्मीर मैट्रिक्स?

एक और सवाल क्या निम्नलिखित साधन है?

begin logical f; 

भी लाइन है logical procedure CIRCUIT (integer value v);मतलब है कि सर्किट प्रक्रिया एक तार्किक चर देता है? स्यूडोकोड में भी लाइन है CIRCUIT := f;। इसका क्या मतलब है?

यह महान अगर किसी स्यूडोकोड का एक और अधिक आधुनिक प्रकार को यह 1970 स्यूडोकोड उसका अनुवाद कर सकें तो मैं यह समझ सकता हूँ होगा

मामले में आप मदद करने के लिए रुचि रखते हैं, लेकिन आप नहीं मिल रहा है कागज pitelk@hotmail.com पर मुझे ईमेल करें और मैं आप कागज भेज देंगे।

25/05/2010 को 22:14
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


2 जवाब

वोट
7

छद्म कोड अल्गोल, पास्कल या एडीए की याद ताजा करती है।

मतलब यह है कि मैं एक एल्गोरिथ्म है कि एक पाता लागू करना कश्मीर मैट्रिक्स?

एक कश्मीर निर्दिष्ट गुण इनपुट मानों की सरणियों की एक सूची प्रतीत होता है। यह इसी से संबंधित हो सकता निकटता मैट्रिक्स , लेकिन यह मेरे लिए स्पष्ट नहीं है। मैं कुछ इस तरह अनुमान लगा रहा हूँ:

int[][] a = new int[k][n];
int[][] b = new int[k][n];
boolean[] blocked = new boolean[n];
int s;

क्या करता है logical fमतलब है?

यह एक स्थानीय चर एक का प्रतिनिधित्व वाणी trueया falseमूल्य, जावा के लिए इसी तरह की boolean

logical procedure CIRCUIT (integer value v);

इस नाम के एक Subprogram वाणी CIRCUITएक भी पूर्णांक पैरामीटर होने vकि मूल्य द्वारा पारित कर दिया है। Subprogram एक रिटर्न logicalका परिणाम trueया false, और CIRCUIT := fप्रदान करती है fपरिणाम के रूप में। जावा में,

boolean circuit(int v) {
    boolean f;
    ...
    f = false;
    ...
    return f;
}

कीवर्ड beginऔर end, एक ब्लॉक गुंजाइश है कि नेस्ट किया जा सकता है परिसीमित तो CIRCUITमुख्य ब्लॉक में नीडिंत है और UNBLOCKके अंदर नीडिंत है CIRCUIT:=काम है, ¬है not; तत्व है; खाली है; है !=; stackऔर unstackसुझाव है pushऔर pop

यह केवल एक शुरुआत है, लेकिन मुझे आशा है कि यह मदद करता है।

परिशिष्ट: प्रतिबिंब पर, Aऔर Bisomorphic होना चाहिए।

यहाँ एक है बहुत शाब्दिक रूपरेखा। मैं के बारे में पर्याप्त जानकारी नहीं है A, Bऔर Vसरणियों तुलना में एक बेहतर डेटा संरचना चुनने के लिए।

import java.util.Stack;

public final class CircuitFinding {
    static int k, n;
    int[][] a = new int[k][n];
    int[][] b = new int[k][n];
    boolean[] blocked = new boolean[n];
    int[] v = new int[k];
    int s = 1;
    Stack<Integer> stack = new Stack<Integer>();

    private void unblock(int u) {
        blocked[u] = false;
        for (int w : b[u]) {
            //delete w from B(u)
            if (blocked[w]) {
                unblock(w);
            }
        }
    }

    private boolean circuit(int v) {
        boolean f = false;
        stack.push(v);
        blocked[v] = true;
        L1:
        for (int w : a[v]) {
            if (w == s) {
                //output circuit composed of stack followed by s;
                f = true;
            } else if (!blocked[w]) {
                if (circuit(w)) {
                    f = true;
                }
            }
        }
        L2:
        if (f) {
            unblock(v);
        } else {
            for (int w : a[v]) {
                //if (v∉B(w)) put v on B(w);
            }
        }
        v = stack.pop();
        return f;
    }

    public void main() {
        while (s < n) {
            //A:= adjacency structure of strong component K with least
            //vertex in subgraph of G induced by {s, s+ 1, n};
            if (a[k] != null) {
                //s := least vertex in V;
                for (int i : v) {
                    blocked[i] = false;
                    b[i] = null;
                }
                L3:
                circuit(s);
                s++;
            } else {
                s = n;
            }
        }
    }
}
26/05/2010 को 06:09
का स्रोत उपयोगकर्ता

वोट
1

: आप GitHub पर इस एल्गोरिथ्म के एक जावा कार्यान्वयन पा सकते हैं https://github.com/1123/johnson । यह Jung2 जावा ग्राफ पुस्तकालय उपयोग करता है।

13/02/2013 को 21:47
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more