Implementacja

Z budowaniem programów jest jak z budowaniem samochodów. Nie budują państwo karoserii, a potem w niej śrubka po śrubce silnika. Tylko budują państwo silnik np. na blacie z boku, testują etc. i dopiero umieszczają pod maską łącząc z resztą.

Budowanie programów jest podobne. Stad, jeżeli mają Państwo zasymulować pracownika w porcie, który się ma poruszać, sprawdzać kontenery, zużywać czas. A jednocześnie wykonywać dwa algorytmy, które z kolei mają być użyte czy sprawdzaniu sumarycznego czasu spędzonego na wszystkich możliwych szukaniach (pętla) dla aktualnie sprawdzanego k (w pętli). Proszę nie zaczynać od robienia całości "na raz".

  • Proponuję wpierw stworzyć funkcje, czy też obiekt… odpowiadający za pracownika. Któremu będziemy kazać np.: sprawdz_kontener(5). A on sam będzie dbać o to by podejść jeżeli stoi za daleko, i zmierzyć ile czasu mu to zajęło (sprawdzanie z dojściem).

  • Potem przetestować pracownika, podając mu różne kontenery do sprawdzenia i patrząc gdzie stoi, i ile zużył czasu.

  • Jak już mamy gotowego działającego pracownika nie musimy się więcej martwić o jego zasięg wzroku, ile mu zajęło czasu itp. sprawy. Dokonaliśmy separacji problemu pracownika od problemu procedury, którą wykonuje. Możemy teraz skupić się na samej procedurze.

  • Proponuję od końca, jak z pakowaniem prezentu w wiele pudełek - nie zaczynamy od największego. Czyli proszę spróbować w kolejnym kroku kazać chodzić pracownikowi zgodnie w wyszukiwaniem binarnym i to przetestować.

  • Teraz, jak działa to dorobić pierwszą fazę, ze skokami o k.

  • A teraz tylko jeden krok do gotowego rozwiązania, używać wcześniej stworzony kod szukając każdego kontenera dla zadanych parametrów i sumować czas. A to robić w pętli dla każdego k i wybierać odpowiednie.

Porada

Proszę się zastanowić jak można w tym zadaniu obejść się bez tablicy. Z punktu widzenia algorytmów wyszukiwania jedynym istotnym kryterium jest kryterium uporządkowania.

Narzędzia

Zewnętrzne narzędzia (jak ideone.com,) dla maszyn wirtualnych, jak java nie będą dawać użytecznych oszacowań na zużycie pamięci (np. java alokuje większe bloki by zapobiec defragmentacji pamięci w systemie operacyjnym,,cache itp. itd).

Jednak sama java oferuje możliwość ograniczenia maksymalnego rozmiaru puli pamięci oraz pomiaru jaką cześć tej puli już wykorzystaliśmy. (Patrz dokumentacja polecenia/programu: "java").

pomocne linki

Structure and Interpretation of Computer Programs: http://groups.csail.mit.edu/mac/classes/6.001/abelson-sussman-lectures/ O konstruowaniu programów. Co prawda bardzie dookoła języków funkcyjnych, jednak podejście bardzo ciekawie przedstawione i może pomóc, podpasować. (Polecam ściągać za pomocą bittorrent by nie obciążać ichnich łącz, poza tym szybciej).