Ruby: die Anzahl der 1 ist eine binäre Zahl,

Habe ich eine binäre Zahl (52 bits) als Zeichenfolge dargestellt "01100011...."

Was wäre der Schnellste Weg, um die Anzahl der 1 ist?

"01100011....".count("1") 

offensichtlich funktioniert, ist aber sehr zeitaufwendig, wenn diese Arbeit getan werden muss, um Tausende Male.

ok, ein paar mehr Infos. Ich bin versucht zu erstellen-bit-Vektoren für die Worte wie folgt

def bit_vec(str)
    alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    bv = ""
    alphabet.each_char do |a|
        if str.include?(a)
            bv += "1"
        else
            bv += "0"
        end
    end
        bv
end

Den bit_vec Methode aufgerufen wird, wird über 170K Zeiten. Ich speichern die bit-Vektoren in einer hash-und nutzen Sie, um zu finden, die ähnliche Wörter zu einem gegebenen Wort von XOR ' Ing des bit-Vektoren und zählen der Anzahl von 1 (mehr 1 == weniger ähnlichkeit). Wenn die count-Methode verwenden, die nicht mit String#scan die was anderes nutzen könnte?

Ich weiß, Ruby ist langsamer als beispielsweise C oder Java. Ich bin gerade auf der Suche zur Verbesserung der Algorithmus, die beste, die ich kann. Ich bin nicht auf der Suche für roh-Geschwindigkeit.

Vielleicht ist das enthalten? Methode ist der Engpass?

  • Anstelle der bit-Vektoren, könnte ich versuchen, die Speicherung der strings, die als array von Buchstaben und tun so etwas wie dieses (["a", "b", "c"] & ["x","b","x"]).Größe
InformationsquelleAutor Maulin | 2009-10-28
Schreibe einen Kommentar