2010-02-05 21 views
5

Bir ödev sorunu üzerinde çalışıyorum ve bir O (n * logn) çözümü oluşturma konusunda bazı zorluklar yaşıyorum. Önceden sıralanmış bir dizi ve aranacak bir değer alan bir işlev yazmam gerekiyor. Daha sonra, dizi toplamının iki öğesinin bu değere eşit olup olmadığını bulmam gerekiyor.Önceden sıralanmış bir dizi toplamında iki öğenin belirli bir değere eşit olup olmadığını bulma

Bunun için hem O (n) hem de O (n * logn) algoritmaları oluşturmam gerekiyor.

O (n) oluşturmak kolaydı; Ancak, problem çözmede gerçekten yardımcı olmayan bazı gereksiz kodları eklemeden O (n * logn) algoritmasını oluşturmakta zorluk çekiyorum. Birisi bana eksik olan şey hakkında bazı işaretçiler verebilirse takdir edilecektir.

+1

O (n) ?? – letsc

+4

@letsc: iki dizin a ve b kullanın; a = 1 ve b = n ile başlatılır. A ve b indekslerindeki elemanların toplamını kontrol edin. Toplam hedefinizse, durun, öğeleri buldunuz. Toplam daha düşükse, a; daha düşükse, azaltmak b. A = b, durduğunda, eşleşen bir öğe yoktur. Öğeler sıralandığından, yalnızca aday olmadığını bildiğiniz çiftleri atlarsınız. – Joubarc

cevap

4

İlk öğeden başlayın ve sırayla gidin. Bu arada, ikili arama kullanarak ikinci elemanı arayın.

+0

Teşekkürler. Bunu özlediğime inanamıyorum. – JohnT

0

Önceden sıralandıkları için ikili arama ve lineer arama kullanabilirsiniz

İlgili konular