算法 ruby 或者在数据库的正则里如何最快算出 10100101011101010101011011010101 里有多少个 1

hlxwell · 2013年09月28日 · 最后由 hlxwell 回复于 2013年12月24日 · 3008 次阅读

求助, 如题。 我想如果用任何字符串处理肯定是慢的。

用与或计算应该会比较快一点。

#1 楼 @luikore 如果我有 1000 万条数据,每条都有 1000 个长度的数字,然后做这个计算那不是很慢么。

#2 楼 @hlxwell 可能汇编里有对应指令。但如果是 1000 万条数据的话,那你就别想了,这种事情除了并行计算外没有快的办法了。

#3 楼 @iBachue 我的意思是如果 str.count "1"需要 1 秒,是不是如果用数字计算只需要 0.01 秒了呢,这样就可以快 100 倍了

瓶颈在你把数据读出来需要的时间, 而不是计算方法

#8 楼 @luikore 直接丢数据库里去算啊...

@hlxwell 你本来的问题是什么? 可能针对那个问题有更快的解决方案. 但是用了这样的存储方式没法快了...

#9 楼 @bhuztez 数据库也要读硬盘的啊

#11 楼 @luikore 如果说这个计算时间跟硬盘 io 的时间比,微乎其微的话,其实也倒是无所谓了。

如果是 mysql,可以就地算,update _ set _ = bit_count(_),不用读到 client

#12 楼 @hlxwell 是很微小

require 'benchmark'; s='1' * 1000_000_000; puts Benchmark.measure{s.count '1'}
  0.780000   0.000000   0.780000 (  0.778674)

问题是数据的来源就是字符串,你要用某种基于数值或者位的算法来处理的话,还要首先将字符串转成数字,这个时间代价不一定比 String#count 小吧

啊,怎么都看不懂

我想知道 10100101011101010101011011010101,这个是什么类型的数据?

#17 楼 @rubyu2 字符串,或者你可以存成数字。

需要 登陆 后方可回复, 如果你还没有账号请 注册新账号