Büyük bir tamsayı gücünün bit sayısını hesaplama


10

İkili gösterimde iki x ve tamsayısı verildiğinde n, bit büyüklüğünü hesaplamanın karmaşıklığı nedir?xn

Bunu yapmanın bir yolu , log 2 ( x ) yeterli hassasiyetle hesaplayarak hesaplamaktır . Görünen o ki, işlem günlük 2 ( X ) ile1+log2(xn)=1+nlog2(x)log2(x)log2(x)k hassasiyetleri bitten yapılabilir O(M(k)logk) burada M(k) uzunluğu iki tamsayı ürün hesaplamak için gerekli olan süredir k . Bu, yaklaşık O (özellikle basit olmayan) bir karmaşıklık algoritması verir. halinde s bir ikisinin bitsize üzerine bağlanmış bir x ve n, (hiçbir hata yapılmış ise).O(slog2s)sxn

' i yenebilir , burada s x ve n büyüklüğündedir ( karşılaştırılabilir boyutlara sahip oldukları durumda)? Bu karmaşıklığı veya daha iyisini elde etmek için basit bir algoritma var mı?Ö(sgünlük2(s))sxn

Not: Turing makineleri gibi teorik bir modeldeki karmaşıklıkla ilgileniyorum.



@vzn: Bunun yararlı olduğunu düşünmüyorum ...
Bruno

neden olmasın? Bu soru bana Dysons varsayımına algoritmik saldırıları hatırlatıyor, örneğin 1 , 2'deki
vzn

Sadece soruma bir cevap bulduğum için, aklıma başka bir yerde sormaya gerek yok.
Bruno

Yanıtlar:


1

[değiştir] önerildiği gibi, benim cevap düzenlemek daha fazla ayrıntı vermek.

İkinci sorumun cevabı hayır :

Önerme. Hassasiyet k'ye kadar olan hesaplama en azından x 2 k bit büyüklüğünü hesaplamak kadar zordur .günlük(x)kx2k

Kanıt. Let " y" tamsayısının bit boyutunu belirtir . İlk fark negatif olmayan bir tamsayı için bu y , bit boyutlu y olan 1 + günlük y .|y|yyy1+günlüky

Böylece, . Şimdi 2 k log ( x ) , log ( x ) k konumlarını sola kaydırır . Böylece bir hesaplayabilir log ( x ) kesinliği k sadece çıkarılarak 1 bit-boyutuna x 2 k ve sonuç değişen k sağa pozisyonlar.|x2k|=1+2kgünlükx2kgünlük(x)günlük(x)kgünlük(x)k1x2kk


1
içindeki bit sayısı neden log x ile k arasındaki kesinlik değerlerini hesaplamanızı sağlar ? Azaltmanız gerçekten işe yarıyor mu? Ya özel bir durum n = 2 k çok daha kolay oldu / sert tüm diğer olası değerleri daha n (non-güçler-iki)? Bu olasılığı ortadan kaldırmak için bir yolunuz var mı? x2klogxkn=2kn
DW

@DW: Vzn'in yorumundan sonra bu soruya geri dönüyorum. Şöyle My kanıtıdır: bir tamsayıdır bit sayısı olan 1 + günlük y . Bu nedenle, bit sayısı x 2 k olan 1 + 2 k günlük x . Bundan başka, 2 k günlük x ile aynıdır günlük x ama kaydırılır k sola pozisyonlar. Bu nedenle, 2 k günlük x (en azından) verir k ilk bity1+günlükyx2k1+2kgünlükx2kgünlükxgünlükxk2kgünlükxk . Böylece, x 2 k bit sayısını hesaplayabiliyorsanız,sonuca 1 çıkararak, x günlüğünün ilk k bitlerinielde edersiniz. Bu mantıklı mı? günlükxx2k1kgünlükx
Bruno

Evet, bu benim için daha anlamlı! Özellikle sadece sertlik göstermeye çalıştığın için. Yanıtınızı bu daha ayrıntılı açıklama ile güncellemenizi tavsiye edebilir miyim? Bu konuya geri döndüğünüz ve kendi sorunuzun yanıtını belgelediğiniz için teşekkür ederiz.
DW
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.