Szukam algorytmu do obsługi następującego problemu, który nazywam (na razie) algorytmem „złego jabłka”.
Problem
- Mam N procesów działających w M piaskownicach, gdzie N >> M.
- Niepraktyczne jest nadawanie każdemu procesowi własnej piaskownicy.
- Co najmniej jeden z tych procesów jest źle zachowywany i sprowadza cały obszar izolowany, tym samym zabijając wszystkie pozostałe procesy w tym samym obszarze izolowanym.
Jeśli byłby to jeden źle zachowany proces, mógłbym użyć prostej bisekcji, aby umieścić połowę procesów w jednej piaskownicy, a połowę w innej piaskownicy, dopóki nie znajdę złego.
Pytanie
Jeśli źle zachowuje się więcej niż jeden proces - w tym możliwość, że wszystkie są źle zachowane - czy ten naiwny algorytm „działa”? Czy na pewno działa w rozsądnych granicach?
Uproszczenia
Dla celów argumentu załóżmy, że zły proces natychmiast sprowadza piaskownicę, a dobry proces nigdy tego nie robi.
algorithms
Roger Lipscombe
źródło
źródło
Odpowiedzi:
Jeśli znalazłeś jedno złe jabłko, możesz zastosować algorytm:
Podobnie, jeśli znajdujesz jedno „dobre” jabłko, wówczas stosuje się ten sam algorytm, ale raczej znajdujesz dobrą grupę.
Ten algorytm ma współczynnik wydajności O (log_M (N)), ale zależy to od faktu, że jest tylko jedno złe jabłko.
Jeśli nie wiesz, ile jest dobrych / złych jabłek, możesz użyć następującego algorytmu:
Jest to najgorszy scenariusz, ale działa on w
O(N/M)
czasie (lub wO(N)
zależności od tego, czy rozważasz pojedyncze przejście jako pojedynczy test czy jako zbiór testów przeprowadzanych równolegle). Biorąc wszystko pod uwagę, nie jest to wcale złe podejście.Mogą istnieć algorytmy, które działają lepiej niż to, ale wymaga to znajomości liczby złych jabłek / dobrych jabłek w partii. Nie znając tego czynnika, chociaż nie mogę tego udowodnić, chciałbym się założyć, że nie da się lepiej niż ten drugi algorytm wymieniony powyżej.
Mam nadzieję, że to pomaga!
Edycja : Z praktycznego punktu widzenia rozumiem, że niektóre z tych operacji nie są łatwe do wykonania. To prawda, jednak niefortunną rzeczywistością jest to, że nie można dokładnie określić złego jabłka, z którego procesy działały na piaskownicy, która działała w tym momencie, bez konieczności przynajmniej aktywacji lub dezaktywacji procesów. Jeśli pytanie dotyczy algorytmu, myślę, że na to odpowiedziałem. Jeśli pytanie dotyczy tego, jak poradzić sobie z taką sytuacją, być może pytanie to byłoby lepiej dostosowane do superużytkownika SE.
źródło