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

Zadanie z OI - Przekroczenie limitu pamieci

Object Storage Arubacloud
0 głosów
238 wizyt
pytanie zadane 17 stycznia 2023 w C i C++ przez polandonion Mądrala (7,040 p.)
edycja 17 stycznia 2023 przez polandonion

Witam, Dzisiaj zabrałem się za zadanie Grzbiety i doliny. Po jakimś czasie główkowania i implementacji wysłałem swoje rozwiązanie. Ku mojemu zdziwieniu program przekroczył limit pamięci.

kod: https://ideone.com/fJl9Tx

Próbowałem już pozbyć się tablic row[] oraz col[] i do pętli tworzącej graf wstawić to samo co w pętli nadpisującej wartości row[] oraz col[] (tej, w której wczytuję arr[]). Niestety pozbycie się ok. 8MB dalej nie pomaga. Ma ktoś pomysł gdzie program zżera aż tyle pamięci?

komentarz 17 stycznia 2023 przez adrian17 Ekspert (344,860 p.)
(uwaga na boku: iterację się robi od 0 do <N, a nie od 1 do <=N.)

1 odpowiedź

+1 głos
odpowiedź 17 stycznia 2023 przez adrian17 Ekspert (344,860 p.)
wybrane 17 stycznia 2023 przez polandonion
 
Najlepsza

Ma ktoś pomysł gdzie program zżera aż tyle pamięci?

No, w tym że masz z góry zadeklarowane tablice milionów elementów, w tym milion vectorów. Takich tablic powinno być 0, nic nie powinno być tak deklarowane z góry globalnie.

Nie rozumiem zbytnio po co większość tych tablic jest - `row` i `col` są niepotrzebne, bo zawsze wiesz w którym wierszu jesteś, nie musisz tego przechowywać. Tak samo milion vectorów `v` (z których prawie każdy przechowuje po 8 elementów - co samo z siebie od razu sięga limitu, bo 4b*8*milion==32MB) też są kompletnie niepotrzebne; to nie jest jakiś losowy złożony graf którego strukturę trzeba zapisać, to jest zwykła siatka 2d - nie trzeba zapamiętywać że obok punktu (100, 100) jest punkt (100, 101), bo to jest z góry wiadome.

komentarz 17 stycznia 2023 przez adrian17 Ekspert (344,860 p.)
Pierwszy element tablicy to tab[0]. Wszystko ogólnie jest indeksowane od 0. Jak jedziesz od 1 to teraz wszędzie musisz ostrożnie żonglować z +1/-1 (jak teraz sam robisz np w #define row) i jest ryzyko że czasem przypadkiem zgubisz pierwszy element tablicy/vectora (jak chyba teraz robisz) albo wyjdziesz poza tablicę.
komentarz 17 stycznia 2023 przez polandonion Mądrala (7,040 p.)
nie muszę, bo wektor arr jest zadeklarowany z jakimś śmieciem na początku, więc mogę już spokojnie od jedynki lecieć
1
komentarz 17 stycznia 2023 przez adrian17 Ekspert (344,860 p.)
No super, to jeszcze jedną rzecz specjalnie kombinujesz tylko po to żeby nie indeksować od 0 jak reszta świata :P To to jest tylko jeszcze jedna komplikacja którą by można wyrzucić.
komentarz 17 stycznia 2023 przez polandonion Mądrala (7,040 p.)
przeniesione 17 stycznia 2023 przez polandonion
wiesz co, zrobiłem jeszcze raz, tym razem bez tych niepotrzebnych wektorów, map, itd, ale zamiast 70 daje mi 90 i ten sam błąd (przekroczenie pamięci. Tym razem tylko jeden test uległ temu błędowi, a nie 3 jak wcześniej).

Tutaj kod: https://ideone.com/GYq0N3
komentarz 18 stycznia 2023 przez adrian17 Ekspert (344,860 p.)
Nie wiem jak to się ma do "przekroczenia pamięci", ale ogólnie DFS jest tutaj słabym wyborem algorytmu. Sprawdź co się stanie jak dasz mu na wejście płaską powierzchnię 1000x1000.

Podobne pytania

0 głosów
1 odpowiedź 120 wizyt
0 głosów
3 odpowiedzi 316 wizyt
pytanie zadane 27 lutego 2023 w C i C++ przez diedassel Użytkownik (570 p.)
0 głosów
1 odpowiedź 189 wizyt
pytanie zadane 19 maja 2023 w C i C++ przez Dani Obywatel (1,450 p.)

92,568 zapytań

141,420 odpowiedzi

319,622 komentarzy

61,954 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!

...