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:
- Zeitkomplexität: Schätzen Sie, wie oft die Anweisung ausgeführt wird
- 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.