AKS primallik testi ne zaman diğer testlerden daha hızlıdır?


24

AKS primallik testinin , öğrendiğimde nasıl yorumlanması gerektiği hakkında bir fikir edinmeye çalışıyorum , örneğin, PRIMES ⊆ P'nin ispatlanmasına yönelik bir sonuç ya da bilgisayarlarda ilkellik testi için pratik bir algoritma.

Test polinom çalışma zamanına sahip ancak yüksek dereceli ve olası yüksek sabitleri var. Öyleyse, uygulamalı olarak, hangi diğer primallik testlerini geçiyor? Burada , asal sayının basamağıdır ve "aşmak", tipik bilgisayar mimarileri üzerinde yapılan testlerin yaklaşık çalışma zamanını ifade eder.nnn

İşlevsel olarak karşılaştırılabilir algoritmalar ile ilgileniyorum, bu doğruluk için varsayımlara gerek duymayan determinist olanlardır.

Ek olarak, testin bellek gereklilikleri göz önüne alındığında pratikte diğerleri üzerinde böyle bir test kullanıyor mu?

Yanıtlar:


23

Hızlı cevap: Asla, pratik amaçlar için. Şu anda herhangi bir pratik kullanımda değil.

Ölçülen ilkellik zamanları

Öncelikle, "pratik" birleşiklik testini birincillik kanıtlarından ayıralım. İlki, hemen hemen tüm amaçlar için yeterince iyidir, ancak insanların yeterli olduğunu düşündüğü farklı test seviyeleri vardır. 2 ^ 64'ün altındaki sayılar için, deterministik bir cevap için en fazla 7 Miller-Rabin testi veya bir BPSW testi gerekir. Bu AKS'den çok daha hızlı olacak ve her durumda olduğu gibi doğru olacak. 2 ^ 64 ve üzeri rakamlar için BPSW iyi bir seçimdir, bazı ek rasgele-temelli Miller-Rabin testleri, çok az maliyet için ekstra güven ekler. Kanıtlama yöntemlerinin hemen hepsi, böyle bir testle başlayacaktır (ya da yapmalılar) çünkü ucuzdur ve sadece neredeyse kesinlikle asal olan sayılar üzerinde sıkı çalışmamız anlamına gelir.

Provalara geçiyorum. Her durumda, sonuçta elde edilen kanıt hiçbir varsayım gerektirmez, bu nedenle bunlar işlevsel olarak karşılaştırılabilir. APR-CL'nin "gotcha" si oldukça polinom değildir ve ECPP / fastECPP'nin "gotcha" si beklenenden daha uzun süren sayilarin var olabilecegidir.

Grafikte, iki açık kaynak AKS uygulaması görüyoruz - birincisi v6 gazetesinden, ikincisi Bernstein ve Voloch'tan gelen iyileştirmeler ve Bornemann'dan güzel bir r / s buluşması. Bunlar, polinom çarpımları için GMP'deki ikili segmentasyonu kullanırlar, bu nedenle oldukça verimlidirler ve bellek kullanımı, burada ele alınan boyutlar için sorun değildir. Bu log-log grafiğinde ~ 6.4 eğimiyle güzel düz çizgiler oluşturur, bu harikadır. Ancak, 1000 basamağa kadar ekstrapolasyon yapmak, yüz binlerce ila milyonlarca yıl arasında tahmin edilen zamanlarda, yani APR-CL ve ECPP için birkaç dakikada gelir. 2002 Bernstein gazetesinden yapılabilecek daha başka optimizasyonlar var, ancak bunun maddi olarak durumu değiştireceğini sanmıyorum (ancak bunun kanıtlanmamasına rağmen).

Sonunda AKS deneme bölümünü yener. BLS75 teoremi 5 (örn. N-1 kanıtı) yöntemi, n-1'in kısmi faktoringini gerektirir. Bu, küçük boyutlarda harika çalışır ve ayrıca şanslı olduğumuzda ve n-1'in faktörü kolay olduğunda, ancak sonunda büyük bir yarı üssü etkilemek zorunda kalarak takılıp kalırız. Daha verimli uygulamalar var, ancak ne olursa olsun 100 rakamı geçiyor. AKS'nin bu yöntemi geçeceğini görüyoruz. Bu yüzden soruyu 1975'te sorduysanız (ve o zamanlar AKS algoritması olsaydı), AKS'nin en pratik algoritma olduğu geçiş noktasını hesaplayabilirdik. Fakat 1980'lerin sonunda APR-CL ve diğer siklotomik yöntemler doğru bir karşılaştırmaydı ve 1990'ların ortalarında ECPP'yi dahil etmemiz gerekiyordu.

APR-CL ve ECPP yöntemlerinin her ikisi de açık kaynaklı uygulamalardır. Primo (ücretsiz ancak açık kaynaklı olmayan ECPP) daha büyük rakamlar için daha hızlı olacak ve daha güzel bir eğriye sahip olduğumdan eminim (henüz yeni bir kıyaslama yapmadım). APR-CL polinom değildir, ancak üs, "kesilen birinin sonsuzluğa gittiği, ancak bunu asla gözlemlemediği" şeklinde bir faktörüne sahiptir. Bu bize teoride, güneş yanmadan önce çizgilerin AKS'nin nerede biteceği hiçbir değeri geçmeyeceğine inanmamızı sağlar. ECPP bir Las Vegas algoritmasıdır, çünkü bir cevap aldığımızda% 100 doğrudur, varsayılmış (ECPP) veyalogloglognO(log5+ϵ(n))O(log4+ϵ(n))("fastECPP") süre, ancak daha uzun süren rakamlar olabilir. Bu nedenle beklentimiz, neredeyse tüm sayılar için standart AKS'nin ECPP'den her zaman daha yavaş olacağıdır (25k basamağa kadar olan sayılar için kesinlikle kendini göstermiştir).

AKS, onu pratik yapan keşfedilmeyi bekleyen daha fazla gelişmeye sahip olabilir. Bernstein'ın Quartic makalesinde AKS tabanlı randomize bir algoritması ve Morain'in fastECPP makalesi de deterministik olmayan diğer AKS tabanlı yöntemlere atıfta bulunuyor. Bu temel bir değişiklik, ancak AKS'nin bazı yeni araştırma alanlarını nasıl açtığını gösteriyor. Ancak neredeyse 10 yıl sonra, kimsenin bu metodu (veya hatta uygulamaları) kullandığını görmedim. O mı", giriş bölümünde yazar daha küçük yeni algoritma zamanı elliptic- bulmak için zaman sertifikalar mı? Benim şu anki izlenimim cevabın hayır olduğudur, fakat daha başka sonuçlar [...] cevabı değiştirebilir. "O(log4+ϵ(n))(lgn)4+o(1)(lgn)4+o(1)

Bu algoritmaların bazıları kolayca paralelleştirilebilir veya dağıtılabilir. AKS çok kolay (her birinin testi bağımsızdır). ECPP çok zor değil. APR-CL hakkında emin değilim.

ECPP ve BLS75 yöntemleri bağımsız ve hızlı bir şekilde doğrulanabilen sertifikalar üretir. Bu AKS ve APR-CL'ye göre çok büyük bir avantaj, sadece onu üreten uygulamaya ve bilgisayara güvenmemiz gerekiyor.


18

(Asimptotik olarak) en verimli deterministik primallik test algoritması, zamanında çalışan Lenstra ve Pomerance'den kaynaklanmaktadır . Eğer Genişletilmiş Riemann Hipotezi, ardından düşünüyorsanız Miller'in algoritması zamanında çalışır . Pek çok deterministik ilkellik test algoritması var, örneğin, Miller'in makalesinde bir algoritma var ve iyi bilinen başka bir algoritma da, çalışan Adleman – Pomerance – Rumley). . ~ O (giriş4N) ~ O (n,1/7)O(girişnO(girişgünlükgünlükn))O~(log6n)O~(log4n)O~(n1/7)O(lognO(logloglogn))

Gerçekte, hiç kimse bu algoritmaları kullanmaz, çünkü çok yavaşlar. Bunun yerine, olasılıklı primallik test algoritmaları, özellikle yukarıda belirtilen Miller algoritmasının bir modifikasyonu olan Miller-Rabin kullanılır (bir başka önemli algoritma Solovay-Strassen'dir). Miller-Rabin'in her yinelemesi, zamanında çalışır ve sürekli bir hata olasılığı için ( deyin ) tüm algoritma , Lenstra-Pomerance'dan çok daha hızlı.2-80 ˜ O (log2n)O~(log2n)280O~(log2n)

Tüm bu testlerde, hafıza bir sorun değildir.


Yorumlarında jbapple, hangi asallık testinin pratikte kullanılacağına karar verme sorununu gündeme getirmektedir. Bu bir uygulama ve kıyaslama meselesidir: birkaç algoritmayı uygulayın ve optimize edin ve deneysel olarak hangisinin hangi aralıkta en hızlı olduğunu belirleyin. Meraklı için, AHÇYTÖ'den kodlayıcılar sadece yaptı ve onlar bir deterministik fonksiyonu ile geldi isprimeve bir olasılık fonksiyonu ispseudoprimebulunabilir, her ikisi de burada . Kullanılan olasılık testi Miller-Rabin'dir. Deterministik olan BPSW'dir.


Dana Jacobsen'den daha fazla bilgi :

2.3 sürümünden beri Pari için APR-CL isprime(x)primallik kanıtı ve BPSW muhtemel prime test ("neredeyse güçlü" Lucas testiyle) kullanıyor ispseudoprime(x).

Davranışı değiştiren tartışmalar yaparlar:

  • isprime(x,0) (varsayılan.) Kombinasyon kullanır (BPSW, hızlı Pocklington veya BLS75 teoremi 5, APR-CL).
  • isprime(x,1) Pocklington-Lehmer testini kullanır (basit ).n1
  • isprime(x,2) APR-CL kullanır.

  • ispseudoprime(x,0) (varsayılan.) BPSW'yi kullanır (taban 2 ile MR, "neredeyse çok güçlü" Lucas).

  • ispseudoprime(x,k) ( .) MR, rasgele bazlarla test ediyor. RNG, her Pari çalışmasında aynı şekilde ekilir (bu nedenle dizi deterministiktir) ancak GMP'nin yaptığı aramalar arasında yeniden basılmaz (GMP'nin rastgele bazları aslında her aramada aynıdır , bu nedenle her zaman yanlış olur).kk1kmpz_is_probab_prime_p(x,k)

Pari 2.1.7 çok daha kötü bir kurulum kullandı. isprime(x)sadece MR testleri (varsayılan 10) idi, bu da isprime(9)sık sık gerçek gibi geri dönüş gibi eğlenceli şeylere yol açtı . Kullanmak isprime(x,1), yaklaşık 80 basamak için iyi olan ve daha sonra genel olarak kullanışlı olamayacak kadar yavaş olan bir Pocklington kanıtı yapardı.

Ayrıca yazma onlar çok yavaş olduğundan hiç kimse, bu algoritmaları kullanır Gerçekte. Ne demek istediğini bildiğime inanıyorum, ancak kitlenize bağlı olarak bunun çok güçlü olduğunu düşünüyorum. Tabii ki AKS şaşırtıcı derecede yavaştır, ancak APR-CL ve ECPP bazılarının kullanması için yeterince hızlıdır. Paranoyak kripto için faydalıdırlar ve kanıtlanmış astarlar almak için yeterli zamanı olan primegapsveya böyle şeyler yapan insanlar için faydalıdırlar factordb.

[Bu konuda yorumum: belirli bir aralıkta bir asal sayı ararken, bazı eleme yaklaşımlarını ve ardından nispeten hızlı bazı olasılık testlerini kullanıyoruz. Ancak o zaman, eğer hiç değilse, deterministik bir test yaparız.]

Tüm bu testlerde, hafıza bir sorun değildir. Bu AKS için bir konudur. Örneğin, bu yazıyı görün . Bunlardan bazıları uygulamaya bağlıdır. Eğer bir numaracı videonun AKS (aslında Fermat'ın Küçük Teoreminin bir genellemesi) dediği şeyi uygularsa, hafıza kullanımı son derece yüksek olacaktır. Başvurulan kağıt gibi v1 veya v6 algoritmasının NTL uygulamasının kullanılması aptalca büyük miktarda bellekle sonuçlanacaktır. İyi bir v6 GMP uygulaması hala 1024 bitlik bir asıl için ~ 2GB kullanacak, bu çokBöyle küçük bir sayı için Bazı Bernstein gelişmelerinin ve GMP ikili segmentasyonunun kullanılması çok daha iyi bir büyümeye yol açar (örneğin, 1024-bitler için ~ 120MB). Bu, diğer yöntemlerin ihtiyaç duyduğundan çok daha büyüktür ve hiçbir sürpriz APR-CL veya ECPP'den milyonlarca kez daha yavaş olmaz.


2
Bunun, sorulan soruları bu testlerin sabitlerinin hesaplanmasını gerektirecek şekilde yanıtladığına inanmıyorum.
jbapple

1
Aşırı derecede özensiz, çaba sarf etmeyen bir yazıyla ya da açıkça ve belki de tehlikeli şekilde yanlış bir cevapla karşılaştığınızda indirimlerinizi kullanın. - Bu cevabı kullanan kişinin oylamayı nasıl haklı çıkardığını anlayamıyorum.
Pål GD

2
@ PålGD: Muhtemelen soruyu yanıtlamıyor çünkü (düzenlemeden önce, yani). Ayrıca OP ile aynı kullanıyor musunuz, Yuval? n
Raphael

@Raphael Haklısın, onların benim . günlüğü nnlogn
Yuval Filmus,

İyi posta, ama "hiç kimse" tanımınız hiç bu kadar hafif olmamıştı. Meraktan, openssl pkeyparam -textPARI'ları isprime(belirtilen APR-CL kullanarak) kullanarak hızlı bir dizüstü bilgisayarda yaklaşık 80s: OpenSSL ile üretilen 2048 bit DSA muhtemel bir prime ( altıgen dizgiyi çıkarmak için kullanılır) doğrulamanın ne kadar sürdüğünü test ettim . Başvuru için, Chromium'un Frobenius testinde ( MR'dan çok daha güçlü olan) JavaScript demo uygulamamın her yinelemesi için biraz 0.25'ine ihtiyacı var , bu yüzden APR-CL kesinlikle paranoyak ama yapılabilir.
Arne Vogel

2

bu, farklı algoritmaların verimleri arasındaki çekimlerle ilişkili “büyük / galaktik sabitler” olarak bilinen şey yüzünden karmaşık bir sorudur. diğer bir deyişle her biri, farklı bir algoritma ile ilişkili çok büyük sabitleri gizleyebilir bu şekilde daha verimli bir başka bir yere asimptotik / fonksiyon karmaşıklığına göre, sadece " çok büyük için "devreye giriyor . Benim anlayış AKS yalnızca (rakip algoritmaları yerine) "daha verimli" olmasıdır "çok daha büyük " Mevcut pratik kullanımı aralığında (ve bu hassas dışınaO ( f ( n ) ) O ( g ( n ) ) n , n , nO(f(n))O(f(n))O(g(n))nnn aslında tam olarak hesaplanması çok zordur, ancak algoritma uygulamasında (aktif olarak aranan) teorik gelişmeler gelecekte bunu değiştirebilir.

Bu konuyu derinlemesine / ayrıntılı olarak analiz eden, insanların ne düşündüğünü bilmediğinden, şu ana kadar tepkiler duymadıklarından, belki de öğrenci tarafından oluşturulan bir tezden, belki de en detaylı / kapsamlı analizlerden biri olarak göründüğünden emin değilsiniz. mevcut algoritmanın pratik kullanımı.


AKS neye göre daha verimli? Rekabet nedir?
Yuval Filmus

diğer tüm algoritmalar. başlıca olasılık? gazetedeki detaylar
vzn
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.