Closed solitaire closed 10 years ago
Dodaj odpowiedni test case. Postaram się rzucić na to okiem.
Ciekawostka jest taka, że jak zmienisz ostatnią litere w TGGTGC
na cokolwiek innego to testy przechodzą.
Ja do tego będę miał czas usiąść dopiero w przyszłym tygodniu, a konkretniej jak zrobie WPAM bo mam termin na 22 a jeszcze nie zacząłem.
Udało mi się poprawić połowicznie - teraz obliczony koszt, jest zgodny z tym co otrzyma się licząc wyrównane sekwencje. Pozostało mi zdiagnozowanie, dlaczego w tym przypadku nie działa algorytm rekurencyjny.
Dobra robota. Chyba wiem co jest źle.
def putToMatrix(i: Int, j: Int, k: Int, data: (Int, Moves)) = alignments += (((i, j, k), data))
if (i == 0 || j == 0 || k == 0) {
val costs: (Int, List[(sequences.Move, sequences.Move, sequences.Move)]) = marginalCosts(i, j, k, sm)
alignments += (((i, j, k), costs))
costs
}
wydaje mi się, że jak dojdziemy tutaj do brzegu to za szybko zakończy się sekwencja ruchów. Jeśli i=2 j=0 k=0 to będzie tylko 1 ruch a powinny być więcej. Czujesz o co chodzi?
Powinienem jeszcze wkleić te marginalCosts bo tam jest właśnie robiona lista z ruchami zawierająca 1 ruch
To jest całkiem prawdopodobne, że to jest właśnie błąd, bo w wersji iteracyjnej ta metoda jest używana, ale z listy którą zwraca brany jest tylko head. A algorytm rekurencyjny działa tak że bierze to jako końcówkę czyli całość listy.
Daj znać czy to napisałem ma sens.
@solitaire Nom, miałem racje. Usiadłem teraz do tego na 10 minut i poprawiłem ;) Wszystkie testy przechodzą więc zamykam.
Każda wersja produkuje co innego: iteracyjna: ---TGCA TGGTGC- ---TGCA Alignment: 57
rekurencyjna - widać, że gdzieś zgubiła dwa znaki z drugiej sekwencji: -TGCA TGGT- -TGCA Alignment: 57
I obliczony koszt nie zgadza się z tym, co otrzyma się jeśli policzy się ręcznie.