To może być śmieszne pytanie, ale czy można mieć problem, który staje się łatwiejszy w miarę wzrostu wielkości nakładów? Wątpię, żeby jakieś praktyczne problemy były takie, ale może uda nam się wynaleźć zdegenerowany problem, który ma tę właściwość. Na przykład być może zaczyna się „rozwiązywać”, gdy robi się większy lub zachowuje się w inny dziwny sposób.
algorithms
asymptotics
dsaxton
źródło
źródło
Odpowiedzi:
Nie, nie jest to możliwe: przynajmniej nie w sensie asymptotycznym, gdzie wymagasz, aby problem stawał się coraz łatwiejszy, na zawsze, jako .n→∞
Niech będzie najlepszym możliwym czasem działania dla rozwiązania takiego problemu, gdzie jest rozmiarem danych wejściowych. Zauważ, że czas działania jest liczbą instrukcji wykonanych przez algorytm, więc musi być liczbą całkowitą nieujemną. Innymi słowy, dla wszystkich . Teraz, jeśli weźmiemy pod uwagę funkcję , widzimy, że nie ma takiej funkcji, która ściśle monotonicznie spada. (Czymkolwiek jest , musi być skończone, powiedzmy ; ale ponieważ jest monotonicznie ściśle malejące, in T ( n ) ∈ N n T : N → N T ( 0 ) T ( 0 ) = c T T ( c ) ≤ 0 T ( c + 1 ) ≤ - 1 T ( n ) n 0 n ≥ n 0 T ( n )T(n) n T(n)∈N n T:N→N T(0) T(0)=c T T(c)≤0 T(c+1)≤−1 , co jest niemożliwe.) Z podobnych powodów nie ma funkcji, która asymptotycznie ściśle zmniejsza się: możemy podobnie udowodnić, że nie ma funkcji czasu działania gdzie istnieje tak że dla wszystkich , spada monotonicznie ściśle (każda taka funkcja musiałaby ostatecznie stać się negatywna).T(n) n0 n≥n0 T(n)
Tak więc taki problem nie może istnieć z tego prostego powodu, że czasy działania muszą być liczbami całkowitymi nieujemnymi.
Zauważ, że ta odpowiedź obejmuje tylko algorytmy deterministyczne (tj. Najgorszy czas działania). Nie wyklucza to możliwości zrandomizowanych algorytmów, których oczekiwany czas działania jest ściśle monotonicznie malejący, na zawsze. Nie wiem, czy taki algorytm może istnieć. Dziękuję Beni Chernivsky-Paskin za tę obserwację .
źródło
Chociaż nie jest to całkiem odpowiednia odpowiedź na twoje pytanie, algorytm wyszukiwania ciągów Boyera-Moore'a jest już blisko. Jak Robert Moore na swojej stronie internetowej o algorytmie mówi:
Innymi słowy, ogólnie mówiąc, algorytm szuka wystąpienia ciągu docelowego w ciągu źródłowym i ustalonego ciągu źródłowego, im dłuższy jest ciąg docelowy, tym szybciej działa algorytm.
źródło
Jest oczywiste, że z czysto matematycznego punktu widzenia, wyłącznie algorytmu CS, jest to niemożliwe. Ale w rzeczywistości istnieje kilka rzeczywistych przykładów zwiększania skali projektu, które nie są intuicyjne dla użytkowników końcowych.
Wskazówki : im dłuższe są Twoje wskazówki, tym czasem mogą być łatwiejsze. Na przykład, jeśli chcę, aby Mapy Google wskazywały mi drogę na zachód 3000 mil, mógłbym jechać na Zachodnie Wybrzeże - i otrzymywać instrukcje dotyczące jazdy po terenie. Ale gdybym chciał przejść 6000 mil na zachód, skończyłbym ze znacznie prostszymi instrukcjami: wsiąść do samolotu z Nowego Jorku do Hokkaido. Wyznaczenie trasy biegowej obejmującej ruch drogowy, drogi, pogodę itp. Jest raczej trudne algorytmicznie, ale nakazanie mi wsiadania do samolotu i wyszukiwania lotów w bazie danych jest stosunkowo znacznie prostsze. Wykres trudności ASCII w funkcji odległości:
Renderowanie : powiedz, że chcę renderować jedną twarz i rendering 1000 twarzy; dotyczy to reklamy billboardowej, więc oba końcowe zdjęcia muszą mieć wymiary 10000 na 5000 pikseli. Realistyczne renderowanie jednej twarzy byłoby trudne - przy rozdzielczości kilku tysięcy pikseli w poprzek trzeba użyć naprawdę potężnych maszyn - ale dla tłumu 1000 twarzy każda twarz musi mieć tylko dziesięć pikseli i może być łatwo sklonowana! Prawdopodobnie mógłbym renderować 1000 twarzy na moim laptopie, ale renderowanie realistycznej twarzy o rozdzielczości 10000 pikseli zajęłoby bardzo dużo czasu i potężne maszyny. Wykres trudności ASCII w porównaniu do renderowanych obiektów, pokazujący, jak trudność renderowania n obiektów na obraz o ustalonym rozmiarze szybko spada, ale powraca powoli:
Kontrola sprzętu : wiele rzeczy ze sprzętem staje się znacznie łatwiejszych. „Ruch silnika X 1 stopień” jest trudny i / lub niemożliwy, a ty musisz poradzić sobie z wszelkiego rodzaju rzeczami, z którymi nie musiałbyś się zmagać w przypadku „ruchu silnika X 322 stopni”.
Zadania krótkotrwałe: Powiedz, że chcesz, aby element X był włączony (przez bardzo krótki czas ) co sekundę. Zwiększając czas działania X, będziesz potrzebować mniej złożonego oprogramowania, a także sprzętu.
źródło
Są przypadki. Są to przypadki, w których kryteria sukcesu są funkcją danych, a nie próbują znaleźć jedną odpowiedź. Na przykład procesy statystyczne, których wyniki są wyrażane w przedziałach ufności, mogą stać się łatwiejsze.
Jednym szczególnym przypadkiem, o którym myślę, są problemy, które przechodzą od zachowań dyskretnych do zachowań ciągłych, takich jak przepływy płynów. Rozwiązanie małego problemu z pewnym błędem może wymagać modelowania wszystkich interakcji dyskretnych, co może wymagać superkomputera. Ciągłe zachowania często pozwalają na uproszczenia bez uzyskiwania wyników poza powiązanym błędem.
źródło
Pytanie jest interesujące i PRZYDATNE, ponieważ naszą filozofią w informatyce jest rozwiązywanie problemów, im więcej czytamy, tym trudniej. Ale w rzeczywistości NAJBARDZIEJ problemów przedstawionych w typowy sposób (trudny) można łatwo przedstawić w „łatwy” sposób; nawet znając odpowiedź DW (co jest błędne, biorąc pod uwagę, że łatwość nie oznacza szybszego, oznacza „mniej powolny”; więc nie musisz znajdować czasów negatywnych, nie możesz znaleźć czasu asymptotycznego).
Sztuka znalezienia jednego polega na umieszczeniu części rozwiązania, takiej jak podpowiedzi, jako wpisu i rozważeniu wprowadzenia problemu jako stałego parametru.
Przykład: Jaka jest najdłuższa droga samochodem między Londynem a Paryżem, unikając dwukrotnego odwiedzenia francuskiego i brytyjskiego miasta i nie odwiedzenia innego kraju? biorąc pod uwagę, musisz jechać do Birmingham przed Ashford, Orleanu przed Wersalem, La Rochelle przed Limoge itp.
Oczywiste jest, że ten problem z długimi wpisami będzie łatwiejszy niż z krótkimi.
Przykład użycia: Wyobraź sobie grę zarządzaną przez maszynę, a IA komputera musi ustalić, czy musi on zbadać więcej w grze, aby znaleźć więcej wskazówek, czy też, czy teraz jest czas, aby wydedukować najlepszą decyzję do podjęcia .
źródło
Rozważ program, który pobiera jako dane wejściowe to, co wiesz o haśle, a następnie próbuje je złamać. Myślę, że robi to, co chcesz. Na przykład:
Powinienem dodać, że jest to sztuczka, ponieważ taki problem jest odwrotny do wielkości wejściowej. Możesz pominąć jedną warstwę abstrakcji i powiedzieć, że rozmiar wejściowy jest duży dla braku danych wejściowych (sprawdź wszystkie symbole i długości słów) i mały, jeśli podasz prawidłowe hasło na początku.
Wszystko sprowadza się do tego, na ile pozwalasz na abstrakcję.
źródło
W rzeczywistości mam problem, który zmniejsza się wraz ze wzrostem danych. Jedna z moich aplikacji rejestruje atrybuty określonego produktu, na przykład ser. Atrybutami są na przykład CheeseType, marka, kraj, obszar, MilkType itp. Co miesiąc otrzymuję listę nowych serów, które pojawiły się na rynku w tym czasie, wraz z ich atrybutami. Teraz te atrybuty są wpisywane ręcznie przez grupę ludzi. Niektóre tworzą literówki lub po prostu nie znają wartości wszystkich atrybutów.
Podczas wyszukiwania w mojej bazie danych staram się przewidzieć na podstawie statystyk, jak smakuje ser, na podstawie tych atrybutów. Co się dzieje, to że dla każdego atrybutu otrzymuję zakres wartości; niektóre są ważne niektóre są nieprawidłowe. Wyeliminowanie lub poprawienie tych nieprawidłowych jest możliwe tylko wtedy, gdy mam wystarczającą ilość danych. Chodzi o różnicę między wartościami rzeczywistymi a hałasem, bez eliminowania rzadkich, ale ważnych wartości.
Jak możesz sobie wyobrazić, przy niskim poziomie głośności hałas jest zbyt ważny, aby wszystko naprawić. Jeśli masz 5 wystąpień Cheddar, 1 Brie, 1 Bri i 1 Chedar, jak mam powiedzieć, która jest poprawna, a która literówka? Przy większej głośności literówki mają tendencję do utrzymywania się na bardzo niskim poziomie, ale rzadkie wartości otrzymują kilka kluczowych przyrostów, co pozwala im uciec od hałasu (poparte doświadczeniem). W tym przypadku mogłem sobie wyobrazić na przykład 50000 Cheddar, 3000 Brie, 5 Bri, 15 Chedar.
Więc tak, niektóre problemy rozwiązują się ostatecznie, gdy masz wystarczającą ilość danych.
źródło
Rozważ problem NP-zupełny 3-SAT. Jeśli problem będzie się powiększał, wprowadzając dane wejściowe w postaci x_i = true / false, albo przerwiesz poszczególne rozróżnienia na klauzule dwóch zmiennych, tworząc w ten sposób problem 2-SAT, który jest zdecydowanie P, lub po prostu otrzymujesz odpowiedź prawda / fałsz.
W przypadku, gdy istnieje nadmiarowość w wejściach x_i = prawda / fałsz (to samo wejście pod warunkiem wiele razy lub sprzeczne dane wejściowe), możesz łatwo posortować dane wejściowe i albo zignorować nadmiarowe wartości, albo zgłosić błąd, jeśli wartości są sprzeczne.
W każdym razie myślę, że stanowi to „realistyczny” problem, który łatwiej jest rozwiązać, gdy rośnie liczba danych wejściowych. „Łatwiejszym” aspektem jest konwersja problemu NP-zupełnego na problem P. Nadal możesz grać w system, dostarczając absurdalne dane wejściowe, tak że samo sortowanie zajęłoby więcej niż brutalne wymuszenie problemu.
Teraz naprawdę fajny scenariusz byłby, gdybyśmy byli gotowi zaakceptować T (0) (wykorzystując zapis DW w powyższej odpowiedzi) może być nieskończony. Na przykład T (0) może być równoważne rozwiązaniu problemu zatrzymania Turinga. Gdybyśmy mogli wymyślić taki problem, że dodanie większej ilości danych wejściowych przekształci go w rozwiązywalny problem, uderzyliśmy w złoto. Zauważ, że nie wystarczy asymptotycznie przekonwertować go na rozwiązywalny problem - ponieważ jest to tak samo złe jak brutalne zmuszanie problemu.
źródło
Pytanie brzmi: „czy można mieć problem, który staje się łatwiejszy w miarę wzrostu wielkości nakładów?” Co jeśli dane wejściowe są zasobami do wykorzystania przez algorytm do pracy nad zadaniem. Powszechnie wiadomo, że im więcej zasobów, tym lepiej. Poniżej znajduje się przykład, w którym im więcej pracowników, tym lepiej.
3) Dane wyjściowe:
Dane wyjściowe to ścieżki między zadaniami, które mają podjąć pracownicy. Każda ścieżka jest powiązana z liczbą pracowników biorących ją. Na przykład:
4) Możliwe rozwiązanie:
Jednym z możliwych rozwiązań jest najpierw obliczenie najkrótszej ścieżki do najbliższych węzłów z A. To będzie ścieżka do przodu. Następnie rekurencyjnie oblicz ścieżkę przekazywania dla każdego odwiedzanego zadania. Rezultatem jest drzewo. Na przykład:
źródło