Saya membaca posting ini di Big-O
Dikatakan bahwa kode berikut adalah O (n ^ 2):
bool ContainsDuplicates(String[] strings)
{
for(int i = 0; i < strings.Length; i++)
{
for(int j = 0; j < strings.Length; j++)
{
if(i == j) // Don't compare with self
{
continue;
}
if(strings[i] == strings[j])
{
return true;
}
}
}
return false;
}
Tapi saya tidak bisa mengerti kenapa.
Lingkaran dalam melakukan sesuatu yang konstan.
Jadi ini adalah penjumlahan dari 1 .... N dari sebuah konstanta. yaitu angka konstan O (1).
Lingkaran luar adalah penjumlahan dari O (1).
Jadi saya akan membayangkan itu adalah n * O (1).
Saya pikir saya salah paham sesuatu di sini.
Saya tidak berpikir bahwa semua loop bersarang berarti O (n ^ 2), kan?
i+1
bukan 0
. Seperti yang tertulis, dalam kasus terburuk (tidak ada dupes) 1/2 perbandingannya mubazir.
O(N)
, kode ini akan benar-benar berada di O(N^2 * M)
tempat M adalah panjang string.