Tak:
Wiesz element leży w każdym indeksie [0,i]
z pierwszej listy lub [0,i]
z drugiej listy. Weź element i/2
z każdej listy i porównaj. Kontynuuj przez bisection.
Nie dołączam żadnego kodu, ponieważ ten problem brzmi bardzo jak zadanie domowe.
EDYCJA: Bisection jest metodą kryjącą się za wyszukiwaniem binarnym.Działa to tak:
Załóżmy i = 10; (indeksowanie od zera, szukamy 11 elementu ogólnie).
W pierwszym kroku wiadomo, że odpowiedź znajduje się na liście 1 (0 ... 10) lub na liście 2 (0 ... 10). Take a = list1 (5) i b = list2 (5).
Jeśli a> b, to na liście 1 znajduje się 5 elementów, które występują przed a, i co najmniej 6 elementów na liście2, które pojawiają się przed a. A więc jest górną granicą wyniku. Podobnie jest 5 elementów na liście2, które pochodzą przed b i mniej niż 6 elementów na liście1, które pochodzą przed b. Zatem b jest dolną granicą wyniku. Teraz wiemy, że wynik znajduje się na liście 1 (0..5) lub na liście2 (5..10). Jeśli jest to < b, wynikiem jest lista1 (5..10) lub lista2 (0..5). A jeśli a == b mamy naszą odpowiedź (ale problem mówi, że elementy były różne, dlatego a! = B).
Powtarzamy ten proces, zmniejszając rozmiar przestrzeni wyszukiwania o połowę przy każdym kroku. Bisekcja odnosi się do faktu, że wybieramy środkowy element (dwusieczną) poza zasięgiem, który znamy z wynikiem.
Jedyna różnica między tą i binarną wyszukiwarką polega na tym, że w wyszukiwaniu binarnym porównujemy ją z wartością, której szukamy, ale tutaj porównujemy wartość z drugiej listy.
UWAGA: w rzeczywistości jest to O(log i)
, który jest lepszy (przynajmniej nie gorszy niż) niż O(log n)
. Co więcej, dla małych i (prawdopodobnie i100), faktycznie mniej operacji będzie scalać pierwsze i elementy (wyszukiwanie liniowe zamiast bisekcji), ponieważ jest to o wiele prostsze. Po dodaniu zachowania pamięci podręcznej i lokalizacji danych wyszukiwanie liniowe może być szybsze nawet o kilka tysięcy.
Ponadto, jeśli i> n następnie powoływać się na fakt, że wynik ma być pod koniec każdej listy, początkowy zakres kandydat w każdym liście jest z ((w) .. n)
Czy to zadanie domowe? –
@ Ben: NOPE To nie jest praca domowa. Przygotowuję się do udziału w niektórych wywiadach tego lata. Teraz już wiesz :) –
możliwy duplikat http: // stackoverflow.com/questions/2531103/nth-najmniejsza liczba-spośród-dwóch-baz danych-o-rozmiar-n-każdym-użyciu-dziel i rządź – outis