• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Pomoc w zrozumieniu algorytmu

Object Storage Arubacloud
0 głosów
117 wizyt
pytanie zadane 3 maja 2019 w Programowanie przez BinaryMan Stary wyjadacz (12,620 p.)

Cześć ! 
Prosił bym o pomoc w zrozumieniu fragmentu pewnego algorytmu.
Chodzi mi o problem Kominwojażera. Załóżmy, że mam strukturę: 
 

struct points
{
    int ordinal_number;
    int x_cordinate;
    int y_cordinate;
};

2. vector na tą strukturę, który przechowuje jakieś rozwiązanie problemu (drogę po wszystkich punktach).
3. Drogę początkową (suma odległości między punktami w vector).
Czytałem o algorytmie który zamienia parami poszczególne wierzchołki i sprawdza czy droga jest krótsza, problem w tym że nie wiem za bardzo jak to ugryźć od strony technicznej.  

int number_of_points = point_s.size();
        for (int i = 0; i < number_of_points - 2; i++)
            {
                for (int j = i + 2; j < number_of_points; j++)
                {
                    // obliczanie kosztu zmiany sasiadow
                    double change =
                    calculate_cost(point_s[i].ordinal_number, point_s[i].x_cordinate, point_s[i].y_cordinate, point_s[j].ordinal_number, point_s[j].x_cordinate, point_s[j].y_cordinate) +
                    calculate_cost(point_s[i+1].ordinal_number, point_s[i+1].x_cordinate, point_s[i+1].y_cordinate, point_s[j+1].ordinal_number, point_s[j+1].x_cordinate, point_s[j+1].y_cordinate) -
                    calculate_cost(point_s[i].ordinal_number, point_s[i].x_cordinate, point_s[i].y_cordinate, point_s[i+1].ordinal_number, point_s[i+1].x_cordinate, point_s[i+1].y_cordinate) -
                    calculate_cost(point_s[j].ordinal_number, point_s[j].x_cordinate, point_s[j].y_cordinate, point_s[j+1].ordinal_number, point_s[j+1].x_cordinate, point_s[j+1].y_cordinate);
}

Napisałem coś takiego i dalej  nie wiem jak to ma działać, żeby było dobrze. Funkcja która tu jest to po prostu obliczanie odległości z pkt A do B. 
Proszę o jakieś objaśnienie lub naprowadzenie jak to powinno wyglądać.

Z góry dziękuję i pozdrawiam ! :)  

komentarz 10 maja 2019 przez k222 Nałogowiec (30,150 p.)

Rozwiązania ci nie podam, bo długo by pisać, ale coś co cie może nakierować, to poczytaj o metodzie simulated annealing

Jest to probabilistyczna metoda szukania najlepszego rozwiązania problemu - brzmi może strasznie, ale jest ona bardzo prosta - po prostu masz strukturę z pewnym rozwiązaniem, taką jak w pkt. 2, zmieniasz jeden element, jeżeli poprawiło to rozwiązanie to zapisujesz zmianę, a jeżeli nie to czasem zapisujesz a czasem nie.

Jest to metoda która nadaje się idealnie do problemu komiwojażera i w sumie twoje wymagania (w sumie na połowie stron ją tłumaczących jest jakiś gif jak ten właśnie problem jest nią rozwiązywany), a jednocześnie jest bardzo prosta. Kod w C++ może już troszkę straszyć, więc najpierw o niej poczytaj i zrozum jak działa, a potem powinieneś dać radę.

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 412 wizyt
pytanie zadane 9 czerwca 2019 w C i C++ przez dodo070 Nowicjusz (140 p.)
0 głosów
1 odpowiedź 234 wizyt
0 głosów
1 odpowiedź 381 wizyt
pytanie zadane 19 lipca 2021 w Algorytmy przez wojtek_suchy Mądrala (6,880 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...