Apa beberapa algoritma yang kita gunakan setiap hari yang memiliki kompleksitas O (1), O (n log n) dan O (log n)?
Apa beberapa algoritma yang kita gunakan setiap hari yang memiliki kompleksitas O (1), O (n log n) dan O (log n)?
Jawaban:
Jika Anda menginginkan contoh Algoritma / Kelompok Pernyataan dengan kompleksitas Waktu seperti yang diberikan dalam pertanyaan, berikut adalah daftar kecilnya -
O(1)
waktuO(n)
waktuSingkatnya, semua Algoritma Brute Force, atau Noob yang membutuhkan linearitas, didasarkan pada kompleksitas waktu O (n)
O(log n)
waktuO(n log n)
waktuFaktor 'log n' diperkenalkan dengan mempertimbangkan Divide and Conquer. Beberapa dari algoritma ini adalah yang paling optimal dan sering digunakan.
O(n^2)
waktuAlgoritma ini seharusnya menjadi algoritma yang kurang efisien jika pasangan O (nlogn) mereka ada. Penerapan umum mungkin Brute Force di sini.
O(log n)
daftar menjadi sebelum O(n)
daftar sehingga daftar tersebut berurutan dari yang terbaik ke yang terburuk. haha :)
Contoh sederhana dari O(1)
mungkin return 23;
- apa pun masukannya, ini akan kembali dalam waktu yang tetap dan terbatas.
Contoh tipikal O(N log N)
akan menyortir array input dengan algoritma yang baik (misalnya mergesort).
Contoh tipikal jika O(log N)
akan mencari nilai dalam larik input yang diurutkan menurut pembagian.
O (1) - sebagian besar prosedur memasak adalah O (1), artinya, dibutuhkan jumlah waktu yang konstan bahkan jika ada lebih banyak orang untuk memasak (sampai tingkat tertentu, karena Anda dapat kehabisan ruang di panci / wajan Anda dan perlu membagi masakan)
O (logn) - menemukan sesuatu di buku telepon Anda. Pikirkan pencarian biner.
O (n) - membaca buku, di mana n adalah jumlah halaman. Ini adalah jumlah waktu minimum yang diperlukan untuk membaca buku.
O (nlogn) - tidak dapat langsung memikirkan sesuatu yang mungkin dilakukan setiap hari yaitu nlogn ... kecuali jika Anda mengurutkan kartu dengan melakukan merge atau quick sort!
Saya dapat menawarkan beberapa algoritma umum ...
Ini akan menjadi tanggapan yang tepat karena ini terdengar seperti pertanyaan pekerjaan rumah / wawancara. Jika Anda mencari sesuatu yang lebih konkret, itu sedikit lebih sulit karena publik pada umumnya tidak akan tahu tentang implementasi yang mendasari (tentu saja menghemat sumber terbuka) dari aplikasi populer, juga tidak konsep secara umum berlaku untuk "aplikasi"
O (1): menemukan langkah terbaik berikutnya dalam Catur (atau Pergi dalam hal ini). Karena jumlah status game terbatas, hanya O (1) :-)
O(1)
nanodetik, dan Anda pasti tahu mana yang O(1)
akan terjadi lebih dulu ...
Kompleksitas aplikasi perangkat lunak tidak diukur dan tidak ditulis dalam notasi big-O. Mengukur kompleksitas algoritma dan membandingkan algoritma dalam domain yang sama hanya berguna. Kemungkinan besar, ketika kita mengatakan O (n), yang kita maksud adalah "O (n) perbandingan " atau "O (n) operasi aritmatika". Artinya, Anda tidak dapat membandingkan pasangan algoritme atau aplikasi apa pun.
O (1) - Menghapus elemen dari daftar tertaut ganda. misalnya
typedef struct _node {
struct _node *next;
struct _node *prev;
int data;
} node;
void delete(node **head, node *to_delete)
{
.
.
.
}
Anda dapat menambahkan algoritme berikut ke daftar Anda:
O(1)
- Menentukan apakah suatu bilangan genap atau ganjil; Bekerja dengan HashMap
O(logN)
- menghitung x ^ N,
O(N Log N)
- Peningkatan urutan terlama
0 (logn) -Pencarian biner, elemen puncak dalam sebuah array (bisa ada lebih dari satu puncak) 0 (1) -in python menghitung panjang daftar atau string. Fungsi len () membutuhkan 0 (1) waktu. Mengakses elemen dalam larik membutuhkan 0 (1) waktu. Operasi dorong dalam tumpukan membutuhkan waktu 0 (1) kali. 0 (nlogn) -Gabungkan semacam. menyortir dengan python membutuhkan waktu nlogn. jadi ketika Anda menggunakan listname.sort () dibutuhkan waktu nlogn.
Catatan-Pencarian dalam tabel hash terkadang membutuhkan lebih dari waktu konstan karena benturan.
O (2 N )
O (2 N ) menunjukkan algoritma yang pertumbuhannya berlipat ganda dengan setiap penambahan ke kumpulan data masukan. Kurva pertumbuhan suatu fungsi O (2 N ) bersifat eksponensial - dimulai dari sangat dangkal, kemudian naik secara meteorik. Contoh dari fungsi O (2 N ) adalah perhitungan rekursif dari bilangan Fibonacci:
int Fibonacci (int number)
{
if (number <= 1) return number;
return Fibonacci(number - 2) + Fibonacci(number - 1);
}
Tower of Hanoi
akan menjadi contoh yang lebih baik.