it-swarm.dev

Contoh Algoritma yang memiliki kompleksitas O (1), O (n log n) dan O (log n)

Apa saja algoritma yang kami gunakan setiap hari yang memiliki kompleksitas O (1), O (n log n) dan O (log n)?

94
Rachel

Jika Anda ingin contoh Algoritma/Kelompok Pernyataan dengan kompleksitas Waktu seperti yang diberikan dalam pertanyaan, berikut adalah daftar kecil -

O (1) waktu 
1. Mengakses Indeks Array (int a = ARR [5];)
2. Memasukkan simpul dalam Daftar Tertaut
3. Mendorong dan Poping di Stack
4. Penyisipan dan Penghapusan dari Antrian
5. Mengetahui orang tua atau anak kiri/kanan dari sebuah simpul di pohon yang disimpan di Array
6. Melompat ke Elemen Berikutnya/Sebelumnya dalam Daftar Tertaut Ganda
dan Anda dapat menemukan sejuta contoh lagi ...

Tepat waktu
1. Melintasi array
2. Melintasi daftar tertaut
3. Pencarian Linier
4. Penghapusan elemen tertentu dalam Daftar Tertaut (Tidak diurutkan)
5. Membandingkan dua string
6. Memeriksa Palindrome
7. Counting/Bucket Sort
dan di sini Anda juga dapat menemukan sejuta contoh lagi ....
Singkatnya, semua Algoritma Brute Force, atau yang Noob yang memerlukan linearitas, didasarkan pada kompleksitas waktu O(n)

O (log n) waktu
1. Pencarian Biner
2. Menemukan angka terbesar/terkecil di pohon pencarian biner
3. Algoritma Divide and Conquer tertentu berdasarkan fungsionalitas Linear
4. Menghitung Angka Fibonacci - Metode Terbaik
Premis dasar di sini adalah TIDAK menggunakan data lengkap, dan mengurangi ukuran masalah dengan setiap iterasi

O (nlogn) waktu
1. Gabungkan Sortir
2. Heap Sort
3. Sortir Cepat
4. Algoritma Divide and Conquer tertentu berdasarkan pada pengoptimalan algoritma O (n ^ 2)
Faktor 'log n' diperkenalkan dengan mempertimbangkan Divide and Conquer. Beberapa dari algoritma ini adalah yang terbaik yang dioptimalkan dan sering digunakan.

O (n ^ 2) waktu
1. Sortir Bubble
2. Penyisipan Sortir
3. Seleksi Pilihan
4. Melintasi array 2D sederhana
Ini seharusnya merupakan algoritma yang kurang efisien jika rekan O(nlogn) mereka ada. Aplikasi umum mungkin Brute Force di sini.

Saya harap ini menjawab pertanyaan Anda dengan baik. Jika pengguna memiliki lebih banyak contoh untuk ditambahkan, saya akan lebih dari senang :)

196
Karan Bajaj

Contoh sederhana O(1) mungkin return 23; - apa pun inputnya, ini akan kembali dalam waktu yang tetap dan terbatas.

Contoh tipikal O(N log N) adalah mengurutkan array input dengan algoritma yang baik (mis. Mergesort).

Contoh tipikal jika O(log N) akan mencari nilai dalam array input yang diurutkan berdasarkan pembagian.

28
Alex Martelli

O(1) - most cooking procedures are O(1), that is, it takes a constant amount of time even if there are more people to cook for (to a degree, because you could run out of space in your pot/pans and need to split up the cooking)

O (logn) - menemukan sesuatu di buku telepon Anda. Pikirkan pencarian biner. 

O (n) - membaca buku, di mana n adalah jumlah halaman. Ini adalah jumlah minimum waktu yang diperlukan untuk membaca buku.

O (nlogn) - tidak dapat langsung memikirkan sesuatu yang mungkin dilakukan sehari-hari yaitu nlogn ... kecuali Anda mengurutkan kartu dengan melakukan penggabungan atau pengurutan cepat!

23
Chii

Saya dapat menawarkan Anda beberapa algoritma umum ...

  • O(1): Accessing an element in an array (i.e. int i = a[9])
  • O(n log n): quick or mergesort (On average)
  • O (log n): Pencarian biner 

Ini akan menjadi respons usus karena ini terdengar seperti jenis pekerjaan rumah/wawancara. Jika Anda mencari sesuatu yang lebih konkret, ini akan sedikit lebih sulit karena masyarakat pada umumnya tidak mengetahui implementasi yang mendasarinya (Menyimpan sumber terbuka tentu saja) dari aplikasi yang populer, juga konsep secara umum tidak berlaku untuk "aplikasi"

10
Scanningcrew

O (1) - Menghapus elemen dari daftar yang ditautkan dua kali lipat. misalnya.

typedef struct _node {
    struct _node *next;
    struct _node *prev;
    int data;
} node;


void delete(node **head, node *to_delete)
{
    .
    .
    .
}
3
sigjuice

Anda dapat menambahkan algoritma berikut ke daftar Anda:

O(1) - Menentukan apakah suatu bilangan genap atau ganjil; Bekerja dengan HashMap

O(logN) - komputasi x ^ N, 

O(N Log N) - Peningkatan urutan terpanjang

2
rachvela

Kompleksitas aplikasi perangkat lunak tidak diukur dan tidak ditulis dalam notasi O besar. Ini hanya berguna untuk mengukur kompleksitas algoritma dan membandingkan algoritma dalam domain yang sama. Kemungkinan besar, ketika kita mengatakan O (n), kita berarti "O (n) perbandingan " atau "O (n) operasi aritmatika". Itu artinya, Anda tidak dapat membandingkan pasangan algoritma atau aplikasi apa pun.

2
P Shved

O(1): finding the best next move in Chess (or Go for that matter). As the number of game states is finite it's only O(1) :-)

2
Carsten

O (n log n) terkenal batas atas pada seberapa cepat Anda dapat mengurutkan set arbitrer (dengan asumsi model komputasi standar dan tidak sangat paralel) 

1
Carsten

O (2N)  

O (2N) menunjukkan suatu algoritma yang pertumbuhannya berlipat ganda dengan setiap penambahan pada set data input. Kurva pertumbuhan O (2N) fungsinya eksponensial - dimulai dari sangat dangkal, kemudian naik secara meteor. Contoh dari O (2N) function adalah perhitungan rekursif angka Fibonacci:

int Fibonacci (int number)
{
if (number <= 1) return number;
return Fibonacci(number - 2) + Fibonacci(number - 1);
}
0
Hefaz

0 (logn) -Pencarian biner, elemen puncak dalam array (mungkin ada lebih dari satu puncak) 0 (1) -dalam python menghitung panjang daftar atau string Fungsi len () membutuhkan waktu 0(1). Mengakses elemen dalam array membutuhkan 0(1) waktu. Operasi push dalam tumpukan membutuhkan 0(1) waktu . 0 (nlogn) -Merge sort. menyortir python membutuhkan waktu nlogn. jadi ketika Anda menggunakan listname.sort () dibutuhkan waktu nlogn.

Pencarian catatan dalam tabel hash kadang-kadang membutuhkan lebih dari waktu yang konstan karena tabrakan.

0
Abhinav Vajpeyi