Aktywne Wpisy
kinkykylie +680
Od razu człowiek czuje się bezpieczniejszy, widząc takie łapanki na kierowców, którzy przy pustej drodze nie zatrzymali się do zera, tylko zwalniali do 5 km/h na znaku stop. Przeklęci kryminaliści ( ͡° ͜ʖ ͡°)
#policja #polskiedrogi #polska #bekazpodludzi
#policja #polskiedrogi #polska #bekazpodludzi
WielkiNos +95
Juleczki z twittera twierdzą, że oświadczyny ze strony mężczyzny to uprzedmiatawianie kobiet.
#bekaztwitterowychjulek #zwiazki #zareczyny #pieklomezczyzn #logikaniebieskichpaskow
#bekaztwitterowychjulek #zwiazki #zareczyny #pieklomezczyzn #logikaniebieskichpaskow
array = [
[60, 95],
[15, 40],
[55, 62],
[92, 100],
[17, 30],
[2, 20]
]
Zawartość tej tablicy można zobrazować tak, jak na załączonym obrazku.
Zadaniem jest znalezieniem takie przedziału (bądź punktu) w którym ilość zadeklarowanych w tablicy przedziałów jest największa.
Dla podanego przykładu będzie to przedział [17, 20], ilość 3.
Chodzi mi o znalezienie jak najoptymalniejszego rozwiązania.
Narazie przychodzi mi do głowy jedynie najprostsze rozwiązanie: krokowe sprawdzanie w całym zakresie ilości przedziałów i porównywanie z maxem. Ale takie rozwiązanie jest mało wydajne (delikatnie mówiąc).
Nie potrzebuję implementacji w jakimś konkretnym języku, tylko sposób postępowania. Ktoś ma jakiś pomysł w ten niedzielny poranek?:)
#algorytmy #programowanie #zagadkiprogramistyczne
Komentarz usunięty przez autora
Całość zależy też od stosunku wielkości całego przedziąłu liczb do ilości przedziałów, liniowość można przyjąć jak to nie będzie jakaś ekstremalnei duża liczba przedziałów
I ogólnie przeszukaj google - nested intervals - bo to zbliżony problem.
Myslę, że nested interval a ten prolem mogą być jednak troche daleko od siebie, szczególnie jak się znajdzie jakieś supersprytne rozwiązanie to może być ciężko je rowinąć do "zachodzenia" na siebie zamiast zawierania.
@mk4s: Nie ma czegoś takiego jak "jak najoptymalniejsze" rozwiązanie. Jak coś jest optymalne, to nie da się tego poprawić.
Niektórzy są na to uczuleni, więc warto zapamiętać :)
http://ideone.com/NY72fi
W skrócie jedziesz od lewej do prawej i obsługujesz zdarzenia, którymi są: natrafienie na początek przedziału, natrafienie na koniec przedziału.
Najpierw trzeba więc posortować początki i końce tych przedziałów(@Rev wrzucił do mapy). To znaczy, że cały algorytm będzie działał w O(nlogn).