Mircy. Od jakiegoś czasu ciągnę pewien projekt.
Finalnie będzie tak, że do przeszukania oczywiście jak najszybciej, ale w okolicach 1/2, 1/3s będzie kilkanaście tysięcy rekordów z dokładnością 1.5.
Narazie siedzi szukanie binarne, ale boję się, że dla większych ilości danych to po prostu nie wyrobi w takim czasie.
I teraz pytanie:
Jak ma się wydajność SQL'a w przeszukiwaniu?
Jeżeli jest to jakoś opłacalne to implementowałbym w projekcie pisanym w C++.
  • 7
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

zastanawiam się czy jest wystarczająco szybki.

@Wyrewolwerowanyrewolwer: Najpierw profilowanie, potem optymalizacja. Dla 13 tysięcy rekordów możesz wykorzystać nawet przeszukiwanie O(n) i współczesny procesor da radę.
W JS (znacząco mniej wydajnym niż C++) policzenie odległości losowo wybranego punktu do 20 tysięcy innych losowo wybranych punktów zajmuje na moim komputerze 60ms.
Jeśli martwisz się o problemy z wydajnością przy większej ilości danych - SPRAWDŹ. Wprowadź jakieś losowe dane i sprawdź ile zajmuje
  • Odpowiedz
Znacie jakąś literaturę dotyczącą algorytmiki? Także jest mi potrzebna książka na temat teorii grafów, algorytmów. Mówię tak, bo akurat algorytmika mnie ciekawi, a nie znam jakiś dobrych książek, coby wszystko wyjaśniały.

#programowanie #algorytmika #kiciochpyta
  • 21
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@japer: warto jeszcze dodać, że wbrew temu co może sugerować nazwa, nie jest to najszybszy algorytm sortujący :)

@moon5: jeśli Cię to interesuje to poczytaj sobie jakieś książki na temat algorytmiki, taką chyba najbardziej klasyczną pozycją są "Algorytmy i struktury danych" Cormena (aczkolwiek to straszna cegła i raczej nie jest prosta). Ostatnio ktoś mi jeszcze polecał taką książkę, ale jeszcze jej nie czytałam, więc nie wiem co w
  • Odpowiedz
  • 1
@megan_: złożoność sprowadza się do kwadratu w najgorszym wypadku, zapomniałem dodać. Algorytm można zoptymalizować poprzez medianę trzech, która zmniejsza ryzyko tempa pesymistycznego.
  • Odpowiedz
#programowanie #algorytmika #matematyka

Mam dużą liczbę (np. 12 cyfrową albo i więcej). Nie mieści się w zakresie int.

Mógłbym niby skorzystać z long, ale odpada, bo liczba mogłaby być trochę dłuższa i się nie zmieści. Po za tym to co chcę policzyć, liczy się bardzo długo. Tak samo BigDecimal z Javy odpada.

Dlatego
  • 12
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@mk321: jakie język? Ogólnie to prawidłowe rozwiązanie to BigDecimal, lub odpowiednik z danego języka programowania. W c/c++ są biblioteki bignum. W Pythonie/clojure masz natywne wsparcie dla dowolnie dużych liczb całkowitych.

Możesz oczywiście napisać tego bigdecimala samemu, tylko po co, skoro są biblioteki.
  • Odpowiedz
@mk321: rozbijasz na czynniki pierwsze, wybierasz największe (wszystkie inne dzielniki są iloczynem uprzednio wymienionych ⟶ nie są liczbami pierwszymi). Koniec problemu.
  • Odpowiedz
wie ktoś może, jak zrealizować taką strukturę danych (jakieś drzewo), na którym mozna by wykonywać operacje:

* zwiększam obciążenie wszystkich elementów przedziału (a, b) o 1

* zwracam liczbę elementów przedziału (a, b) większych od jakiegoś k (z góry ustalonego)

Operacje
  • 4
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@kuhar: to właśnie jest z OIa, tyle że zeszłorocznego (i nie ma jeszcze niebieskiej książeczki z rozwiązaniem). Dzięki za podpowiedź, może coś wykminię
  • Odpowiedz
Mam do napisania algorytm:

Dane są trzy operację, A dodaje do liczby 3, B podwaja liczbę, C zamienia miejscami dwie ostatnie cyfry. Napisz program, który sprawdzi czy w maksymalnie n krokach da się operacjami A, B, C doprowadzić k do liczby pierwszej i wypisze kolejność. Użyj rekurencji:

Załóżmy że mamy zdefiniowaną funkcję bool czypierwsza(int n) która zwraca czy liczba jest pierwsza.

int
  • 12
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@1608:

Z wartością false. Wszystko co działo się w wersji którą przedstawiłeś na początku traktuje jako główne zadanie funkcji. Ja to główne zadanie poszerzyłem o zapisywanie do listy. Z kolei wewnątrz case'ów potrzebowałem użyć naszej funkcji do sprawdzenia czy idziemy dobrą drogą ( i tylko w przypadku dobrej zapisywać) ale jednocześnie nic nie zapisywać by uniknąć bałaganu w liście.
  • Odpowiedz