@fsword @hooopo @i5ting @skandhas
是要预先排好序
查找最快还是 Hash, 但是消耗空间比较大,数组消耗的空间就小很多
二分查找时间复杂度是 O(log(n))
, 和 Java 的 TreeMap
, C++ 的 std::map
一样。和 Hash 的 O(1)
相差不大了。
另外二分查找可以用比较条件,Hash 查找只能严格匹配。而 select
要遍历全部元素,O(n)
的复杂度对于大数组 (>100k 之类的) 就显得慢了,小数组的话速度区别不大。
二分查找因为有序性限制了两种使用模式,select
就没有限制
模式 1 是 block 返回 true / false / nil
可以用于查找大于 / 大于等于 N 的 (最小) 值,例如查找 x >= 5
:
a.bsearch{|x| x >= 5 }
模式 2 是通用的模式,block 返回 正/负/0
可以用于查找区间内的值,例如查找 4 <= x <= 8
:
a.bsearch{|x|
if x < 4
1 # x 太小了, 返回正数, 告诉 bsearch 我们需要更大的
elsif x > 8
-1 # x 太大了, 返回负数, 告诉 bsearch 我们需要小一些的
else
0 # 枚举的 x 在区间内, 返回 0, 查找结束
end
}
也可以用于查找小于 / 小于等于 N 的值,例如查找 -∞ < x < 5
:
a.bsearch{|x|
if x >= 5
-1
else
0
end
}
模式 2 在查找范围值时返回符合条件 (block 返回 0) 的第一个结果,和值的位置有关,没有保证的...
模式 2 用 N <=> x
可以做严格匹配的查找
和 libc 的 bsearch 相似 (man bsearch), 和 C++ 的二分查找区别比较大... C++ 的二分查找的核心是重新定义 <
, 然后有 lower_bound
, upper_bound
的用法...
感觉 tiobe 经常在人为的放大波动,排名一成不变就没人看了... 背后有没有悄悄收钱也未知...
变大了?难道也是因为开发人员视力下降...
reddit 能按照时间线排序也能组织成树状的
貌似最后都会变成可选项...
#77 楼 @zhangjinzhu 买 mac 不为别的,就为 retina 的高清终端效果...
#2 楼 @hpyhacking ... 无报错信息不知真相... 难道之前替换过什么东西了?
昨晚听了两次哈哈
先 rvm get head
然后直接 rvm install ruby-2.0.0-p0 --docs
就可以了,新的 rvm 会调用 brew 的...
没 mac 的两种观点都有 有 mac 的都说 mac 好
把 c:\\
改成 c:\\\\
支持
综合看来,优点就是很像 mysql ?
如果要支持四则运算 + 括号的效果,可以参考我写的一个解析器生成器 rsec 的例子:
https://github.com/luikore/rsec/blob/master/examples/arithmetic.rb
treetop 是流行程度高很多的另一个解析器生成器,它的首页上就有个做四则运算的例子
#2 楼 @Alexander 可以这么写:Bar0 = Foo::Bar0
... 但是 Foo
还是引入了。如果不怕 warning 的话,可以接一个 Foo = nil
... 但这不是 Ruby 的用法... ruby module 的组织方式和想法和 python 完全不一样的
假如 foo.rb 里定义了 Bar
, require './foo'
就能用 Bar 了
@lgn21st pocket 可以保存 pdf 吗?一直苦恼于 instapaper 对 pdf 支持不好
上面改的是实例的内容 下面改的是引用
#7 楼 @jimrokliu 法国小孩就不懂乘法表,但懂交换律和结合律,我们小学数学里计算/口算成分太多了,还有教算盘的... 真不如把算盘翻过来当滑板玩