Czesc wszystkim,
Mam problem z zadaniem z algorytmow. Zadanie sklada sie z dwoch czesci:
1. Majac liste liczb calkowitych gdzie kazda liczba moze pojawic sie wiele razy nalezy zidentyfikowac liczbe wystepujaca najrzadziej. Jesli kilka roznych liczb wystepuje z taka sama frekwencja, program powinien zwrocic liczbe o najwyzszym indeksie. Przykladowo z listy [1,2,2,1] algorytm musi zwrocic 1. Lista jest nieuporzadkowana.
Ta czesc nie stanowi problemu. Moj algorytm napisany w Python wyglada tak:
def leastCommon(someList):
element = someList[0]
counter = someList.count(element)
# counter inicjuje zmienna stanowiaca poczatkowy punkt odniesienia
for i in someList:
# petla liczy czestotliwosc wystepowania
# kazdego elementu na liscie i zapisuje
# w zmiennej least liczbe o najnizszej frekwencji
if someList.count(i) <= counter:
counter = someList.count(i)
least = i
return least
Problemem jest natomiast druga czesc zadania:
2. Majac uporzadkowana w kolejnosci rosnacej liste liczb calkowitych, zoptymalizuj wczesniejszy algorytm. Optymalizacja musi uwzgledniac strukture nowej listy (uporzadkowana w kolejnosci rosnacej).
W zadaniu nie wolno uzyc slownikow ani zadnych bibliotek Pythona.
Pierwszy algorytm ma zlozonosc O(n²). Zeby ulepszyc drugi algorytm, musialby miec zlozonosc O(n), O(log n) albo O(n log n). Niestety doznalem jakiejs blokady umyslowej i nie jestem w stanie zrobic drugiej czesci zadania. Walkuje to od tygodnia i potrzebuje swiezego spojrzenia. Nie chodzi mi o gotowe rozwiazanie, a raczej pokierowanie we wlasciwym kierunku. Bede bardzo wdzieczny za wszelka pomoc.
M.