İçeriğe atla
ΣDSA Patterns
Menü
Dil

Bit Manipülasyonu

Rehber 2 / 6 · Yol 2 / 6

Etkileşimli

Zihinsel model

Bu problem için animasyonlu çözüm. Adımları kaydır veya boşlukla duraklat; değişmezi yüksek sesle yeniden anlat.

Adım 1 / 6
1
0
1
1

n = 11 · c = 0

11 sayısının Hamming ağırlığı. İkilik 1011 üç 1-bit tutar.

Demo önizleme: Bu çözümler otomatik test paketini geçiyor ama insan tarafından incelenmedi. Trade-off ve yazıları taslak olarak değerlendirin.

Number of 1 Bits

Problem (yeniden ifade)

32-bit tamsayıdaki set bit sayısını (Hamming ağırlığı) döndür.

Sezgi

n &= n-1 en düşük set biti temizler; n=0 olana kadar say.

Yaklaşımlar

Brian Kernighan

Doğrulanmadı
Zaman O(popcount)Alan O(1)

Fikir. while n: n&=n-1; c++.

Yürüyüş. 11 → 3 (1011).

Trade-off. n&1 + n>>>1 döngüsü O(32); Kernighan O(#bits).

Çözüm
export function hammingWeight(n: number): number {
  let c = 0;
  n >>>= 0;
  while (n) {
    n &= n - 1;
    c++;
  }
  return c;
}
export function hammingWeight(n: number): number {
  let c = 0;
  n >>>= 0;
  while (n) {
    n &= n - 1;
    c++;
  }
  return c;
}

Şablon bağlantısı

Bit manipülasyonu set-bit kontrolleri.

Yansıma