전력 간 거리를 계산하는 알고리즘


9

coprime 주어지면 을 빠르게 계산할 수 있습니까?a,b

minx,y>0|axby|

여기서 x,y 는 정수입니다. 분명히 x = y = 0을 취하는 것은 x=y=0흥미없는 대답을 제공합니다. 일반적으로 이러한 힘은 얼마나 가까이 갈 수 있습니까? 또한 최소화하는 x,y 어떻게 빨리 계산 합니까?


6
심지어 계산할 수 있다는 것을 알고 있습니까?

1
x 를 고치면 x최소화 기의 경우 y{xlogalogb,xlogalogb} . 그러면 1 차원 검색으로 줄어 듭니다.
Thomas

5
교차 게시물을 작성하거나 다른 게시물에 연결하지 마십시오. mathoverflow.net/questions/283903/…
usul

답변:


-2

먼저 의 연속 부분을 사용 하고 수렴에서 테스트 하는 것이 가장 좋을 것이라고 생각했습니다. 수렴에는 어떤 의미에서 최적의 근사치 가 있기 때문 입니다. 그 후, 단조로운 감소 거리를 갖기 위해서는 적어도 일반화 된 연속 분수를 사용해야한다는 것이 명백 해졌다 . 그 후이 복잡한 알고리즘은 Pari / GP에서 훨씬 빨랐습니다.log(a)/log(b)(x,y)

\\ print X,Y,d conditional X>lowboundX, Y > lowboundY, d<upperboundD
{pri1(lbX,lbY,ubd,a,b,X,Y,d)=if(X<lbX || Y<lbY || abs(d)>ubd,return(0)); 
                  print(a,"^",X,"-",b,"^",Y,"=",d)); }


{mylist(maxa=19,maxb=99,lbX=3,lbY=2,ubd=100)=print(" ");
for(a=2,maxa,for(b=a+1,maxb,
     if(gcd(a,b)>1,next()); \\ ignore trivial multiples
     X=1;Y=1;Xa=a;Yb=b;
     d=Xa-Yb;  pri1(lbX,lbY,ubd,a,b,X,Y,d);
     for(k=1,20, 
        while(d<0,Xa*=a;d=Xa-Yb;X++;pri1(lbX,lbY,ubd,a,b,X,Y,d););
        while(d>0,Nb*=b;d=Xa-Yb;Y++;pri1(lbX,lbY,ubd,a,b,X,Y,d););
        if(X>30 || Y>20, break());  \\ stop at max X=30 or Y=20 
       );
   )); }

그 전화 후 mylist(100,1000,3,3,100)모든 작은 차이를 찾기 위해 모두 지수가 적어도 모든 염기 및 . 및 까지만 확인하십시오 . |d|<1003a=2..100b=(a+1)..1000max(X)=30max(y)=20

이것은 어쨌든 순진한 알고리즘이지만 계속되는 분수 접근 방식 (처리하기 어려운 불친절한 문제 (예 : 솔루션의 완전성)이 있음)보다 훨씬 빠릅니다.

프로토콜 (수동으로 주문) :

gettime();mylist(200,10 000,3,3,100);gettime() /1000.0 \\ ~ a*b/6000 sec
  (400 sec)

 2^8- 3^5= 13

 6^7-23^4= 95
 2^7- 3^4= 47

 2^7- 5^3=  3
 2^5- 3^3=  5
 3^4- 4^3= 17

---------------
 2^6- 3^4=-17

 3^5- 4^4=-13
 2^5- 3^4=-49

 2^8- 7^3=-87
(4^4- 7^3=-87)

 3^7-13^3=-10
 2^6- 5^3=-61
(4^3- 5^3=-61)
 2^5- 5^3=-93

 2^4- 3^3=-11
 3^4- 5^3=-44
 6^4-11^3=-35
15^4-37^3=-28

 3^3- 4^3=-37
 3^3- 5^3=-98
 5^3- 6^3=-91
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.