Bir dizinin bitişik alt dizilerinden toplamları sayma


12

Bize tüm ile dizisi verilir .a [ i ] > 0bir[1...n]bir[ben]>0

Şimdi alt dizilerinden kaç ayrı toplam oluşturulabileceğini bulmamız gerekiyor (bir alt dizinin dizinin bitişik bir aralığı olduğu, yani bazı için , toplamın tümü alt dizinin elemanları). Örneğin, , cevap 4'tür: oluşturabiliriz .j , k a = [ 1 , 2 , 1 ] 1 , 2 , 3 , 4bir[j...k]j,kbir=[1,2,1]1,2,3,4

zamanında ayrı meblağların sayımını biliyorum .Ö(n2)

Dahası, bunun bir dizenin farklı alt dizelerinin sayısını bulmamız gereken klasik soruna benzer olduğunu fark ettim. Bir ek dizisi oluşturma ve benzer bir şekilde ( zamanında) çözme olasılığını düşünüyordum . Ama burada çalışmak için nasıl değiştirileceğini bulamadım. Örneğin, için sonek dizisi kullanırsak, kabul edilebilir dört yerine 5 örnek alırız. Bunu sonek dizileri kullanarak yapmak mümkün mü yoksa yanlış yönde mi düşünüyordum?a = [ 1 , 2 , 1 ]Ö(n)bir=[1,2,1]

Ayrıca düşündüğüm bir yön daha var. Böl ve fethet. Sanki diziyi tek bir öğeye indirilinceye kadar her seferinde iki parçaya bölersem. Tek bir öğenin bir toplamı olabilir. Şimdi iki tek öğeyi birleştirirsek, iki şekilde yapılabilir: her iki tek aralık da aynı öğeye sahipse, 2 farklı toplam alırız veya her ikisinin farklı öğeleri varsa 3 farklı toplam alırız. Ancak 1'den büyük uzunluktaki dizileri birleştirmek için bunu genelleştiremiyorum. İki m boyutlu dizileri birleştirmek ve cinsinden cevabı almak mümkün müdür ?Ö(m)


Sorununuzdan nasıl bir çözüm elde edebileceğinizi hemen görmeme rağmen, Maksimum Alt Dizi Sorununun yapısı tanımladığınız soruna benzer ve içinde çalışan bir bölme ve fethetme çözümüne sahiptir. . Ö(n lg n)
Isaac Kleinman

Aşağıdaki sorunla başlamayı öneririm: aynı toplamda iki aralık olup olmadığına karar vermek ne kadar zor? Bu sorunun 3SUM sertliğini kanıtlamak cazip gelebilir, ancak şu ana kadar yapamadım.
Yuval Filmus

Yanıtlar:


2

Farklı toplamların sayısı içinde olabileceğinden, en kötü durumda neredeyse den daha iyi olamazsınız .Ö(n2)Θ(n2)

Örneğin dizisini ele alalım . Burada bitişik alt dizinin her birinin toplamı farklıdır.[1,2,4,8,...,2n]n(n+1)2


"Neredeyse kesin", sorunun toplamların değerlerini çıktı olarak gerektirmemesinden kaynaklanmaktadır. Ancak, değerlerin en azından çoğunu belirlemeden kopyaların önlenebileceğini düşünmüyorum.


Doğru cevabı bulmaya devam ederken tüm olasılıkları aşmaktan bir şekilde kaçınmanın bir yolu olmamasının özel bir nedeni görmüyorum. Dinamik programlama algoritmaları bunu rutin olarak yapar.
Yuval Filmus
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.