Ogólne podejście do problemu

0

Mam pytanie natury ogólnej, ale problem jest konkretny

Załóżmy, że mam plik z danymi w którym jest 5000 wierszy i tylko 3 kolumny:

  1. Kolumna ID dla dziecka
  2. Kolumna ID dla rodzica
  3. Kolumna typu Date /Time

Np.

Dziecko | Rodzic | Data
Darek | Malinowski | 3.02.2018
Staszek | Malinowski | 3.01.2018
Marek | Kowalski | 13.02.2016
Jarek | Reputowicz | 23.12.2015
.
.
.

Teraz w tych tysiącach wierszy muszę znaleźć dziecko danego rodzica dla którego data będzie najbliższa teraźniejszości i tą datę i imię dziecka mam wypisać.
Czyli na powyższym przykładzie dla Malinowskiego wynikiem będzie: Darek | 3.02.2018.

W języku programowania Java (czy nawet VB jak to Excel) dosyć łatwo można napisać program, który to zadanie rozwiąże.
Można "pojechać" nawet IF-ami, pęlami FOR itd. Pewnie są różne sposoby, aby ten problem rozwiązać.

Mi chodzi jednak jak do tego problemu podejść kompleksowo i optymalnie. Tzn. zakładam, że użycie samych IF-ów lub SWITCH jest złym rozwiązaniem.
Z drugiej strony zagnieżdżone pętle FOR w pętlach FOR są pewnie lepszym.

Moje pytanie jest jak znaleźć najlepsze rozwiązanie dla tego typu problemu. Czy jest na to jakiś wzorzec projektowy, czy może to jest kwestia algorytmów np. odpowiedniej metody sortowania?
Brakuje mi wiedzy i to właśnie o nią odważyłem się zapytać.

0

Podejście naiwne - przeszukujesz plik, sprawdzasz dla każdego wiersza czy rodzic jest właściwy, jak jest to sprawdzasz czy data jest młodsza niż poprzednio zapamiętana, jak jest, to zapamiętujesz datę i imię. Czyli w skrócie pętla z 2 ifami - jeżeli problem to jednorazowe sprawdzenie, to nic tu nie zoptymalizujesz.

Jeżeli masz wyszukiwać takie informacje wiele razy, to na początku tworzysz sobie mapę klucz - wartość (np. w Java jest to HashMap) gdzie kluczem jest id rodzica, a wartością lista dzieci, albo jeżeli nie jest ci to potrzebne to najmłodsze dziecko zamiast kolekcji.

1 użytkowników online, w tym zalogowanych: 0, gości: 1