Donald B. Johnson'un algoritmada pseudocode anlama

oy
5

Bilen var Donald B. Johnson'un algoritması bir tüm temel devreler (döngü) sıralar, yönlendirilmiş grafik?

Onun 1975 yılında yayınladığı kağıt var, ama pseudocode anlayamıyorum.

Amacım Java bu algoritmayı uygulamaktır.

Ben bazı sorular, örneğin, bir matris budur k o ifade eder. Pseudocode, bu söz

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

Ben bir bulur başka algoritma uygulamak zorunda anlamına mı k matrisi?

Başka soru ne şu araçtır?

begin logical f; 

Ayrıca hat mu logical procedure CIRCUIT (integer value v);devre prosedürü mantıksal değişken döndürür anlamına? Pseudocode da çizgi vardır CIRCUIT := f;. Ne anlama geliyor?

Bunu anlayabilmeleri birisi pseudocode daha modern bir türe bu 1970'lerde pseudocode tercüme eğer harika olurdu

Eğer yardım etmek isteyen ancak kağıt pitelk@hotmail.com bana şu adresten ulaşabilirsiniz bulamıyor ve sana kağıdı göndereceğiz.

Oluştur 25/05/2010 saat 22:14
kaynak kullanıcı
Diğer dillerde...                            


2 cevaplar

oy
7

yalancı kod Algol, Pascal veya Ada andırır.

Ben bir bulur başka algoritma uygulamak zorunda anlamına mı k matrisi?

Bir k belirtilen özelliklere sahip olan giriş değerleri diziler bir listesi olduğu görülmektedir. Bu karşılık gelen ilgili olabilir bitişiklik matrisi , ama benim için net değil. Böyle bir şey tahmin ediyorum:

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

Ne mu logical fyani?

Bu temsil eden bir yerel değişken bildirir trueveya falseJava ile benzer değerini boolean.

logical procedure CIRCUIT (integer value v);

Bu adlandırılmış bir alt bildirir CIRCUITtek bir tam sayı parametresine sahip vdeğeriyle geçirilir. Alt program bir döner logicalsonucunu trueveya falseve CIRCUIT := fatar fsonuç olarak. Java'da,

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

Anahtar kelimeler beginve endböylece iç içe olabilir, bir blok kapsamını sınırlayan CIRCUITana bloğunda yuvalanır ve UNBLOCKiç içe olduğu CIRCUIT. :=atama; ¬olduğu not; elemandır; boş; olduğu !=; stackve unstackönermek pushve pop.

Bu sadece bir başlangıç, ama ben yardımcı olur.

Zeyilname: Yansıması, Ave Bizomorf olmalıdır.

İşte bu çok edebi anahat. Ben hakkında yeterli bilmiyorum A, Bve Vdiziler daha iyi bir veri yapısını seçin.

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;
            }
        }
    }
}
Cevap 26/05/2010 saat 06:09
kaynak kullanıcı

oy
1

: Sen github üzerinde bu algoritmanın bir Java uygulaması bulabilirsiniz https://github.com/1123/johnson . Bu Jung2 Java grafik kütüphanesi kullanır.

Cevap 13/02/2013 saat 21:47
kaynak kullanıcı

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