Jest prawdopodobne, nie rozwiązuje tego problemu, jest znacznie lepszy niż w O (N^2) w standardowym modelu obliczania .
Problem znalezienia trzech współliniowych punktów redukuje problem znalezienia linii przechodzącej przez większość punktów, a znalezienie trzech współliniowych punktów jest 3-SUMA-trudne, co oznacza, że rozwiązanie to w czasie krótszym niż O (n^2) byłby poważnym wynikiem teoretycznym.
Zobacz previous question na znalezienie trzech współliniowych punktów.
Dla twojego odniesienia (używając znanego dowodu), załóżmy, że chcemy odpowiedzieć na problem 3SUM, taki jak znalezienie x, y, z na liście X tak, że x + y + z = 0. Gdybyśmy mieli szybki algorytm dla problem z współliniowym punktem, możemy użyć tego algorytmu, aby rozwiązać problem 3SUM w następujący sposób.
Dla każdego x w X utwórz punkt (x, x^3) (na razie zakładamy, że elementy X są różne). Następnie sprawdź, czy istnieją trzy współliniowe punkty spośród utworzonych punktów.
zauważyć, że ta działa zauważyć, że gdy x + y + z = 0, wówczas nachylenie linii od x do y wynosi
(r^3 - x^3)/(Y - X) = r^2 + yx + x^2
i nachylenie linii od x do z jest
(z - x^3^3)/(ZX) = z^2 + zx + x^2 = (- (x + y))^2 - (x + y) x + x^2 = x^2 + 2xy + y^2 - x^2 - xy + x^2 = y^2 + yx + x^2
Odwrotnie, jeśli nachylenie od x do y jest równe nachyleniu od Xt oz następnie
Y^2 + yx + x^2 = Z^2 + zx + x^2
co oznacza, że
(Y -) (X + Y + Z) = 0,
Tak więc albo y = z lub z = -x - y wystarczy, aby udowodnić, że redukcja jest ważna.
Jeśli są duplikaty w X, najpierw sprawdź, czy x + 2y = 0 dla dowolnego x i zduplikowanego elementu y (w czasie liniowym, używając skrótu lub czasu O (n lg n), używając sortowania), a następnie usuń duplikaty przed zmniejszeniem do współliniowego problemu ze znalezieniem punktu.
Nie myśl, że to możliwe. Byłoby możliwe, gdyby istniała taka transformacja w jednym punkcie, który mógłby pomóc, ale niestety każda transformacja, o której myślę, wymaga 2 punktów. Podejście probabilistyczne (takie jak Monte Carlo) może być szybsze, ale nie byłoby gwarancji, że znajdzie maksimum. – ruslik
Jeśli podmienisz współrzędne punktu na równanie liniowe, 'k * x [i] + b = y [i]', otrzymasz równanie dotyczące 'k' i' x'. W {K, x} -space będzie to linia. Staje się więc problemem maksymalnych linii przechodzących przez jeden punkt. Może mieć rozwiązanie. – Vovanium
Zauważ, że problem ma sens tylko w przypadku coodonatów całkowitych, więc 'k' i' b' muszą być liczbami wymiernymi, takimi że 'b == y - k * x', gdzie' y' i 'x' są liczbami całkowitymi. Być może poprzez przekształcenie problemu w formie "znajdź takie wymierne liczby" b "i" k ", które spełniają większość równań" pomożemy. – ruslik