Mirki, potrzebuję pomocy w wymyśleniu algorytmu. Trzy dni nad tym myślę i do niczego sensownego nie doszedłem. Problem jest dość skomplikowany, nie chcę go przedstawiać abstrakcyjnie więc wymyśliłem taki przykład, który pozwala bez problemu zrozumieć o co chodzi.

Dany jest graf spójny, który reprezentuje jakiś duży obszar. Każdy węzeł grafu odpowiada miejscowości, natomiast krawędź między dwoma węzłami oznacza, że miejscowości są bezpośrednio połączone drogą.

W każdej miejscowości może stać szpital, szkoła albo
@Onoki: @prusi: Dla samego szpitala ten problem nazywa się problemem minimalnego zbioru dominującego. Już jako taki jest problemem NP-trudnym. Ty chcesz znaleźć dwa rozłączne zbiory dominujące, których suma elementów jest jak najmniejsza, czyli coś jeszcze trudniejszego :). Możesz poczytać o zbiorach dominujących i algorytmach, które je szukają. Dzięki temu wymyślisz coś co rozwiąże twój problem, ale na pewno nie w czasie wielomianowym. Nie ma się jednak co załamywać, bo może
w sumie to #programowanie #onp #algorytmy

W sumie prędzej czy później musiało to się zdarzyć. Jak odróżnić (w możliwie prosty ale skuteczny sposób) '-' od '-'. Chodzi mi o odróżnienie unarnego minusa (negacji) od odejmowania. A dokładnie chodzi mi o to, czy są na to jakieś sprawdzone metody, do których widocznie nie dotarłem czy trzeba samodzielnie się z tym uporać. Może macie jakieś wskazówki? W sumie gdy się z tym uporam będę
Hej, specjaliści od ekonomii i statystyki. Myślę, że to dość podstawowe dla Was pytanie. Mam zestaw danych historycznych, jak wyliczyć przyszłą tendencję? Przykładowo: ktoś wszedł na stronę 150 razy dwa tygodnie temu, 100 razy w zeszłym tygodniu, 80 razy w tym tygodniu, czy jest jakieś proste do zaimplementowania rozwiązanie mówiące ile wejść będzie w przyszłym tygodniu i czy tendenja jest spadkowa lub wzrostowa? (PS. funkcje liniową z dwóch ostatnich danych sam sobie
@uirapuru: rzuciłem tak tym wygładzaniem, bo z tego co wiem, nadaje się do badania tendencji i tyle mi wiadomo ;p - dogłębnie zajmowałem się innymi metodami, ale one są trochę zbyt złożone. W sumie, to nie wiem, czy ta jest prostsza, ale może gdzieś istnieje gotowy kod ('exponential smoothing').

Jak Ci specjalnie nie zależy na dokładności, to może po prostu daj linię trendu po najmniejszych kwadratach... zwłaszcza, jeśli nie zamierzasz mieć
@uirapuru: opisujesz chyba klasyczną MNK. Ale stary naprawdę nie wiem po co ci to, każda metoda, mniej czy bardziej złożona, stanowi ekstrapolację już obecnego trendu i takie prognozy nie maja kolosalnej wartości, chyba ze jestes quantem który na tym zarabia
Potrzebuję przenieść całkiem spory arkusz Excela (ok 20tyś wierszy x 20 kolumn) do MySQL. Zaprzęgnąłem do tego #php z biblioteką PHPExcel i o ile odczyt tego trwa parę do parunastu sekund o tyle późniejsze zapytanie PDO zarzyna mi pamięć w kompie (2GB). Oczywiście mam odblokowane w php.ini użycie pamięci, bo bez tego to 128MB siada niemal od razu. Odpada przenoszenie Excela bezpośrednio do MySQL, bo muszę porównywać rekordy i robić ich ew
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 można wykonywac na zmianę. Złożoność czasowa O(log N) oczywiście.

Ogarniam drzewa przedziałowe (+, +), (+, max) (zwane też licznikowymi i drzewami maksimów), ale do tego nie mam pojęcia jak się zabrać.
Zna ktoś może jakiś dowód, bądź dobre wytłumaczenie dlaczego największą potęgą dwójki dzieląca x jest: ((x ^ (x-1)) + 1) / 2 lub też x & (-x) ?

Na przykładach działa oczywiście, ale nie czaję tego do końca, jest tego jakieś uzasadnienie, czy po prostu ktoś na to wpadł przypadkowo i się okazało że tak jest?

#programowanie #informatyka #algorytmy
@piternet:

x & (-x)
bo jak tworzysz liczbe ujemna, to przepisujesz od prawej wszystkie zera do pierwszej jedynki wlacznie, a wiec z 'oryginalnych' bitow zachowa sie po AND wlasnie tylko ta jedynka, a reszta to beda zera

a ta jedynka, to bedzie pierwsza potega dwojki, z ktorej sklada sie liczba x

aha i pytanie dlaczego: bo kazda kolejna potega dwojki bedzie sie dzielila przez te znaleziona jedynke, a gdyby obrac jakas
Siema, potrzebuję pilnie algorytmu. Piszę program, którego celem jest poprawianie źle rozdzielonych/złączonych słów.

Problem wygląda następująco - mam powiedzmy zdanie:

"Zosia ma kota"

Niestety OCR rypnął się i wyciągnął:

"Zo siama kota"

Najpierw dzielę ten ciąg na sylaby, więc mam:

"Zo", "sia", "ma", "ko", "ta"

I teraz pytanie: Jak napisać algorytm, który będzie tworzył różne kombinacje sylab w zdaniu, a więc będzie sklejał na wszystkie sposoby sylaby tworząc różne wyrazy?

Później tylko
@Onoki: Wykorzystuję właśnie taki prymitywny algorytm, ale lepszym pomysłem jest jednak dzielenie na sylaby, bo sprawdzenie słowa po literce w cholernie dużym słowniku trwa dość długo. A co do szukania w słowniku to mam zamiar podzielić go na mniejsze, odpowiadajace literom alfabetu.
@pavlucco: A jakbyś tak wczytał cały słownik do aplikacji i rozpiął go na drzewie binarnym? Zajmowałoby to sporo pamięci (bez znaczenia w dzisiejszych czasach), ale wyszukiwanie byłoby bardzo szybkie.

Nie wiem w jakim języku piszesz, ale w C++ i w Javie są mapy i zbiory oparte na drzewach czerwono-czarnych. Idealne do takiego słownika.
Mam do napisania program o następującej treści:

"Dany jest zbiór n liczb naturalnych umieszczony w tablicy typu int tab[N]

Proszę napisać funkcję, która zwraca informację, czy jest możliwy podział zbioru n liczb na trzy

podzbiory, tak aby w każdym podzbiorze, łączna liczba jedynek użyta do zapisu elementów tego

podzbioru w systemie dwójkowym była jednakowa. Na przykład:

{2,3,5,7,15} -> true, bo podzbiory {2,7} {3,5} {15} wymagają użycia 4 jedynek,

{5,7,15} -> false, podział
#algorytmy #programowanie #studbaza #grafy #kiciochpyta #pytanie #pytaniedoeksperta #tagujetogowno

Za pomocą algorytmu Dijkstry da się wyznaczyć najkrótszą ścieżkę między dwoma wierzchołkami grafu. Pytanie czy jest jakiś mądry sposób na znalezienie kolejnej najkrótszej ścieżki między tymi dwoma wierzchołkami - mamy skończoną ilość ścieżek między dwoma wierzchołkami posortowaną malejąco wg kosztu przejścia i ostatnia jest najkrótsza, to ja potrzebuję przedostatniej. Mam nadzieję, że mnie rozumiecie, bo trochę I cannot into polski ( ͡° ͜
@franczi: Rozwiązanie mam troszkę toporne, ale może Ci pomoże:

Druga najkrótsza ścieżka musi różnić się od najkrótszej ścieżki co najmniej jednym odcinkiem (między dwoma wierzchołkami grafu). Skoro tak, to po wyznaczeniu najkrótszej ścieżki weź tyle grafów ile najkrótsza ma odcinków, z każdego grafu usuń jeden, inny, należący do najkrótszej ścieżki odcinek, dla każdego znajdź najkrótszą ścieżkę za pomocą algorytmu Dijkstry i wybierz najkrótszą z nich. I to będzie ta druga najkrótsza.
Jadąc dzisiaj rano tramwajem na #studbaza zauważyłem plakat z dużym napisem "FFT FOR FREE". Zacząłem rozkminiać po co komu darmowa transformacja Fouriera, ale w porę zauważyłem że pierwsze słowo tego napisu to "FIT", tylko napisane jakąś dziwną czcionką, a całość jest reklamą jakiegoś fitness klubu czy czegoś.

Przy okazji przypomniała mi się ciekawostka opowiedziana przez jednego z wykładowców, która brzmi mniej więcej tak: (można się czepiać bo mało ściśle jest to ujęte,
Dla mediany z 3 wartości nie da się nic wykombinować. Musisz zrobić zawsze 2-3 porównania (w tym co ty napisałeś jest w pesymistycznym wypadku 6 porównań).

if(a
if(b
return b;

else {

if(a
return c;

else

return a;

}

}

else {

if(c
return b;

else {

if(c
return c;

else

return a;

}

}

Zaoszczędzić coś na porównaniach możesz dopiero jak będzie przynajmniej 5 elementów (alg. magicznych piątek).
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 a będzie odpowiadało za wykonanie jednej z tych operacji.

bool
@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.