다항식의 정수근


10

정수 계수 를 갖는 다항식 의 모든 정수 근을 찾기 위해 어떤 알고리즘을 사용할 수 있습니까?에프(엑스)

세이지가 모든 계수 가 매우 큰 경우에도 몇 초 안에 뿌리를 찾을 수 있음을 관찰합니다 . 어떻게 그렇게 할 수 있습니까?에프(엑스)


1
주어진 다항식의 정수 루트를 반환하는 알고리즘을 찾고 있습니까? 그렇다면, 그것은 결정 불가능하고 문제는 여기서 논외입니다. 더 넓은 범위의 컴퓨터 과학 에 요청할 수 있습니다 .
Kaveh

7
기다려. 결정 불가능한 이유는 무엇입니까? 이것은 합법적 인 연구 수준의 질문입니다.
Jeffε

2
그렇다면 Sage는 어떻게합니까? 결정 불가능한 것으로 알려져 있지만 결정 불가능한 것으로 이론적으로 문제가되지는 않습니다. 이론적 인 컴퓨터 과학자들은 결정 불가능한 문제를 항상 해결합니다. 예를 들어 모든 컴퓨터 보조 검증을 참조하십시오.
Jeffε

11
Kaveh, 당신이 말하는 것은 사실이 아닙니다. 결정 불가능한 것은 많은 변수를 가진 Diophantine 방정식의 용해도입니다 (따라서 무한히 많은 실제 솔루션이 있고 정수 / 합리적 솔루션을 찾고 있습니다). 그러나이 질문은 단 변량 다항식 에 관한 것입니다. 물론 결정 할 수 있습니다 ( f ( x )d 도인 경우 최대 d 개의 근이 있고 어느 것이 정수인지 확인할 수 있습니다). 에프(엑스)에프(엑스)
Mahdi Cheraghchi

1
@Pratik 일 변량의 경우 Gröbner 염기가 ​​필요하지 않습니다.
유발 Filmus

답변:


10

의 계수 가 정수 또는 유리수이고 정수 근을 원한다고 가정하면 가장 간단한 방법은 정수 또는 유리수 정리를 사용하는 것입니다. http://en.wikipedia.org/wiki/Rational_root_theorem을 참조하십시오 . DW에서 지적한 것처럼, 상수 계수를 고려하기 어려운 경우 문제가 될 수 있습니다 ( /math/123018/polynomial- 그리고 정수 뿌리 )에프

어쨌든 Sage 문서는 루트 검색을 수행하는 방법을 명확하게 설명합니다. "K가 필수 도메인 인 경우 다음 방법은 다항식을 인수 분해하는 것입니다. 이것이 성공하면 모든 학위에 대해 인수 a * x + b, 우리는 -b / a를 루트로 추가합니다 (이 몫이 실제로 원하는 링에있는 한). " http://www.sagemath.org/doc/reference/polynomial_rings/sage/rings/polynomial/polynomial_element.html을 참조 하십시오 .

그래서 당신의 질문은 어떻게 정수 계수로 다항식을 효율적으로 인수 분해합니까? 분명히, Sage는 NTL에 전화하여이를 수행합니다 ( NTL 세부 사항 은 http://www.shoup.net/ntl/doc/ZZXFactoring.txt 참조).

무증상으로 효율적인 방법을 원한다면 Lenstra, Lenstra 및 Lovasz ( https://openaccess.leidenuniv.nl/handle/1887/3810 ) 방법을 참조하십시오 .


1
유용한 힌트를 주셔서 감사합니다! 매혹적인. 이 알고리즘을 알고리즘으로 바꾸는 방법과 실행 시간은 무엇입니까? 최악의 경우 실행 시간이 지수입니까? (지수를 계산하는 데 시간이 걸리는 시간이 걸릴 수 있으며, 그에 따라 선행 및 후행 계수의 지수가 많이 나올 수 있기 때문에) 그렇다면 더 나은 알고리즘이 있습니까, 아니면 가장 좋은 알고리즘입니까? 또한이 접근법은 합리적인 뿌리만을 찾지는 않지만 비이성적 인 뿌리는 찾지 않습니까?
DW

질문을 다시 읽고 당신이 그것을 다르게 해석하는 것을 보았을 때, 나는 더 이상 완전히 확신하지 못하지만, 질문에 정수 뿌리에 대해 묻는 것은 나에게 그리고 어떤 주석가에게 분명해 보였다. 그렇게 읽지 않습니까?
나르

@minar, 네 말이 맞아. 이제 질문을 다시 읽었으므로 그렇게 보입니다. 질문을 너무 빨리 읽었어야합니다. (처음에는 정수 계수를 갖는 다항식의 모든 근을 원하지만 질문을 다시 읽으면 오해처럼 보입니다.)
DW

2
점진적 이고 실질적 으로 효율적인 방법의 경우 가장 잘 알려진 알고리즘은 van Hoeij입니다 ( 여기 참조 ). 실제로 NTL이 사용하고있는 것 같습니다.
Bruno
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.