tamsayı dizisi A verildiğinde , i , j ve k olmak üzere üç indeks bulan , i < j < k ve A [ i ] < A [ j ] < A [ k ] olduğunu kanıtlamak veya çürütmek istiyorum. (veya böyle bir üçlü olmadığını bulur) doğrusal zamanda.
Bu bir ödev sorusu değil; Bunu “böyle bir algoritmayı uygulamaya çalışın” şeklinde bir programlama forumunda gördüm. Çeşitli deneylerden sonra bunun imkansız olduğundan şüpheleniyorum. Sezgim bana öyle söylüyor, ama bu gerçekten hiçbir şey için geçerli değil.
Resmi olarak kanıtlamak istiyorum. Bunu nasıl yapıyorsun? İdeal olarak adım adım ortaya konmuş bir kanıt görmek isterim ve o zaman bu kadar eğimliyseniz, genel olarak bu gibi basit soruları kanıtlama / çürütme konusunda nasıl bir açıklama yapacağım. Yardımcı olursa, bazı örnekler:
[1,5,2,0,3] → (1,2,3)
[5,6,1,2,3] → (1,2,3)
[1,5,2,3] → (1,2,3)
[5,6,1,2,7] → (1,2,7)
[5,6,1,2,7,8] → (1,2,7)
[1,2,999,3] → (1,2,999)
[999,1,2,3] → (1,2,3)
[11,12,8,9,5,6,3,4,1,2,3] → (1,2,3)
[1,5,2,0,-5,-2,-1] → (-5,-2,-1)
Biri üzerinde yinelenebilir ve her seferinde bir i < j (bizim mevcut j , yani), yeni bir üçlü yapmak ve bir dizi üzerine itmek gerekiyordu. Üç katımızdan biri tamamlanana kadar her üç katına çıkmaya ve karşılaştırmaya devam ediyoruz. Bu tıpkı Yani , ! Ama üçlü dizimizdeki üçlü sayısı en kötü durumda giriş listesinin boyutuna karşılık geleceğinden, bu sadece O ( n ) ' den daha karmaşık olduğunu düşünüyorum .[1,5,2,0,-5,-2,-1] → 1..2.. -5.. -2.. -1
[1,5,2,0,-5,-2,3,-1] → 1..2.. -5.. -2.. 3