<?xml version="1.0" encoding="UTF-8"?><!-- generator="WordPress/2.9.2" -->
<rss version="0.92">
<channel>
	<title>zneil</title>
	<link>http://www.zneil.net</link>
	<description>coding</description>
	<lastBuildDate>Wed, 03 Aug 2011 11:53:13 +0000</lastBuildDate>
	<docs>http://backend.userland.com/rss092</docs>
	<language>en</language>
	
	<item>
		<title>linux下让pdf使用单一字体</title>
		<description><![CDATA[很多pdf文件的字体没有嵌入到文件中，以致于在windows下可以正常阅读到文件在linux下面是乱码或者不显示相关内容，为解决这一问题，可以为pdf文件分配单一的字体。
代码如下：
&#60;?xml version=&#8221;1.0&#8243;?&#62;
&#60;!DOCTYPE fontconfig SYSTEM &#8220;fonts.dtd&#8221;&#62;
&#60;fontconfig&#62;
&#60;!&#8211;
If the font still has no generic name, add sans-serif
&#8211;&#62;
&#60;match target=&#8221;pattern&#8221;&#62;
&#60;test qual=&#8221;all&#8221; name=&#8221;family&#8221; compare=&#8221;not_eq&#8221;&#62;
&#60;string&#62;URW Bookman L&#60;/string&#62;
&#60;/test&#62;
&#60;test qual=&#8221;all&#8221; name=&#8221;family&#8221; compare=&#8221;not_eq&#8221;&#62;
&#60;string&#62;URW Bookman L&#60;/string&#62;
&#60;/test&#62;
&#60;test qual=&#8221;all&#8221; name=&#8221;family&#8221; compare=&#8221;not_eq&#8221;&#62;
&#60;string&#62;URW Bookman L&#60;/string&#62;
&#60;/test&#62;
&#60;edit name=&#8221;family&#8221; mode=&#8221;append_last&#8221;&#62;
&#60;string&#62;URW Bookman L&#60;/string&#62;
&#60;/edit&#62;
&#60;/match&#62;
&#60;/fontconfig&#62;
将上述代码拷贝至新建文件中，命名为：49-sansserif.conf，并将文件移动至：/etc/fonts/conf.d/49-sansserif.conf。
如果仍然不起作用，在终端输入下列代码：
 sudo apt-get install poppler-data
]]></description>
		<link>http://www.zneil.net/2010/07/linux%e4%b8%8b%e8%ae%a9pdf%e4%bd%bf%e7%94%a8%e5%8d%95%e4%b8%80%e5%ad%97%e4%bd%93/</link>
			</item>
	<item>
		<title>emacs简单配置</title>
		<description><![CDATA[1 自动启动ecb
;;;; 自动启动ecb，并且不显示每日提示
(setq ecb-auto-activate t
ecb-tip-of-the-day nil)
2显示行号
1.下载扩展文件linum.el，可以在http://stud4.tuwien.ac.at/~e0225855/linum/linum.html进行下载，它有不同的版本供你使用，我选择emacs22及以上版本。
2.设置.emacs文件:
(add-to-list &#8216;load-path &#8220;/usr/share/emacs/mylisp&#8221;)
(require &#8216;linum)
(global-linum-mode 1)
3鼠标的支持
默认情况下，使用鼠标点击ECB窗口中的内容，不起作用，并不能打开它，要回车才可以。可以在Emacs中执行“M-x ecb-customize-most-important”，找到“Ecb Primary Secondary Mouse Buttons”选项，将其设为“Primary: mouse-1, secondary: mouse-2”，并且以“Save for Future Sessions”保存。
4全屏
(defun my-fullscreen ()
(interactive)
(x-send-client-message
nil 0 nil &#8220;_NET_WM_STATE&#8221; 32
&#8216;(2 &#8220;_NET_WM_STATE_FULLSCREEN&#8221; 0))
)
;该函数用于最大化,状态值为1说明最大化后不会被还原
;因为这里有两次最大化 (分别是水平和垂直)
(defun my-maximized ()
(interactive)
(x-send-client-message
nil 0 nil &#8220;_NET_WM_STATE&#8221; 32
&#8216;(1 &#8220;_NET_WM_STATE_MAXIMIZED_HORZ&#8221; 0))
(interactive)
(x-send-client-message
nil 0 nil &#8220;_NET_WM_STATE&#8221; 32
&#8216;(1 &#8220;_NET_WM_STATE_MAXIMIZED_VERT&#8221; 0)))
(my-maximized)
5自定义按键
(global-set-key [f1] &#8217;shell);F1进入Shell
(global-set-key [f5] &#8216;gdb);F5调试程序
(setq compile-command &#8220;make -f Makefile&#8221;)
(global-set-key [f7] &#8216;do-compile);F7编译文件
(global-set-key [f8] &#8216;other-window);F8窗口间跳转
(global-set-key [...]]]></description>
		<link>http://www.zneil.net/2010/07/emacs%e7%ae%80%e5%8d%95%e9%85%8d%e7%bd%ae/</link>
			</item>
	<item>
		<title>用递归求排列</title>
		<description><![CDATA[通常我们希望检查n 个不同元素的所有排列方式以确定一个最佳的排列。比如，a，b 和c 的排列方式有：a b c, a c b, b a c, b c a, cab 和c b a。n 个元素的排列方式共有n ！种。
由于采用非递归的C + +函数来输出n 个元素的所有排列方式很困难，所以可以开发一个递归函数来实现。令E= {e1 , &#8230;, en }表示n 个元素的集合，我们的目标是生成该集合的所有排列方式。令Ei 为E中移去元素i 以后所获得的集合，perm (X) 表示集合X 中元素的排列方式，ei . p e r m(X)表示在perm (X) 中的每个排列方式的前面均加上ei 以后所得到的排列方式。例如，如果E= {a, b, c}，那么E1= {b, c}，perm (E1 ) = ( b c, c [...]]]></description>
		<link>http://www.zneil.net/2010/06/%e7%94%a8%e9%80%92%e5%bd%92%e6%b1%82%e6%8e%92%e5%88%97/</link>
			</item>
	<item>
		<title>cedet和ecb在emacs中的配置</title>
		<description><![CDATA[最近，研究emacs的使用，期间遇到很多配置方面的问题，在http://www.emacer.com上面寻找到一些相关的教程，但中间仍然出现了很多难以预料的问题，在这里，把我用的的相应配置过程记录一下，一是为自己以后备用，二来为那些和我一样挣扎的新手提供一些帮助，废话少说，进入正文。
我使用的系统是ubuntu 9.10, 在这里我主要是配置cedet和ecb的相关内容，内容全部在.emacs 文件中（.emacs文件一般在/home/你的用户名 目录下，一般是隐藏的，按ctrl+h可以查看隐藏文件）。
1 安装前的准备
1.1 Emacs已经安装好,且版本号必须高于或等于21.(我用的是Emacs23.1)
1.2 安装Cedet套件:
1.2.1 首先下载cedet的cvs版本(请先安装cvs)
cvs -d:pserver:anonymous@cedet.cvs.sourceforge.net:/cvsroot/cedet login
cvs -z3 -d:pserver:anonymous@cedet.cvs.sourceforge.net:/cvsroot/cedet co -P
cedet
1.2.2 编译Cedet
进入到cedet
$ cd cedet-1.0pre6
编译:
$ make EMACS=emacs
如果这里没有安装texinfo, 会出现makeinfo命令未找到的出错. 请把texinfo安装就行了.
更多的编译过程, 请参阅cedet目录下的INSTALL文件.
1.2.4 配置Cedet
打开.emacs, 在最后加入:
(load-file &#8220;/home/你的用户名/cedet/common/cedet.el&#8221;)
(require &#8217;semantic-ia)
(require &#8216;eldoc)
(require &#8217;semantic-gcc)
(global-ede-mode 1)                      ; Enable the Project management system
(semantic-load-enable-code-helpers)      ; Enable prototype help and smart completion
(global-srecode-minor-mode [...]]]></description>
		<link>http://www.zneil.net/2010/03/cedet-%e5%92%8c-ecb-%e5%9c%a8emacs%e4%b8%ad%e7%9a%84%e9%85%8d%e7%bd%ae/</link>
			</item>
	<item>
		<title>约瑟夫环问题</title>
		<description><![CDATA[约瑟夫环 是一个数学的应用问题：
已知n个人（以编号1，2，3&#8230;n分别表示）围坐在一张圆桌周围。从编号为k的人开始报数，数到m的那个人出列；他的下一个人又从1开始报数，数到m的那个人又出列；依此规律重复下去，直到圆桌周围的人全部出列。
这个就是约瑟夫环问题的实际场景，有一种是要通过输入n,m,k三个正整数，来求出列的序列。这个问题采用的是典型的循环链表的数据结构，就是将一个链表的尾元素指针指向队首元素。 p-&#62;link=head
解决问题的核心步骤：
1.建立一个具有n个链结点，无头结点的循环链表
2.确定第1个报数人的位置
3.不断地从链表中删除链结点，直到链表为空
void JOSEPHUS(int n,int k,int m) //n为总人数，k为第一个开始报数的人，m为出列者喊到的数
{
/* p为当前结点  r为辅助结点，指向p的前驱结点  list为头节点*/
LinkList p,r,list;

/*建立循环链表*/
for(int i=0,i&#60;n,i++)
{
p=(LinkList)malloc(sizeof(LNode));
p-&#62;data=i;
if(list==NULL)
list=p;
else
r-&#62;link=p;
r=p;
}
p&#62;link=list; /*使链表循环起来*/
p=list; /*使p指向头节点*/

/*把当前指针移动到第一个报数的人*/
for(i=0;i&#60;k;i++)
{
r=p；
p=p-&#62;link;
}

/*循环地删除队列结点*/
while(p-&#62;link!=p)
{
for(i=0;i&#60;m;i++)
{
r=p;
p=p-&#62;link;
}
r-&#62;link=p-&#62;link;
printf("被删除的元素：%4d ",p-&#62;data);
free(p);
p=r-&#62;link;
}
printf("\n最后被删除的元素是：％4d",P-&#62;data);
}
证明：
Josephus(约瑟夫)问题的数学方法(转)约瑟夫 （转）
无论是用链表实现还是用数组实现都有一个共同点：要模拟整个游戏过程，不仅程序写起来比较烦，而且时间复杂度高达O(nm)，当n
，m非常大(例如上百万，上千万)的时候，几乎是没有办法在短时间内出结果的。我们注意到原问题仅仅是要求出最后的胜利者的序号，
而不是要读者模拟整个过程。因此如果要追求效率，就要打破常规，实施一点数学策略。
为了讨论方便，先把问题稍微改变一下，并不影响原意：问题描述：n个人（编号0~(n-1))，从0开始报数，报到(m-1)的退出，剩下的人继续从0开始报数。求胜利者的编号。我们知道第一个人(编号一定是m%n-1) 出列之后，剩下的n-1个人组成了一个新的约瑟夫环（以编号为k=m%n的人开始）:
k   k+1   k+2   &#8230; n-2, n-1, 0, 1, 2, &#8230; k-2
并且从k开始报0。
现在我们把他们的编号做一下转换：
k      &#8211;&#62; 0
k+1    &#8211;&#62; 1
k+2    &#8211;&#62; 2
&#8230;
&#8230;
k-2    &#8211;&#62; n-2
k-1    &#8211;&#62; n-1
变换后就完完全全成为了(n-1)个人报数的子问题，假如我们知道这个子问题的解：例如x是最终的胜利者，那么根据上面这个表把这个x
变回去不刚好就是n个人情况的解吗？！！变回去的公式很简单，相信大家都可以推出来：x‘=(x+k)%n 如何知道(n-1)个人报数的问题的解？对，只要知道(n-2)个人的解就行了。(n-2)个人的解呢？当然是先求(n-3)的情况 &#8212;- 这显然就是一个倒推问题！好了，思路出来了，下面写递推公式：
令f表示i个人玩游戏报m退出最后胜利者的编号，最后的结果自然是f[n]
递推公式
f[1]=0;
f=(f[i-1]+m)%i;   (i&#62;1)
有了这个公式，我们要做的就是从1-n顺序算出f的数值，最后结果是f[n]。因为实际生活中编号总是从1开始，我们输出f[n]+1
由于是逐级递推，不需要保存每个f，程序也是异常简单：
#include &#60;stdio.h&#62;
main()
{
int n, m, i, s=0;
printf ("N M = "); scanf("%d%d", &#38;n, &#38;m);
for (i=2; i&#60;=n; i++) [...]]]></description>
		<link>http://www.zneil.net/2010/03/%e7%ba%a6%e7%91%9f%e5%a4%ab%e7%8e%af%e9%97%ae%e9%a2%98/</link>
			</item>
	<item>
		<title>35个air（flex）教程</title>
		<description><![CDATA[一些开发教程]]></description>
		<link>http://www.zneil.net/2010/02/35%e4%b8%aaair%e6%95%99%e7%a8%8b/</link>
			</item>
</channel>
</rss>

