组合生成的快速算法(C语言)

| 不指定 September 22, 2008 @ 20:21, Robin Hoo
在做思维体操时,需要一个高效的组合生成算法。发现之前用PHP写的算法有些问题。修改成如下的代码,其中第一个参数是存储产生组合的数组,每次调用该参数会利用数组返回相应的组合,同时返回是否成功产生组合的标志。
      
C语言: 组合生成的高效算法
      
01 int combination(unsigned int **intArr,unsigned int m,unsigned int n)
02 {
03     int i,index;
04     if ((*intArr)==NULL)
05     {
06         (*intArr)=(unsigned int *)malloc(m*sizeof(unsigned int));
07         for(i=0;i<m;i++) (*intArr)[i]=i+1;
08         return 1;
09     }
10     index=m-1;
11
12     while(n-(*intArr)[index]<=m-index-1 && index>=0)
13     {
14         index--;
15     }
16     if (index>=0)
17     {
18         for(i=index;i<m;i++)
19         {
20             (*intArr)[i]++;
21             if(i<m-1) (*intArr)[i+1]=(*intArr)[i];
22         }
23         return 1;
24     }
25     free((*intArr));
26     (*intArr)=NULL;
27     return 0;
28 }
    


      这个夏天就要过去。
  候鸟该准备迁徙了,飞向温暖的地方。
  你故乡的夜,有点微凉。
  我的故乡呢?突然有点害怕回去,我很爱很爱它,但是那儿没有你。
  前天我去看你了,在最角落的地方。身边是鼎沸的人群,他们狂热到了极点。我想他们都很爱你,我很喜欢听他们用你的母语疯狂喊你的名字。
  那个在我的梦里辗转反复,念兹在兹的名字啊。

AJAX并发与控制的讨论

| 不指定 August 30, 2008 @ 14:21, Robin Hoo
  AJAX作为网页异步处理的成功解决方法已经众所周知,但是在具体的使用上还是有一些不同的技巧。由于最近自己的一个小程序的需要,比较彻底的研究了一下AJAX多线程并发及其控制的方法。这里需要感谢Rick Chen和Tom Li在并发控制代码部分给出的意见和建议。下面我们来看看AJAX并发处理和控制的基本思路和流程控制。
  1. 由DOM对象触发AJAX请求
  2. 生成AJAX对象,并检测当前并发请求数量是否大于最大请求上限。如果大于上限AJAX对象压入队列,否则直接发送请求,并且增加并发请求数目。
  3. 如果AJAX请求完成,进入完成后处理。结束后并发数目减一,之后检测队列是否有等待请求,如果有发送队首AJAX对象请求。
  这里我不详细阐述如何生成AJAX对象和发送请求的代码,主要解释关于并发处理的一些问题。相关的AJAX基础知识和浏览器兼容性问题请自己察看网上相关资料。

  在分析上述AJAX应用的流程时我们发现,制约AJAX使用的两个地方。
  1. 如何将触发AJAX异步请求的DOM和相关参数传入onreadystatechange函数,从而更好的进行后续处理。
  2. 如何有效地控制并发请求的对服务器的负载问题,即控制批量触发的AJAX请求有序和可控的发送到远端服务器。

针对第一个问题,我这里采用的是引入嵌套匿名函数的方法达到各浏览器的兼容性。相应代码可参阅函数processRequest。在这个函数中,示例中指采用了两个参数,一是识别并发请求触发AJAX对象本身(这在并发多线程处理时是很重要的),另一个是触发AJAX请求的DOM对象本身的ID名称。当然还可以引入更多需要的参数用于AJAX请求完成后的处理,并在函数processEcho添加相应的代码。由于考虑到可能处理的AJAX请求回复的内容可能是针对requestXML,该函数传入参数是AJAX对象而不是requestText本身,当然可以跟据自己的需求修改这一点。

第二个问题的处理过程中采用了类似队列线形进出的方式,将超过最大并发请求的AJAX对象的请求暂缓发送,先将AJAX对象压入队列。等到先期发送对象完成自身请求后,再检测队列是否为空,如果不空再将队列首的AJAX的对象请求发送出去。这样既满足了服务器负载的考虑又照顾到AJAX请求发送的及时性。


            
01 var max_session=10;
02 var sessions=0;
03 var requestQue=new Array();
04 function createRequest(method, url, async, objID)
05 {
06     var request = new Object();
07     if (window.ActiveXObject) request.ajax = new ActiveXObject("Microsoft.XMLHTTP");
08     else if (window.XMLHttpRequest) request.ajax = new XMLHttpRequest();
09    
10     if (request.ajax)
11     {
12         request.url=url;
13         request.method=method;
14         request.async=async;
15         request.objID=objID;
16         if(sessions<max_session)
17         {
18             sessions++;
19             sendRequest(request);
20             return;
21         }
22         else
23         {
24             requestQue.push(request);
25         }
26     }
27 }
28
29 function sendRequest(request)
30 {
31    
32     request.ajax.open(request.method, request.url, request.async);
33     request.ajax.onreadystatechange = processRequest(request.ajax,request.objID);
34     request.ajax.send(null);    
35 }
36
37 function checkQue()
38 {
39     if (sessions<max_session || requestQue.length>0)
40     {
41         sessions++;
42         var request = requestQue.shift();
43         if(request)
44         {
45             //Do something before sending request about object
46             preworkBeforeRequest(objID);
47             sendRequest(request);
48         }
49     }    
50 }
51
52 function processRequest(request,objID)
53 {
54     return function()
55     {
56         if(request.readyState!=4||request.status!=200) return false;
57         //Handle the response text or XML
58         processEcho(request,objID);
59         sessions--;
60         checkQue();
61     };
62
63 }
64
65 function preworkBeforeRequest(objID)
66 {
67     //Do something before sending request about object
68
69 }
70
71 function processEcho(request,objID)
72 {
73         echoText=requst.responseText;
74         echoXML=request.responseXml;
75         //Do something related with echo Text
76        
77         //Do something related with echo XML
78        
79         //Do something related with ObjID
80
81 }
    

http://www.sina.com.cn 2008年08月19日 09:39 环球科学
科学家全球采集DNA样本追踪人类迁徙路线(图)

《环球科学》杂志为《科学美国人》杂志中文版,以上为2008年08期封面。

科学家全球采集DNA样本追踪人类迁徙路线(图)


  我们来自何处?为了解答这个千古谜题,科学家不仅在古人类的骨骼化石上寻找证据,还动用了遗传分析技术。从人类的基因组中,科学家或许可以找到这个问题的答案。


奥运开幕式有感(一)

| 不指定 August 17, 2008 @ 14:42, Robin Hoo
观奥运开幕式谓为壮观,及后闻下界主办城市伦敦慨叹无财力以相校,哑然!

一夜笙歌数亿银,
烟花赛似釜中薪。
凭谁敢笑天朝吝?
不列颠人憾国贫。

英国夜空上演闪电奇观

| 不指定 August 11, 2008 @ 13:52, Robin Hoo
点击在新窗口中浏览此图片
英国伦敦南部的一座教堂附近出现的闪电
点击在新窗口中浏览此图片
英国伦敦南部的一座教堂附近出现的闪电
点击在新窗口中浏览此图片
布莱顿当地摄影爱好者于6日晚上,捕捉到了西栈桥遗址背后地平线上的闪电奇观
点击在新窗口中浏览此图片
划过英国夜空的紫色闪电
点击在新窗口中浏览此图片
划过英国夜空的紫色闪电
点击在新窗口中浏览此图片
英国夜空出现的闪电
点击在新窗口中浏览此图片
英国夜空出现的闪电

  新浪科技讯 北京时间8月11日消息,据英国《每日邮报》报道,近日,英国夜空电闪雷鸣,蓝紫色的电光让人们大饱眼福。一些摄影爱好者拍下了闪电瞬间的奇观。

  其中最为壮观的景色之一是在布莱顿。当地摄影爱好者于6日晚上,捕捉到了西栈桥遗址背后地平线上的闪电奇观。当时正是夏季风暴正从南海岸经过艾塞克斯的时候,南伦敦上空划出了耀眼闪电。

  新闻协会MeteoGroup气象部资深专家朱利安·梅尔斯示,这次雷雨的云层位于从南海岸至艾塞克斯的狭长地带上,梅尔斯说:“这是我们看多过的最为壮观的闪电奇景之一。以苏塞克斯郡海岸的雷阵雨开始,傍晚时到达内陆地区,绕开南伦敦,向艾塞克斯方向移动。”

  艾塞克斯郡的切姆斯福德市上空暴雨倾盆而下,以致许多房屋和车辆都发出了警报声。闪电击中一间房屋的屋顶,并击出一个6英尺长4英尺宽的大洞,消防人员迅速赶到现场修补屋顶。

  与此同时,因为大雨倾空而下,英国和爱尔兰的一些其他地区也遭受着洪水袭击。降雨最多的城市是苏格兰,爱丁堡机场24小时的降雨量为2英寸。(孝文)

你肯定没有看过的奥运会

| 不指定 August 11, 2008 @ 13:13, Robin Hoo

《北京欢迎您》平民版

| 不指定 August 9, 2008 @ 10:50, Robin Hoo

在被气死之前,来点幽默的吧!


静静的看吧,慢慢的感动吧,可怜整个开幕式能触动心弦就这个了!

浅谈格律诗的平仄和节奏

| 不指定 August 5, 2008 @ 10:39, Robin Hoo

浅谈格律诗的平仄和节奏

初学者常为格律诗平仄规律挠头,老鹤不才,按自己的理解与记忆方式,写下此文,与诸诗友商榷。

一、格律诗律句平仄基本格式不外乎以下几种:

1、(平平)仄仄平平仄

2、(仄仄)平平仄仄平

3、(仄仄)平平平仄仄

4、(平平)仄仄仄平平

为区分五言、七言,并容易记忆,写成上述形式,去掉()内的字,就是五言,若是七言,只将括号去掉就行了。下同。

二、格律诗平仄的生成

1、以上各种句型均可作为首句;

2、第二句第二字要和第一句第二字平仄相反,就是平常所说的对,以后各句中,偶数句第二字都要和前面的奇数句第二字平仄相反;

3、第三句第二字要和第二句第二字平仄相同,就是平常所说的粘,以后各句中,奇数句第二字都要和前面的偶数句第二字平仄相同;

4、如此延续,就可以生成绝句、律诗的平仄制式。

5、格律诗本有平韵、仄韵两类,如今仄韵诗已经很少有人写了。生成格律诗的制式时,要注意到凡偶数句是必须押韵的。

三、律句的变化

习有“一三五不论,二四六分明”的说法,根据律句忌犯孤平和三平调的要求,常用变化如下:

标准律句                               常用变化

1、(平平)仄仄平平仄    1)、(仄平)仄仄平平仄

                                              2)、(仄平)平仄平平仄

                                              3)、(仄平)平仄仄平仄

2、(仄仄)平平仄仄平    1)、(平仄)平平仄仄平

                                              2)、(平仄)仄平仄仄平(五言不可用)

                                              3)、(平仄)仄平平仄平

3、(仄仄)平平平仄仄    1)、(平仄)平平平仄仄

                                              2)、(平仄)仄平平仄仄

                       (3)、(仄仄)平平仄平仄

                       (4)、(平仄)平平仄平仄

4、(平平)仄仄仄平平    1)、(仄平)仄仄仄平平

                                              2)、(仄平)平仄仄平平 

要点:

1、可变化的多为第135字(五言第1、3字);

2、忌犯孤平,即不允许在押韵句内除韵脚外只有一个平声字(五言仄仄仄平平除外);

3、忌犯连三平,即在句首(五言除外)或句尾连续出现三个平声字;

4、忌犯连三仄,即在句首(五言除外)或句尾连续出现三个仄声字;

5、古人格律诗中也有许多特例,如多字连仄,失粘等,也不失为好诗好句,初学之时不宜仿效。

四、格律诗的节奏

1、常用节奏:

1)、解鐙节奏:(2)、221(或(2)、23

2)、撷腰节奏:(2)、212(或(2)、32

2、格律诗自第一句起,每两句称为一联,每一联中的两句宜用同样的节奏;

3、相近两联不宜用同样的节奏。两联连用节奏(1),称为长解鐙;两联连用节奏(2),称为长撷腰。都是不妥的。

分页: 2/13 第一页 上页 1 2 3 4 5 6 7 8 9 10 下页 最后页 [ 显示模式: 摘要 | 列表 ]