Bir sorunum ve bir Tamam ish çözümüm. Umarım orada daha iyi bir çözüm vardır.Bir keyfi alt dizideki tüm öğelerin toplamını bulmak için en iyi algoritma nedir
sorun
etrafında 200,000 tamsayılar ile bir dizi vardır. I1 ve i2 olmak üzere iki indeks verildiğinde, i1 ve i2 arasındaki tüm elementlerin toplamını hesaplamam gerekir. Dizideki her tam sayı 1 ile 4 arasındadır. Örneğin,
a = [1, 3, 2, 4, 3, 2, 4, 1];
subsection_sum(a, 0, 3); // returns 6: (1 + 3 + 2)
Bu işlem yaklaşık 200.000 kez gerçekleştirilecektir, bu nedenle oldukça hızlı olması gerekir. For döngüsündeki basit bir sayaç O (n) ve çok yavaştır. Dizi, inşaattan sonra asla değiştirilmez, bu nedenle nispeten pahalı bir ön işleme aşamasına sahip olmak sorun değil.
İlk ped uzunluğu kadar sıfırlarla orijinal dizi ikisinin bir güçtür: My iyi çözüm
bugüne kadar
Bu algoritma O (n günlük) zamanı çalışır. Ardından, diziyi iki eşit parçaya bölün ve her birinin toplamını saklayın. Ardından diziyi dört bölüme ayırın ve her birinin toplamını saklayın. Sonra sekizinci. Dizi, bölüm 2 öğeye bölünene kadar bunu yapmaya devam edin. Yukarıda 8 elemanlı bir dizinin, bu iki aşamada: Daha sonra, iki yanarlar
halves = [(a[0] + a[1] + a[2] + a[3]), (a[4] + a[5] + a[6] + a[7])]
quarters = [(a[0] + a[1]), (a[2] + a[3]), (a[4] + a[5]), (a[6] + a[7])]
, zaman (log n) O'da subsection_sum çalışmak mümkündür. Örneğin, subsection_sum (a, 2, 7) == quarter [1] + yarımları [1].
Mükemmel, Böyle karmaşık bir çözümü düşündüğüme inanamıyorum ve basit olanı kaçırdım! Teşekkürler. –
Benimkiyle aynı çözüm, ama beni ona yen! +1 –