部分译作回顾

2009年01月24日 好书, 翻译

译作回顾

译作回顾

N王后问题,是一个科学谜题,指的是在把N个王后放到N*N的棋盘上,结果是任何王后之间都不会彼此威胁。换句话说,每个后继的王后既不能与前面的王后在同一行、同一列,也不能位于同一对角线上。N王后问题给出了Python代码。下面是JavaScript代码,但结果有些误差,不知何故。


function conflict(state,posX)	{
	var posY = state.length;
	for (var i=0;i<posY ;i++ )
	{
		var differ = Math.abs(state[i]-posX);
		if (differ == 0 || differ == (posY - i))
		{
			return true;
		}
	}
	return false;
}

function queens(num,state,solutions){
	for (var x=0;x<num ;x++ )
	{
		if (!conflict(state,x))
		{
			if (state.length == (num-1))
			{
				solutions.unshift(x);
				return true;
			}
			var result = queens(num,state.concat(x),solutions);
			if (result)
			{
				if (state.length==0)
				{
					solutions.unshift(x);
					continue;
				}
				solutions.unshift(x);
				return true;
			}

		}

	}
}

用法如下:


var result = [];
queens(4,[],result);
console.log(result);// [3, 1, 0, 2, 2, 0, 3, 1, 1, 3, 0, 2, 0, 3, 1, 2]

升级到WordPress 2.7

2009年01月18日 原创

今天干脆把博客升级了一下,最新版——2.7。

备份、上传,一切顺利。但是,访问主域名时居然空白!再访问登录页面,发现有提示“数据库需要升级”——不会吧,难不成要升级租用服务器上的MySql?不管那么多了,不是有个“升级”按钮嘛,直接点击——呵呵,“数据库已经升级成功!”

噢,原来是wordpress的数据库结构有变化呀!虚惊一场。这下再访问主域名,OK。

试用了一下,感觉比原来的2.2版好用多了。 没看发版声明,就凭试用总结几点:

  1. 与服务器交互更像是“桌面应用程序” 了,页面不必频繁刷新——用户体验不错。
  2. 可以直接在发表文章时编辑“固定链接”——非常直观。
  3. HTML源代码发表模式对标记的兼容性更好——更健壮了。
  4. 其他……

顺便列几本wordpress图书吧。可惜的是,WordPress这么流行的CMS系统,国内居然没有引进、出版一本书。

  • WordPress for Business Bloggers

    WordPress for Business Bloggers

    Paul Thewlis

    This book will take you beyond the basics of WordPress, helping you take full advantage of its rich and powerful features to transform your basic blog into a more advanced and professional blog as quickly and painlessly as possible.

    Packt Publishing | 2008

  • 查看全文 »

所谓CDN(Content Delivery Network,内容分发网络),就是一组Web服务器的集合,其中的服务器分布于不同的地点,从而能够就近将内容更有效地分发给用户。有关使用CDN的优点可以参考“构建高性能网站的14条法则:使用CDN”。

Google:

<script type=”text/javascript” src=”http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js” mce_src=”http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js”></script>

AOL:

<script type=”text/javascript” src=”http://o.aolcdn.com/dojo/1.2/dojo/dojo.xd.js” mce_src=”http://o.aolcdn.com/dojo/1.2/dojo/dojo.xd.js”></script>

Google:

<script type=”text/javascript” src=”http://ajax.googleapis.com/ajax/libs/dojo/1.2/dojo/dojo.xd.js” mce_src=”http://ajax.googleapis.com/ajax/libs/dojo/1.2/dojo/dojo.xd.js”></script>

  • ExtJS(注:通过自定义构建生成个性化的版本)

CacheFly:

<script type=”text/javascript” src=”http://extjs.cachefly.net/builds/ext-cdn-19.js”></script>
<link rel=”stylesheet” type=”text/css” href=”http://extjs.cachefly.net/ext-2.2/resources/css/ext-all.css” />

N王后问题

2009年01月16日 原创, 编程技术

关于N王后问题
模块代码:


#nqueens.py
#coding=UTF-8

# n王后问题解决方案
# 检查当前王后位置(可能是多个)与下一个王后位置是否冲突
def conflict(state,posX):
	posY = len(state)
	for i in range(posY):
		if abs(state[i]-posX) in (0,posY-i):
			return True
		return False

# 采用回溯递归算法,结合生成器特性,计算可能的解决方案
def find(num=4,state=()):
	for pos in range(num):
		if not conflict(state,pos):
			if len(state)==num-1:
				yield (pos,)
		else:
			for result in find(num,state+(pos,)):
				yield (pos,)+result

# 形象地表示每个解决方案
def show(solutions):
	def printSolution(index,solution):
		print "\n方案"+str(index)+" "+str(solution)+"\n"
		for pos in solution:
			length=len(solution)
			print ". "*(pos)+"Q "+". "*(length-pos-1)+"("+str(pos)+")"
			list_solutions = list(solutions)
		if not len(list_solutions)==0:
			enum_solutions = enumerate(list_solutions)
			n_solutions = len(list_solutions)
			n_queens = len(list_solutions[0])
			print str(n_queens)+"王后问题有"+str(n_solutions)+"种方案:"
		for index,solution in enum_solutions:
			printSolution(index+1,solution)

# 调用方法:
# nqueens.show(nqueens.find())
# 或
# nqueens.show(nqueens.find(5))

将以上代码复制到nqueens.py中,把nqueens.py保存在“你的路径”下。
查看全文 »