-
scala99解题小结(List)
-
用DLX解sudoku(数独)
最近在做scala99,其中有一道题目P97是sudoku(数独)。一开始我想到的是列举每个空格的可选数字,选择可选数字最少的的格子开始填写。每次填写,修改关联格子的可选数字。再次尝试填写。这里无解条件是存在没有可选数字的格子。还有就是easy或者normal级别的数独一般可选数字都是1个,分批填写很快就能完成。hard或以上就没有那么幸运了,必须猜测然后验证,存在回溯。 这里描述的算法其实就是搜索+启发。启发是选择性地从最少可选数的格子开始。猜测+验证,感觉这个问题属于NP问题。事实上也确实是,而且可以转化为NP完全的精确覆盖问题(Exact Cover),所以这个问题也是NP完全问题。 P97给的答案有两个,第一个就是搜索+启发,第二个是DLX。DLX是Exact Cover的高效解法。本文就是讲如何用DLX来解数独问题的。考虑到scala99上第二个实现大部分都是可变数据,所以我用Java实现了相应算法。
-
finagle简单使用
-
rabbitmq在scala下的使用尝试
-
05-05 学习记录
-
04-23 学习记录
mongodb 最近回顾了下mongodb的安装,使用等。 ubuntu(12.04)下安装和启动 $ sudo apt-get install mongodb-server $ sudo mongod -f /etc/mongodb.conf 默认会同时安装客户端,即命令mongo,换句话说是那个支持JavaScript的客户端。 macosx下安装和启动 $ brew update $ brew install mongodb $ mongod –config /usr/local/etc/mongod.conf brew update耗时会比较长,如果没有必要的话可以不做。 让dash搜索casbah 默认dash下是没有casbah的文档的,把casbah clone下来,尝试用mkScalaDocSet也失败了,casbah生成的文档多处出现不标准的XHTML。后来某一天发现dash支持Scala Docs,那么可以这么做: 进入Scala Docs,就是点击常规下载DocSets左边的Ruby, Java, Scala Docs导航栏中的Scala Docs 搜索casbah 找到你需要的casbah版本并下载,由于casbah有多个模块,大概要下3~4个 默认这些Scala Docs的前缀是scaladoc:,需要都改成casbah:,这样你就可以用casbah:搜索casbah多个模块了 注意,casbah的这个文档只是API文档,不是那种tutorial。不过一般来说应该够了。
-
海量积分排序的二分实现
简单描述下问题:有一个网站,现在有很多用户,每个用户有一个积分,要求在用户登录时显示用户的积分排名,用户的积分会有变动。注意考虑数据量比较大的场景。 原理是以树的方式来分解排名的计算。参考在这里。 实际代码分为三部分: 查询某个积分的排名 更新积分 构造积分树 查询积分排名 原理是计算所有右子树或者同级节点的和,再加1。每个节点包含当前积分或者积分段内的用户总数。右子树或者同级节点代表大于指定积分的积分节点。排名的实际含义就是计算所有大于自己积分的人的总数。最后加1是因为大于最大积分的人的总数为0,但是排名不能为0,所以实际显示是必须加1的。 这块实际依赖树的结构,可能是数组或者是链表,但通用逻辑如下(递归): in: current node, score if current node is score node if current node is left leaf return count of right sibling else # current node is right node, no right sibling return 0 else # current node is score range node if score in left subtree…
-
scala模拟ketama算法
ketama是memcached客户端使用的一种一致性哈希算法。是为了解决余数实现分布不均匀的问题,在last.fm的一篇博客中首次提到。这里有一些介绍链接,其中第一篇是原博客。 http://www.last.fm/user/RJ/journal/2007/04/10/rz_libketama_-_a_consistent_hashing_algo_for_memcache_clients http://blog.csdnnet/kangojian/article/details/6708460 http://tech.idv2.com/2008/07/24/memcached-004/ 原博客里面提到算法步骤如下: Take your list of servers (eg: 1.2.3.4:11211, 5.6.7.8:11211, 9.8.7.6:11211) Hash each server string to several (100-200) unsigned ints Conceptually, these numbers are placed on a circle called the continuum. (imagine a clock face that goes from 0 to 2^32) Each number links to the server it was hashed from, so…
-
null-safe和scala的monad
-
scala版本的grails分页代码