rozwiązać dla Y w funkcji X: http://www.wolframalpha.com/input/?i=x%5E5%2B+xy+-+y%5E2+-+y%5E3
y(x) := INSERT_EQUATION_HERE
any((y in setX) for y in y(x) for x in setX)
Ma to O (| X |), czyli liniowy, czas.
Ewentualnie, jeśli nie jest używany język z any
funkcji lub listy manipulacji, to rozwiązanie musi być nieco bardziej gadatliwy:
for x in setX:
possibleYs = solveForY(x)
for y in possibleYs:
if y in setX:
return SOLUTION:(x,y)
return NO_SOLUTION
rzeczywistości nie mają rozwiązać 2D wielomian, jak pokazałem powyżej. Zamiast tego można rozważyć każde x w zestawie; to naprawia x i daje wielomian w y. Następnie rozwiązujesz ten wielomian w stałym czasie. Na przykład, jeśli x = 0, znajdziemy 3 rozwiązania dla y^2 == y^3; jeśli x = 1, znaleźlibyśmy 3 rozwiązania 2-y^2 == y^3, jeśli x = -0,52, chcielibyśmy. Rozwiązanie: http://en.wikipedia.org/wiki/Cubic_function#General_formula_of_roots
Bardziej ogólna wersja problemu:
Jeśli wziąć pod uwagę arbitralny wielomian, należy pamiętać, że ta metoda może zapewnić tylko wydajność O (1) w następującym przypadku: min (max_x_degree, max_y_degree) < 5.Jest tak, ponieważ, jak udowodniono w Galois theory, jedynymi wielomianami z pewnymi rozwiązaniami o zamkniętej formie są te o stopniu 4 lub mniejszym. W tym problemie możemy po prostu zmienić zmienną w najwyższym stopniu w stałą.
To nie znaczy, że O (1) sprawność nie można uzyskać za pomocą innej metody, w przypadkach, w których min (max_x_degree, max_y_degree) < 5.
miejsca również uzyskać bardziej interesujące, jeśli zwiększy liczbę zmiennych.
Wiele zależy od tego, czy X jest skończony iw jakiej formie jest podany. – jogojapan