Ayrıca, matematiksel yaklaşımın iyi çalışmadığı sorunun varyantlarına uygulamayı deniyorsanız daha esnek olabilen, bölümlemeye dayalı doğrusal bir zaman ve sabit alan algoritması da vardır. Bu, altta yatan dizinin değiştirilmesini gerektirir ve matematiksel yaklaşımdan daha kötü sabit faktörlere sahiptir. Daha spesifik olarak, toplam değer sayısı ve kopyalarının sayısı açısından maliyetlerin sırasıyla ve olduğuna inanıyorum; şu an sahip olduğumdan daha fazla zaman ayırıyorum.d O ( n log d ) O ( d )ndO(nlogd)O(d)
Algoritma
İlk çiftin tüm dizi üzerindeki aralık olduğu bir çift listesi ile başlayın veya 1 dizine eklenmişse .[(1,n)]
Liste boşalana kadar aşağıdaki adımları tekrarlayın:
- Herhangi bir çifti alın ve listeden kaldırın .(i,j)
- Belirtilen alt dizinin minimum ve maksimum ve değerlerini bulun .maksminmax
- Eğer , altdizilim sadece eşit olan bir eleman içerir. Biri hariç öğelerini verin ve 4-6 arasındaki adımları atlayın.min=max
- Eğer , altdizilim bir çiftleri içerir. 5. ve 6. adımları atlayın.max−min=j−i
- Alt diziyi etrafına bölün , böylece dizinine kadar olan öğeler ayırıcıdan daha küçük ve bu dizinin üzerindeki öğeler küçük olmayacak şekilde. kmin+max2k
- Listeye ve ekleyin .( k + 1 , j )(i,k)(k+1,j)
Zaman karmaşıklığının üstünkörü analizi.
1 ile 6 arasındaki adımlar zaman alır, çünkü minimum ve maksimum değerleri bulmak ve bölümleme doğrusal zamanda yapılabilir.O(j−i)
Listedeki her çift ya ilk çifttir ya da karşılık gelen alt dizinin yinelenen bir eleman içerdiği bir çiftin çocuğudur. Her bir geçiş her bir yinelemenin olabileceği aralığı yarıya , en fazla vardır, bu nedenle çiftler dahil toplamda en fazla toplamı vardır yinelenmeyen alt diziler. Herhangi bir zamanda, listenin boyutu fazla değildir .( 1 , n ) d ⌈ log 2 , n + 1 ⌉ 2 d ⌈ log 2 , n + 1 ⌉ 2 d(i,j)(1,n)d⌈log2n+1⌉2d⌈log2n+1⌉2d
Yinelenen herhangi birini bulmak için işi düşünün. Bu, üstel olarak azalan bir aralıktaki bir çiftler dizisinden oluşur, bu nedenle toplam çalışma, geometrik dizinin veya toplamıdır . Bu, kopyalar için toplam çalışmanın olması gerektiği ve cinsinden doğrusal olacağı açık bir sonuç verir .d O ( n, d ) n,O(n)dO(nd)n
Daha sıkı bir sınır bulmak için, en fazla çoğaltılmış kopyaların en kötü senaryosunu düşünün. Sezgisel olarak, arama aşamalı olarak daha küçük parçalar halinde ve her biri tam dizinin geçildiği iki aşama alır ve parçaların den daha küçük olduğu, böylece sadece dizinin bazı kısımları çaprazlanır. İlk aşama yalnızca derin olabilir, bu nedenle maliyet ve ikinci fazın maliyeti dır, çünkü aranan toplam alan tekrar katlanarak azalır . günlüğüdO(ngünlüğüd)O(n)ndlogdO(nlogd)O(n)