Algoritma tasarımı · 38 / 53
Bit mask, bitset ve sayı teorisi
Anla → iz sür → uygula → gerekçelendir
1 dk okuma · uygulama için ayrıca zaman ayırBitmask küçük kümenin üyeliğini her bite yerleştirir. i bitini açmak mask|1<<i, kontrol mask&(1<<i), temizlemek mask&~(1<<i). Python tamsayıları sınırsız genişlikte; ~mask negatif two's-complement benzeri sonuç verir. Sabit b-bit evren istiyorsan ayrıca ((1<<b)−1) mask'ini uygula.
x&−x en düşük1 bitini izole eder; x&(x−1) onu siler. Submask enumerasyonu s=(s−1)&mask ile bütün alt maskeleri gezer;0 sonrası durmalıdır. XOR yalnız çift tekrarları iptal etme sözleşmesi altında “tek öğe” bulur; bütün tekrar problemlerinin çözümü değildir.
Bitset parallelism bir makine kelimesinde birçok boolean işi yapar; büyük bitset maliyeti kelime sayısına bağlıdır, bedava O(1) değildir. GCD Euclid bölme ile ilerler; modular exponentiation exponent bitlerini kullanır. Hash collision olasılığı, modulo ve overflow açıklarken sayı teorisi temel araçtır.
Adım adım iz sürme
mask=1010₂ üyeler1,3; submask'+'’lar1010,1000,0010,0000. Toplam2^popcount(mask)=4.
Maliyet ve varsayımlar
b-bit subset evreninde2ᵇ state. Büyük tamsayı bit işlemleri b/makineKelimesi sayısına bağlıdır.
Çalıştırılabilir örnek
Python 3 ile çalıştır. Assert küçük bir örneği denetler; genel doğruluk ispatı değildir. Bazı ileri örnekler özellikle küçük model veya referans oracle'dır; tam üretim uygulaması değildir.
def submasks(mask):
if mask < 0: raise ValueError("nonnegative mask required")
s=mask
while True:
yield s
if s == 0: break
s=(s-1)&mask
assert list(submasks(10)) == [10,8,2,0]KAVRADIĞINI KONTROL ET
Sıra sende
Tek öğe dışındakiler üç kez tekrar ederse XOR neden yetmez?
Çözümün mantığını göster
Üç XOR bir kopyayı bırakır, iptal etmez. Bit sayımlarını mod3 veya farklı state machine ile tutmak gerekir.
Bir adım ileri
- Örneği değiştirmeden önce girdi sözleşmesini ve invariantı yaz.
- Uygun olan boş, sınır, tekrar ve adversarial girdileri ekle. Basit bir oracle ile karşılaştır.
- Belirtilen modelde maliyeti çıkar; farklı girdi büyüklüklerini ölç ve farkları gerekçelendir.
Temel kaynaklar ve ders notları
Bu eğitimde özgün anlatım kullanıldı; aşağıdaki kaynaklar ispatlar ve ileri okumalar sunar. Bağlantılar daha geniş ders modülünü kapsayabilir.
MIT 6.046J · Design and Analysis ↗