Bu kod, Kodlama röportaj kitabının çatlağından kaynaklanmaktadır.Bu dize manipülasyon kodunun uzay karmaşıklığı nedir?
public static boolean isUniqueChars2(String str) {
boolean[] char_set = new boolean[256];
for (int i = 0; i < str.length(); i++) {
int val = str.charAt(i);
if (char_set[val]) return false;
char_set[val] = true;
}
return true;
}
ve yazar
I (n) O'dur zaman karmaşıklığını anlıyorum ama bellek karmaşıklığı O nasıl olabilir anlamıyorum (n)saat karmaşıklığı O, n dizisinin uzunluğu (n), olduğu, söz edilen ve alan karmaşıklığı O (n) 'dir.
Benim düşünce: CHAR_SET olursa olsun ne boyutta 256 dizisi kalacaktır giriş (str) boyutu. "str" uzunluğu 100.000 olsa bile, char_set hala 256 öğe dizisidir. Bu yüzden, bu işlevin bellek gereksinimlerinin girdinin büyüklüğü ile değişmediğinden ve bir sabit 256 kalması nedeniyle, alan karmaşıklığının sabit, yani O (1) olduğunu düşündüm. Yanlış isem
birisi açıklayabilir (ve neden?)Çok teşekkür ederim.
Sanırım haklısınız, ama otorite, orijinal str kendiliğinden O (n) (ya da değere göre bir kopyasını mı alıyorsunuz?) Dedi. – qPCR4vir
hmmm ... bu ilginç. Asimptotik karmaşıklıkları türetirken, genellikle girişin nasıl/nerede/ne zaman okunduğunu görmezden geldiğimizi düşündüm. Ve sadece metot içinde neler olup bittiğine odaklanın (giriş büyüklüğünü dikkate alarak, n) – anakkala
Yazarın akıl yürütmesini görmek isterim. Algoritmanın kendisi tarafından kullanılan alan sabittir. Siz, mekanın karmaşıklığını analiz ettiğimizde, algoritmanın girdiyi göz ardı ederek, işlemin gerektirdiği * ekstra * alan miktarından bahsediyoruz. –