当前位置:首页 » 编程博文
开发技术指南» 文章正文
    引言: 分油问题ix = o ns = "urn:schema
 

 

 ·一个javascript的日历    »显示摘要«
    摘要:改自blog上流行的日历,增加了一些效果,修改了外观,优化了代码。效果见左边吧。 代码如下: <script language="javascript"> var months = new array("一", "二", "三","四", "五"......
    摘要:大多数具有一定重要性的 web 应用程序都要求维护某种会话状态,如用户购物车的内容。如何在群集服务器应用程序中管理和复制状态对应用程序的可伸缩性有显著影响。许多 j2se 和 j2ee 应用程序将状态存储在由 servlet api 提供的 httpsession 中。本月,专栏作家 brian goetz 分析了状态复制的一些选项以及如何最有效地使用 httpsession 以提供好的伸缩性和性......


深度和广度优先分油问题(C#实现)
分油问题

分油问题:两个小孩去打油,一人带了一个一斤的空瓶,另一个带了一个七两与一个三两的空瓶.原计划各打一斤油,可是由于所带的钱不够,只好合打了一斤油,在回家的路上,二人想平分这一斤油,可是又没有其它工具.现只用这三个瓶子(一斤.七两.三两)精确地分出两个半斤油来. 【程序编程相关:Spring指南(官网)

-.问题描述 【推荐阅读:创建自定义模板 Building Cus

f   算法选择 【扩展信息:设计模式学习笔记——《设计模式》引言

二.算法描述

通过分析题目并结合深度优先.广度优先与迭代加深搜索的算法的特点以及有缺点,这里选择广度优先算法来求解该分油问题.如果采用深度优先算法搜索,由于其盲目性导致搜索陷入局部陷阱,并不一定能求得解即使得到解也不一定是最优解,因此并不采用此算法.迭代加深搜索则是在固定的深度上进行深度与广度搜索结合的策略来进行搜索,这样避免了单一的深度搜索无法得到解的缺点,但是找到的解并不一定是最优解.广度优先以牺牲空间代价与时间代价来换取保证取得最优解.由于该问题并不复杂,即使使用广度优先算法也不会占有太多的空间与时间,因此为了取得最优解这里选择广度优先算法来求解.

f   算法描述

1. 用unvisitedbttsarr表示初始节点列表(待扩展,此为一个动态数组)

2. 如果unvisitedbttsarr为空集,则退出并给出失败信号

3. n取为unvisitedbttsarr的第一个节点,并在  unvisitedbttsarr中删除节点n,放入已访问节点列表havevisitedbttsarr

4. 如果n为目标节点,则退出并给出成功信号

5. 否则,将n的子节点加到n的末尾,并返回2)步

f   问题分析

l     选择合适的数据结构表示问题状态

f   用向量(t,s,r)表示状态——t表示10两瓶中的油量,s表示7两瓶中的油量,r表示3两瓶中的油量.

f   问题的起始状态:(10,0,0).

f   问题的目标状态:(5,2,3)或者(5,3,2)或者(5,5,0).

l     确定智能算子,用以表示变化状态的规则.由于总共油量为10两,而10两的瓶可以装满所有的油,因此可以把10两的瓶当作一个大油桶,这样此题就化为与上一题8/6类似的问题了.因此在描述变化状态的时候只需给出7.3瓶的状态即可,10瓶的状态即为10-s-r的油量.可是由于在程序处理上的一致性,在程序的实现上我还是把10.8.6的瓶子统一处理,而不是用两个状态表示.

规则

解释

1

(s,r) and s<7 à (7,r)

7斤瓶不满时装满

2

(s,r) and r <3 à (s,3)

3斤瓶不满时装满

3

(s,r) and s >0 à (0,r)

7斤瓶不空时倒空

4

(s,r) and r >0 à (s,0)

3斤瓶不空时倒空

5

(s,r) and s>0 and s+r≤3à (0,s+r)

7斤瓶中油全倒入3斤瓶

6

(s,r) and r >0 and s+r≤7à (s+r,0)

3斤瓶中油全倒入7斤瓶

7

(s,r) and s<7 and s+r≥7à (7, s+r -7)

用3斤瓶油装满7斤瓶子

8

(s,r) and r <3 and s+r≥3à (s+r -3,3)

用7斤瓶油装满3斤瓶子

三.程序设计

算法使用c#语言来实现的.程序主要根据上面提供的广度优先算法的描述来对算法进行实现的.程序共有四个类:

bottle类,用来描述瓶子的状态以及一些行为动作与属性.

widthsearch类,是广度优先搜索算法的实现类

depthsearch类,是深度优先搜索算法的实现类

mainform类,是界面设计的类.

这里提供两个算法的实现主要是为了做个对比.

以下主要对几个核心算法的程序实现进行说明介绍.

     //瓶子类

public class bottle

     {

         int capability = 0 ;//瓶子的总容量


...   下一页
 ·windows网络编程(一)    »显示摘要«
    摘要:windows网络编程(一) 1. 关于bind inaddr_any 的具体含义是,绑定到0.0.0.0。此时,对所有的地址都将是有效的,如果系统考虑冗余,采用多个网卡的话,那么使用此种bind,将在所有网卡上进行绑定。在这种情况下,你可以收到发送到所有有效地址上数据包。 例如: sockaddr_in local; local.sin_addr.s_addr = htonl(......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE