Grundlegende Einführung in den Algorithmus und seine Komplexität

Komplexität des Algorithmus

Algorithmus:

Definition: Algorithmen sind Schritte zur Lösung einer Reihe von Problemen

public static int add(int a, int b){
    
    
	return a + b;
}
public static int sum(int n){
    
    
	int sum;
	for(int i=0;i<n;i++){
    
    
		sum += i;
	}
	return sun;
}

Verwenden Sie unterschiedliche Algorithmen, um dasselbe Problem zu lösen. Die Effizienz kann unterschiedlich sein


Wie man die Qualität eines Algorithmus beurteilt

Konzept:

  1. Zeitkomplexität: Schätzen Sie, wie oft die Anweisung ausgeführt wird
  2. Speicherplatzkomplexität : Schätzen Sie den vom Algorithmus belegten Speicherplatz

Darstellung der Komplexität:

Big O-Notation : Im Allgemeinen wird Big O verwendet, um die Komplexität des Algorithmus zu beschreiben, die die Komplexität des Algorithmus n darstellt

Ignorieren Sie Konstanten, Koeffizienten und niedriger Ordnung

  • 9 >> O (1)

  • 2n + 3 >> O (n)

  • n 2 + 2n + 3 >> O (n 2 )
    ……
    Hinweis : Die Big O-Notation ist nur ein grobes Analysemodell, eine Schätzung und kann uns helfen, die Ausführungseffizienz eines Algorithmus in kurzer Zeit zu verstehen

  • In der logarithmischen Reihenfolge wird die Basis im Allgemeinen weggelassen

    • log 2 n {log_2 {n}} l o g2n =log 9 n {log_9 {n}}l o g9n *log 2 9 {log_2 {9}}l o g29

Also log 2 n {log_2 {n}}l o g2n undlog 9 n {log_9 {n}}l o g9n heißtlogn {log {n}}l o g n

Gemeinsame Komplexität

Anzahl der Hinrichtungen Die Komplexität Informeller Begriff
12 O (1) Ständige Reihenfolge
2n + 3 Auf) Lineare Reihenfolge
n 2 + 2n O (n 2 ) Quadratische Reihenfolge
4 log 2 n {log_2 {n}}l o g2n + 6 O ( logn {log {n}}l o g n ) Logarithmische Reihenfolge
n log 2 n {log_2 {n}}l o g2n +34 O (n logn {log {n}}l o g n ) n logn {log {n}}l o g n bestellen
2n 3 + 3n 2 + 2 O (n 3 ) Kubische Ordnung
2 n O (2 n ) Exponentielle Ordnung
  • O (1) <O ( logn {log {n}}l o g n ) <O (n) <O (nlogn {log {n}}l o g n ) <O (n2) <O (n3) <O (2n) <O (n!) <O (nn)

Zum Beispiel: Fibonacci-Sequenz

  • Algorithmus Eins
/**
     * 斐波那契数列 0 1 1 2 3 5 8……
     * 求第n个费波纳希数列的值
     */
    private static int feb(int n) {
    
    
        if (n <= 2) {
    
    
            return n;
        }
        return feb(n - 1) + feb(n - 2);
    }
  • Algorithmus 2
/**
     *               0 1 2 3 4 5 6 7
     * 费斐波那契数列 0 1 1 2 3 5 8 13……
     * 求第n个费波纳希数列的值
     */
    private static int feb2(int n) {
    
    
        if (n <= 1) return n;

        int first = 0, second = 1, sum;

        for (int i = 0; i < n - 1; i++) {
    
     //n=4
            sum = first + second; //first:0  second=1
            first = second;
            second = sum;
        }
        return second;
    }
}

Richtung der Algorithmusoptimierung

  • Verwenden Sie so wenig Speicherplatz wie möglich
  • Verwenden Sie so wenige Ausführungsschritte wie möglich.
    Hinweis: Der Speicherplatz kann für Zeit und Zeit für geeignete Bedingungen ausgetauscht werden.

Ich denke du magst

Origin blog.csdn.net/weixin_42143994/article/details/109641271
Empfohlen
Rangfolge