मैं एक द्विआधारी संख्या (52 बिट) है में 1 की की संख्या की गणना एक स्ट्रिंग के रूप में प्रतिनिधित्व "01,100,011 ...."रूबी: एक द्विआधारी संख्या
क्या 1 के की संख्या की गणना करने के लिए तेज तरीका हो सकता है ?
"01100011....".count("1")
स्पष्ट रूप से काम करता है लेकिन काफी समय लगता है इस आपरेशन हज़ारों बार किया जाना चाहिए है।
ठीक है, कुछ और जानकारी। मैं
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
बिट_वीसी विधि को लगभग 170 के बार बुलाया जाता है, तो शब्दों के लिए बिट वैक्टर बनाने की कोशिश कर रहा हूं। मैं एक हैश में बिट वैक्टर स्टोर करता हूं और बिट वेक्टरों को XOR'ing द्वारा दिए गए शब्द के लिए समान शब्दों को ढूंढने और 1 की संख्या (अधिक 1 की == कम समानता) की गणना करने के लिए उनका उपयोग करता हूं। यदि गिनती विधि स्ट्रिंग # का उपयोग नहीं करती है तो स्कैन करें कि इसका क्या उपयोग हो सकता है?
मुझे पता है रूबी सी या जावा कहने से धीमी है। मैं बस एल्गोरिदम को बेहतर बनाने के लिए देख रहा हूं। मैं कच्ची गति की तलाश नहीं कर रहा हूं।
शायद इसमें शामिल हैं? विधि बाधा है?
, मैं पत्र की एक सरणी के रूप में तार भंडारण कोशिश करते हैं और इस ([ "एक", "बी" की तरह कुछ कर सकता है, "सी" ] और ["एक्स", "बी", "एक्स"]) आकार – Maulin