0

NArray を使用してビット配列を実装しましたが、bits_on メソッドの速度に満足していません。現在私は持っています:

# Method that returns the number of bits set "on" in a bit array.
def bits_on
  bits_on = 0

  self.byte_array.each do |byte|
    bits_on += @count_array[byte]
  end

  bits_on
end

byte_arrayNArray.byte() タイプで、@count_array次のようにビルドされます。

# Method that returns an array where the element index value is
# the number of bits set for that index value.
def init_count_array
  count_array = []

  (0 ... (2 ** BitsInChar)).each do |i|
    count_array << bits_in_char(i)
  end

  count_array
end

アイデア?

乾杯、

マーティン

4

1 に答える 1

1

背景を正しく理解しているかどうかわかりません。考えられる解決策は次のとおりです。

def bits_on
  NArray.to_na(@count_array)[self.byte_array].sum
end

申し訳ありませんが、上記は間違っています。次はうまくいきます:

def bits_on
  index = NArray.int(*self.byte_array.shape)
  index[] = self.byte_array
  NArray.to_na(@count_array)[index].sum
end
于 2011-10-17T15:56:37.367 に答える