Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Obiekty - Problem Optymalizacyjny

Ostatnio zmodyfikowano 2018-05-31 18:57
Autor Wiadomość
garlonicon
» 2018-05-28 23:08:37
Niech się wypowie ktoś bardziej doświadczony.
Przecież już padła odpowiedź "Eksperta C++". Wspomniany błąd nie został w żaden sposób poprawiony, podobnie jak algorytm, który nadal ma złożoność wykładniczą (czyli tragiczną, gdy n=1000, nie mówiąc o tym, że
int
 nie ma tylu bitów i to nie zadziała dla takich danych). Może lepiej podaj treść zadania.

Tablice Haszujące, Open Addressing
To niczego nie zmieni. Nie przy takiej złożoności algorytmu, nie przy tylu iteracjach. A nawet to może pogorszyć sytuację, bo takie tablice oznaczają zwykle przydzielenie większego obszaru pamięci i wypełnienie go poprzez używanie "haszowanych" wartości jako indeksów. Co do adresowania, to dotyczy sposobów postępowania w przypadku kolizji. Ale w czym to miałoby pomóc, gdy algorytm zakłada wykonanie 21000 iteracji?

I może jak jest to takie obciążenie dla pamięci warto gdzieś co jakiś czas zapisać to do jakiegoś pliku txt czy bazy danych.
Jak wyżej. Nie przy tylu iteracjach. Poza tym, co dokładnie miałoby być zapisane do bazy/pliku? I jak to miałoby cokolwiek przyspieszyć, gdy algorytm zakłada sekwencyjne wykonywanie poszczególnych obliczeń?

Co do rozwiązania, to raczej skupiłbym się na znalezieniu lepszego algorytmu i dokładniejszej analizie problemu niż na próbie naprawienia tego kodu.
P-171296
jankowalski25
» 2018-05-29 00:04:21
To mi wygląda na próbę implementacji problemu plecakowego. Widzę w użyciu kilka algorytmów, z tego by wynikało, że chcesz je porównać. Jeśli tak, to przy brute force lepiej oszacować, ile czasu mogłoby to zająć niż rzeczywiście próbować to wykonać i zmierzyć czas (zwłaszcza dla większych danych, przy kilkunastu elementach jeszcze można to zrobić, przy kilkuset już się raczej nie doczekasz).
P-171297
CPnHorror
Temat założony przez niniejszego użytkownika
» 2018-05-31 15:40:36
dokładnie, chodzi o problem plecakowy

treść zadania jest następująca:

Przebieg ćwiczenia:

1. W porcie stoi statek o ładowności b ton gotowy do załadunku. Statek można załadować różnymi kontenerami, których liczba jest równa n. Kontener i-ty posiada swój ciężar a(i) oraz wartość c(i).
Podaj optymalny załadunek na statek, tzn. które kontenery zostaną załadowane, w taki sposób, aby wartość ładunku była maksymalna.

2. Problem ten rozwiąż za pomocą algorytmu programowania dynamicznego.
Efektywność uzyskanego rozwiązania porównaj z algorytmem zachłannym, mierząc:

i) czas uzyskania rozwiązania dla obu metod, dla tych samych instancji problemu.
ii) jakość rozwiazań generowanych przez algorytm zachłanny (należy tego dokonać obliczając błąd względny dla każdej z instancji wg wzoru (D_dyn - D_zach) / D_dyn).

Podaj wykresy porównawcze dla obu metod przy:
a) stałej ładowności statku, zmiennej liczbie kontenerów,
b) zmiennej ładowności, liczba kontenerów pozostaje stała.

3. Sformułuj wnioski dotyczące efektywności zastosowanych metod oraz ich złożoności obliczeniowej. Podaj przynależność badanego problemu do określonej klasy problemów ze względu na ich złożoność obliczeniową.

aby móc porównać metodę dynamiczną oraz zachłanną powinienem mieć wynik optymalny a także czas obliczania, a taki mogę uzyskać tylko przy pomocy BruteForce'a. niestety mój algorytm generowania kombinacji jest nieoptymalny a wręcz tragiczny. co do obiektów myślę, że DELETE wiele nie zmieni gdyż nieużywany obiekt powinien tracić "ważność" a pamięć powinna być traktowana jako śmieci, czyli miejsce nie zagospodarowane (chyba, że pomyliłem z Delphi).
P-171311
zeszyt
» 2018-05-31 18:23:44
Tak jak wcześniej było napisane: musisz oszacować ręcznie (kartka, długopis i policzyć) złożoność danego algorytmu. W przypadku BruteForce bedzie to tetha(2^1000) w najgorszym przypadku (tzn dla 1000) = 2^1000 + C. C = stała liczba operacji jakie muszą zostać wykonane dla poszczególnych instrukcji kodu w pętli for (sprawdzenie warunku, alokacja pamięci, wykonywanie operacji dodawania itp), a konkretnie suma kosztu tych operacji. W większości przypadków wystarczy oszacowanie asymptotyczne (czyli sam koszt pętli for).
Tutaj masz coś co może trochę rozjaśnić sytuacje:
[link http://th-www.if.uj.edu.pl/~erichter/dydaktyka/Dydaktyka2013/TPI-2013/TPI-wyklad-3-2013-newTempl.pdf\]
P-171312
CPnHorror
Temat założony przez niniejszego użytkownika
» 2018-05-31 18:57:38
dobrze więc.
myślałem, że uda mi się dorzucić jakoś ten BruteForce przynajmniej działający do kilku rzędu wielkości, jednak to niemożliwe.

dziękuję za wszelkie rady - temat zamknięty.
P-171313
1 « 2 »
Poprzednia strona Strona 2 z 2