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

Optymalizacja algorytmu, który zeruje

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
422 wizyt
pytanie zadane 12 stycznia 2018 w C i C++ przez marcin_kub Obywatel (1,420 p.)
edycja 12 stycznia 2018 przez marcin_kub

Cześć Wam

Potrzebuję pomocy przy optymalizacji pewnego algorytmu. Polega on na tym, że mam tablicę z dużą ilością elementów i odczytuję z niej 3 liczby, co każdorazowy obieg pętli. I muszę przepisać te liczby do nowej tablicy, tylko zamiast wybranych przez użytkownika numerów (odpowiedniki liczb) [1 2 3] ma być wpisane 0.

Np.:

odczytuję po 3 liczby z tablicy [20 30 40 10 20 30] i użytkownik chce żeby nowa tablica wyglądała tak: [0 30 40 0 20 30], albo [40 0 30 10 0 30] czy [0 30 0 0 20 0].

Jest 8 opcji:

  • zeruje pierwszą liczbę
  • zeruje drugą liczbę
  • zeruje trzecią liczbę
  • zeruje pierwszą i drugą
  • zeruje pierwszą i trzecią
  • zeruje drugą i trzecią
  • zeruje wszystkie
  • nie zeruje nic (zostawia jak jest)

Możliwości algorytmu to:

- można wpisać dowolną liczbę zer

- można przesuwać się po tablicy o wartości 1,2,3, nie można się przesunąć o zero miejsc

- można przepisać dowolną liczbę liczb z tablicy pierwszej

Chciałem to wszystko umieścić w jednej pętli, najlepiej for lub dwóch.

Do czego mi jest to potrzebne?

Potrzebne mi jest to do możliwości wczytywania większego rozmiaru plików *.bmp, bo na razie wygląda to tak, że wczytuję do inta rozmiar całego pliku w bajtach i próbuję go przepisać do nowego pliku *.bmp... następuje przeładowanie bufora dla plików powyżej kilkudziesięciu MB.

Kod

komentarz 12 stycznia 2018 przez hhh Gaduła (4,110 p.)
Może zamiast inta zastosuj pojemniejszy typ zmiennej, np.: unsigned long long albo long double?
komentarz 12 stycznia 2018 przez j23 Mędrzec (195,260 p.)

następuje przeładowanie bufora dla plików powyżej kilkudziesięciu MB.

Nic dziwnego. Ładujesz całą bitmapę do pamięci stosu, który ma ograniczoną wielkość do paru MB:

int bajty_obrazka = (rozmiar - poczatek);

char obrazek[bajty_obrazka]; // <--- tak nie można w C++

Zresztą wydaje mi się, że już ktoś Ci pisał w innym wątku, na czym polega błąd. Tak czy siak, prawidłowo powinno to wyglądać tak:

std::vector<uint8_t> obrazek(rozmiar - poczatek);

plik_bmp.read(reinterpret_cast<char*>(&obrazek.front()), obrazek.size());

 

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

Podobne pytania

0 głosów
1 odpowiedź 393 wizyt
pytanie zadane 14 lutego 2018 w C i C++ przez Kurczak Użytkownik (940 p.)
0 głosów
1 odpowiedź 907 wizyt
pytanie zadane 2 grudnia 2017 w Python przez nastrand Nowicjusz (150 p.)
+1 głos
1 odpowiedź 409 wizyt

93,173 zapytań

142,184 odpowiedzi

321,967 komentarzy

62,499 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 1149p. - dia-Chann
  2. 1131p. - Łukasz Piwowar
  3. 1124p. - CC PL
  4. 1118p. - Łukasz Eckert
  5. 1097p. - Michal Drewniak
  6. 1081p. - Marcin Putra
  7. 1076p. - rucin93
  8. 1054p. - Adrian Wieprzkowicz
  9. 1047p. - Piotr Aleksandrowicz
  10. 1000p. - ssynowiec
  11. 967p. - rafalszastok
  12. 931p. - Michał Telesz
  13. 886p. - Dominik Łempicki (kapitan)
  14. 842p. - Dawid128
  15. 819p. - Mariusz Fornal
Szczegóły i pełne wyniki

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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...