2011.9.25更新
本文被转载到NoSQLFun进行讨论
我才发现原文的一些问题没有表述清楚:
1、本文主要是针对随机读,而非随机写,关于如何构造一个写快的NoSQL系统,见BigTable论文,或者Cassandra、HBase。
2、我实际遇到的都是随机读很慢的情况,热数据可以解决部分问题,但是当规模远大于你的机器规模的时候,还是无法逾越的问题,此时NoSQL相对于RDBMS的优势就小的可怜了。
欢迎继续进行探讨。
原文:
抱歉我用了这么一个标题[......]
2011.9.25更新
本文被转载到NoSQLFun进行讨论
我才发现原文的一些问题没有表述清楚:
1、本文主要是针对随机读,而非随机写,关于如何构造一个写快的NoSQL系统,见BigTable论文,或者Cassandra、HBase。
2、我实际遇到的都是随机读很慢的情况,热数据可以解决部分问题,但是当规模远大于你的机器规模的时候,还是无法逾越的问题,此时NoSQL相对于RDBMS的优势就小的可怜了。
欢迎继续进行探讨。
原文:
抱歉我用了这么一个标题[......]
选择排序,思想非常简单,分为selectMax和selectSort两个部分。
selectMax:
每次选择区间内最大的数,返回其Index
selectSort
1、从右到左依次扫描i(除idx=0,因为选到最后,最小的一定在最左边),规定区间为[0, i]
2、调用selectMax,获得最大的maxIndex。
3、这个i位置应该是第i大的数的位置,也就是maxIndex的数的位置,因此,如果i!=maxIndex,swap之。
算法复杂度,不管是最坏、平均还是最好[......]
待补充:非递归版本。
快速排序和前面的中值排序非常类似。
分为partition和sort主体两个部分。
1.partition
和前面求第k大的数用到的思路非常类似。
(0)确定一个pivotIndex
(1)交换a[right]和a[pivotIndex]
(2)i=store=left,i从left到right-1,注意要包含right-1!!(不用包含right,因为里面是pivot)
(3)在(2)过程中,如果a[i] (4)完成上述步骤后,交换a[stor[......]