??xml version="1.0" encoding="utf-8" standalone="yes"?>www.xxxx精品,亚洲黄色成人,国产精品免费不http://www.aygfsteel.com/heiyuchuanxia/On The Road of Web Serviceszh-cnSat, 17 May 2025 15:06:23 GMTSat, 17 May 2025 15:06:23 GMT60字符串验?-java.util.regex.Patternhttp://www.aygfsteel.com/heiyuchuanxia/archive/2006/11/18/81974.htmlStefanieStefanieSat, 18 Nov 2006 14:38:00 GMThttp://www.aygfsteel.com/heiyuchuanxia/archive/2006/11/18/81974.htmlhttp://www.aygfsteel.com/heiyuchuanxia/comments/81974.htmlhttp://www.aygfsteel.com/heiyuchuanxia/archive/2006/11/18/81974.html#Feedback1http://www.aygfsteel.com/heiyuchuanxia/comments/commentRss/81974.htmlhttp://www.aygfsteel.com/heiyuchuanxia/services/trackbacks/81974.htmljava.util.regex.Patternc?...挺有意思的...一起分享一?..... 

java.util.regex
c?Pattern

java.lang.Objectjava.util.regex.Pattern
所有已实现的接口:(x)
Serializable

public final class Pattern
extends Object
implements Serializable

正则表达式的~译表示形式?

指定为字W串的正则表辑ּ必须首先被编译ؓ(f)此类的实例。然后,可将得到的模式用于创?字符序列匚w。执行匹配所涉及(qing)的所有状态都ȝ在匹配器中,所以多个匹配器可以׃n同一模式?

因此Q典型的调用序?

 Pattern p = Pattern.compile("a*b");
 Matcher m = p.matcher("aaaaab");
 boolean b = m.matches();

在仅使用一ơ正则表辑ּӞ可以方便地通过此类定义 {效于上面的三个语句Q尽对于重复的匚w而言它效率不高,因ؓ(f)它不允许重用已编译的模式?

此类的实例是不可变的Q可供多个ƈ发线E安全用?a title="java.util.regex 中的c? href="mk:@MSITStore:C:\Documents%20and%20Settings\new\桌面\Java5.0API_CH\Java5.0API_CH.CHM::/Java5.0API_CH/java/util/regex/Matcher.html">

正则表达式的构造摘?

构?/th>匚w
 
字符
x字符 x
反斜U字W?/td>
带有八进制?<= n 带有八进制?<= n 带有八进制?<= m <= n 带有十六q制值?tt>带有十六q制值?tt>制表W?(新行Q换行)(j)W?(回RW?(换页W?(报警 (bell) W?(转义W?(对应?x 的控制符
 
字符c?/th>
b ?M字符Q除?b ?z ?ZQ两头的字母包括在内Q范_(d)(j)
d ?pQ?tt>e ?zQ除?cQ?tt>zQ而非 pQ?tt>预定义字W类
M字符Q与行结束符可能匚w也可能不匚wQ?/td>
数字Q?tt>非数字:(x) I白字符Q?tt>非空白字W:(x)单词字符Q?tt>非单词字W:(x)POSIX 字符c(?US-ASCIIQ?b>
写字母字符Q?tt>大写字母字符Q?tt>所?ASCIIQ?tt>字母字符Q?tt>十进制数字:(x)字母数字字符Q?tt>标点W号Q?tt>
可见字符Q?tt>可打印字W:(x)I格或制表符Q?tt>控制字符Q?tt>十六q制数字Q?tt>I白字符Q?tt>java.lang.Character c(单的 java 字符cdQ?/th>
Unicode 块和cd的类
Greek 块(?a href="mk:@MSITStore:C:\Documents%20and%20Settings\new\桌面\Java5.0API_CH\Java5.0API_CH.CHM::/Java5.0API_CH/java/util/regex/Pattern.html#ubc">?/a>Q中的字W?/td>
大写字母Q简?a href="mk:@MSITStore:C:\Documents%20and%20Settings\new\桌面\Java5.0API_CH\Java5.0API_CH.CHM::/Java5.0API_CH/java/util/regex/Pattern.html#ubc">cdQ?/td>
货币W号
所有字W,Greek 块中的除外(否定Q?/td>
所有字母,大写字母除外Q减去)(j)
 
边界匚w?/th>
行的开?/td>
行的l尾
单词边界
非单词边?/td>
输入的开?/td>
上一个匹配的l尾
输入的结,仅用于最后的l束W?/a>Q如果有的话Q?/td>
输入的结?/td>
 
Greedy 数量?/th>
XXQ一ơ或一ơ也没有
XXQ零ơ或多次
XXQ一ơ或多次
X}XQ恰?n ?/td>
X,}XQ至?n ?/td>
X,mXQ至?n ơ,但是不超q?m ?/td>
 
Reluctant 数量?/th>
XXQ一ơ或一ơ也没有
XXQ零ơ或多次
XXQ一ơ或多次
X}?XQ恰?n ?/td>
X,}?XQ至?n ?/td>
X,mXQ至?n ơ,但是不超q?m ?/td>
 
Possessive 数量?/th>
XXQ一ơ或一ơ也没有
XXQ零ơ或多次
XXQ一ơ或多次
X}+XQ恰?n ?/td>
X,}+XQ至?n ?/td>
X,mXQ至?n ơ,但是不超q?m ?/td>
 
Logical q算W?/th>
XYX 后跟 Y
XX ?Y
)XQ作?a href="mk:@MSITStore:C:\Documents%20and%20Settings\new\桌面\Java5.0API_CH\Java5.0API_CH.CHM::/Java5.0API_CH/java/util/regex/Pattern.html#cg">捕获l?/a>
 
Back 引用
M匚w?nth捕获l?/a>
 
引用
NothingQ但是引用以下字W?/td>
NothingQ但是引用所有字W,直到 NothingQ但是结束从 Ҏ(gu)构造(非捕P(j)
)XQ作为非捕获l?/td>
NothingQ但是将匚w标志?on 转ؓ(f) off
)  XQ作为带有给定标?on - off ?a href="mk:@MSITStore:C:\Documents%20and%20Settings\new\桌面\Java5.0API_CH\Java5.0API_CH.CHM::/Java5.0API_CH/java/util/regex/Pattern.html#cg">非捕L(fng)
)XQ通过零宽度的?lookahead
)XQ通过零宽度的?lookahead
)XQ通过零宽度的?lookbehind
)XQ通过零宽度的?lookbehind
)XQ作为独立的非捕L(fng)

反斜Uѝ{义和引用

反斜U字W?(\\ 与单个反斜线匚wQ?"\b" 与单个退格字W匹配,? 与单词边界匹配。字W串字面? 是非法的Q将D~译旉误;要与字符?"\\(hello\\)"?

字符c?

字符cd以出现在其他字符cMQƈ且可以包含ƈ集运符Q隐式)(j)和交集运符 (1    字面D{义   ?/td>[...]3    范围[a-e][i-u]5    交集. 在字W类内部失M其特D意义,而表辑ּ

行结束符

行结束符 是一个或两个字符的序列,标记输入字符序列的行l尾。以下代码被识别l束W:(x)

如果Ȁz?. 可以与Q何字W(行结束符除外Q匹配?

默认情况下,正则表达?$ 忽略行结束符Q仅分别与整个输入序列的开头和l尾匚w。如果激z?^ 在输入的开头和行结束符之后Q输入的l尾Q才发生匚w。处?$ 仅在行结束符之前或输入序列的l尾处匹配?

l和捕获

捕获l可以通过从左到右计算其开括号来编受例如,在表辑ּ 1    \A3    (C)

l零始终代表整个表达式?

之所以这样命名捕L(fng)是因为在匚w中,保存了与q些l匹配的输入序列的每个子序列。捕L(fng)子序列稍后可以通过 Back 引用在表辑ּ中用,也可以在匚w操作完成后从匚w器检索?

与组兌的捕莯入始l是与组最q匹配的子序列。如果由于量化的~故再次计算了组Q则在第二次计算p|时将保留其以前捕L(fng)|如果有的话)(j)例如Q将字符? 与表辑ּ "b"。在每个匚w的开_(d)所有捕L(fng)输入都会(x)被丢弃?

?\u2014Q是按照 Java Language Specification ?W?3.3 ?/a>中的描述处理的。这L(fng)转义序列q可以由正则表达式分析器直接实现Q以便在从文件或键盘击键d的表辑ּ中?Unicode 转义。因此,可以不相等的字W串 ? ~译为相同的模式Q从而与带有十六q制?

?Perl 中一PUnicode 块和cd是?\P 构造编写的。如果输入具有属?propQ则?} 匚wQ而输入具有该属性时?\P{propIn 指定Q与?Is 指定cdQ?tt>\p{IsL} 都表C?Unicode 字母的类别。块和类别在字符cȝ内部和外部都可以使用?

受支持的cd是由 Pattern 所支持的块名称?

行ؓ(f)cM java.lang.Character boolean ?methodname Ҏ(gu)Q废弃的cd除外Q的cdQ可以通过相同?} 语法来提供,其中指定的属性具有名U?Pattern 引擎用有序替换项执行传统上基?NFA 的匹配,?Perl 5 中进行的相同?

此类不支?Perl 构造:(x)

?Perl 的显著不同点是:(x)

  • ?Perl 中,\9 始终被解释ؓ(f) Back 引用Q如果至存在多个子表达式,则大?\1 ?g 标志h恢复最后匹配丢q匚w。此功能是由 *a 中,以及(qing)不匹配的括号Q如在在表达?序列化表?/a>


    字段摘要
    static intstatic intstatic intstatic intstatic intstatic intstatic intstatic int
    Ҏ(gu)摘要
    ( regex)
              给定的正则表达式编译到模式中?/td>
    ( regex, int flags)
              给定的正则表达式编译到hl定标志的模式中?/td>
     int()
              q回此模式的匚w标志?/td>
    ( input)
              创徏匚wl定输入与此模式的匹配器?/td>
    static boolean( regex,  input)
              ~译l定正则表达式ƈ试给定输入与其匹配?/td>
    ()
              q回在其中编译过此模式的正则表达式?/td>
    ( s)
              q回指定 String?/td>
    []( input)
              围绕此模式的匚w拆分l定输入序列?/td>
    []( input, int limit)
              围绕此模式的匚w拆分l定输入序列?/td>
    ()
              q回此模式的字符串表CŞ式?/td>
     
    从类 java.lang.Object l承的方?/b>
    , , , , , , , , , \\.\\w+)+", email);



    Stefanie 2006-11-18 22:38 发表评论
    ]]>P2P|络的拓扑结?/title><link>http://www.aygfsteel.com/heiyuchuanxia/archive/2006/11/15/81271.html</link><dc:creator>Stefanie</dc:creator><author>Stefanie</author><pubDate>Wed, 15 Nov 2006 07:28:00 GMT</pubDate><guid>http://www.aygfsteel.com/heiyuchuanxia/archive/2006/11/15/81271.html</guid><wfw:comment>http://www.aygfsteel.com/heiyuchuanxia/comments/81271.html</wfw:comment><comments>http://www.aygfsteel.com/heiyuchuanxia/archive/2006/11/15/81271.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/heiyuchuanxia/comments/commentRss/81271.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/heiyuchuanxia/services/trackbacks/81271.html</trackback:ping><description><![CDATA[ <p align="left"> <font size="5">P2P|络的拓扑结?br /></font> <br />拓扑l构是指分布式系l中各个计算单元之间的物理或逻辑的互联关p,l点之间的拓扑结构一直是定pȝcd的重要依据。目前互联网l中q泛使用集中式、层ơ式{拓扑结构。Internet本n是世界上最大的非集中式的互联网l,但是?ji)十q代所建立的一些网l应用系l却是完全的集中式的pȝQ许多Web应用都是q行在集中式的服务器pȝ上。集中式拓扑l构pȝ目前面(f)着q量存储负蝲、DOSQDenial of ServiceQ拒l服务)(j)dQ网l带宽限制等一些难以解决的问题。Peer-to-Peer (UP2P) pȝ主要采用非集中式的拓扑结构,一般来说不存在上述q些N。根据结构关pd以将P2Ppȝl分为四U拓扑Ş式:(x)</p> <ul> <li> <strong>中心化拓?/strong>QCentralized TopologyQ; </li> <li> <strong>全分布式非结构化拓扑</strong>QDecentralized Unstructured TopologyQ; </li> <li> <strong>全分布式l构化拓?/strong>QDecentralized Structured TopologyQ也UCDHT|络Q; </li> <li> <strong>半分布式拓扑</strong>QPartially Decentralized TopologyQ?</li> </ul> <p align="left">其中Q?strong>中心化拓?/strong>最大的优点是维护简单,资源发现效率高。由于资源的发现依赖中心化的目录pȝQ发现算法灵z高效ƈ能够实现复杂查询。最大的问题与传l客h/服务器结构类|Ҏ(gu)造成单点故障Q访问的“热点”现象和版权U纷{相关问题,q是W一代P2P|络采用的结构模式,l典案例是著名的MP3׃n软gNapster[1].</p> <p align="left">Napster是最早出现的P2Ppȝ之一Qƈ在短期内q速成长v来。它实质上ƈ非是Ua(b)的P2PpȝQ而是通过一个中央烦(ch)引服务器保存所有Napster用户上传的音乐文件烦(ch)引和存放位置的信息。它的工作原理如?所C。当某个用户需要某个音乐文件时Q首先连接到Napster中央索引服务器,在服务器上进行检索,服务器返回存有该文g的用户信息,再由h者直接连到文件的所有者传输文件。Napster首先实现了文件查询与文g传输的分,有效地节省了中央服务器的带宽消耗,减少了系l的文g传输延时?/p> <p align="center"> <img height="316" src="http://www.intsci.ac.cn/users/luojw/P2P/images/2_1.JPG" width="422" /> </p> <p align="center">? Napster的拓扑结?/p> <p align="left">然而,q种对等|络模型存在以下q些问题Q?/p> <ul> <li>中央索引服务器的瘫痪Ҏ(gu)D整个|络的崩溃,因此可靠性和安全性较低? </li> <li>随着|络规模的扩大,对中央烦(ch)引服务器q行l护和更新的费用急剧增加Q所需成本较高? </li> <li>中央索引服务器的存在常引L(fng)权问题上的纠UP服务提供商容易被q究法律责Q?strong></strong></li> </ul> <p align="left">l合上述优缺点,对小型网l而言Q?strong>中心化拓?/strong>模型在管理和控制斚w占一定优ѝ但鉴于其存在的上述~陷Q该模型q不适合大型|络应用?strong></strong></p> <p align="left"> <strong>全分布式非结构化拓扑的P2P</strong>|络是在重叠|络QOverlay NetworkQ?a name="_ftnref1"></a>(见标?)采用了随机图的组l方式,l点度数服从Power-law规律Q幂ơ法则)(j)[2]Q从而能够较快发现目的结点,面对|络的动态变化体C较好的容错能力,因此h较好的可用性。同时可以支持复杂查询,如带有规则表辑ּ的多关键词查询,模糊查询{,采用q种拓扑l构最典型的案例便是GnutellaQ音译:(x)U特拉)(j)。准地_(d)Gnutella不是Ҏ(gu)某一ƾYӞ而是指遵守Gnutella协议[3]的网l以?qing)客L(fng)软g的统U。目前基于Gnutella|络的客L(fng)软g非常多,著名的有<a >Shareaza</a>?a >LimeWire</a>和BearShare{?/p> <p align="center"> <img height="331" src="http://www.intsci.ac.cn/users/luojw/P2P/images/2_2.JPG" width="452" /> </p> <p align="center">?Gnutella的拓扑结构和文g(g)索方?/p> <p align="left">Gnutella和Napster最大的区别在于Gnutella是更加纯_的P2PpȝQ因为它没有中央索引服务器,每台机器在Gnutella|络中是真正的对{关p,既是客户机同时又是服务器Q所以被UCؓ(f)对等?ServentQServer+Client的组?。在文g(g)索方面,它与Napster也不相同。在Gnutella|络的发展初期,它主要采用基于完全随机图的Flooding搜烦(ch)法。图2 昄了Flooding的工作流E:(x)当一台计机要下载一个文Ӟ它首先以文g名或者关键字生成一个查询,q把q个查询发送给与它相连的所有计机Q这些计机如果存在q个文gQ则与查询的机器建立q接Q如果不存在q个文gQ则l箋在自q?c)计算Z间{发这个查询,直到扑ֈ文g为止。ؓ(f)了控制搜索消息不至于永远q样传递下去,一般通过TTL (Time To Live)的减值来控制查询的深度?/p> <p align="left">但是Q随着联网节点的不断增多,|络规模不断扩大Q通过q种Flooding方式定位对等点的Ҏ(gu)造成|络量急剧增加Q从而导致网l中部分低带宽节点因|络资源q蝲而失效。所以在初期的Gnutella|络中,存在比较严重的分区,断链现象。也是_(d)一个查询访问只能在|络的很一部分q行Q因此网l的可扩展性不好。所以,后来许多研究人员在Flooding的基上作了许多改q,例如采用Random work [4]、Dynamic Query[5]{方法?/p> <p align="left">׃非结构化|络重叠网l认为是一个完全随机图Q结点之间的链\没有遵@某些预先定义的拓扑来构徏。这些系l一般不提供性能保证Q但定w性好Q支持复杂的查询Qƈ受结炚wJ加入和退出系l的影响。但是查询的l果可能不完全,查询速度较慢Q采用Flooding查询的系l对|络带宽的消耗非常大Qƈ由此带来可扩展性差{问题?/p> <p align="left"> <strong>全分布式l构化拓?/strong>的P2P|络主要是采用分布式散列表(Distributed Hash Table, 写成DHTQ技术来l织|络中的l点。DHT是一个由q域范围大量l点共同l护的巨大散列表。散列表被分割成不连l的块,每个l点被分配给一个属于自q散列块,q成个散列块的管理者。通过加密散列函数Q一个对象的名字或关键词被映ؓ(f)128位或160位的散列倹{分布式散列表v源于SDDSQScalable Distribute Data StructuresQ[6]研究QGribble{实C一个高度可扩展Q容错的SDDS集群。DHTcȝ构能够自适应l点的动态加?退出,有着良好的可扩展性、鲁性、结点ID分配的均匀性和自组l能力。由于重叠网l采用了定性拓扑结构,DHT可以提供_的发现。只要目的结点存在于|络中DHT总能发现它,发现的准性得C保证Q最l典的案例是TapestryQPastryQChord和CAN?/p> <p align="left"> <strong>Tapestry [7]</strong>提供了一个分布式定w查找和\由基q_Q在此^台基之上Q可以开发各UP2P应用(OceanStore[8]x此^C的一个应?。Tapestry的思想来源于Plaxton。在Plaxton中,l点使用自己所知道的邻q结点表Q按照目的ID来逐步传递消息。TapestryZPlaxton的思想Q加入了定w机制Q从而可适应P2P的动态变化的特点。OceanStore是以Tapestry\由和查找基础设施的P2Pq_。它是一个适合于全球数据存储的P2P应用pȝ。Q何用户均可以加入OceanStorepȝQ或者共享自q存储I间Q或者用该pȝ中的资源。通过使用复制和缓存技术,OceanStore可提高查扄效率。最q,Tapestry为适应P2P|络的动态特性,作了很多改进Q增加了额外的机制实C|络的Y状态(soft stateQ,q提供了自组l、鲁性、可扩展性和动态适应性,当网l高负蝲且有失效l点时候性能有限降低Q消除了对全局信息的依赖、根l点易失效和Ҏ(gu)差的问题?/p> <p align="left"> <strong>Pastry </strong>是微软研I提出的可扩展的分布式对象定位和\由协议,可用于构建大规模的P2Ppȝ。如? 所C,在Pastry中,每个l点分配一?28位的l点标识W号(nodeID) Q所有的l点标识WŞ成了一个环形的nodeIDI间Q范围从0?128 - 1 Q结点加入系l时通过散列l点IP地址?28位nodeIDI间中随机分配。网l结点的加入与退出,资源查询的过E可以参考文献[9]?/p> <p align="center"> <img height="308" src="http://www.intsci.ac.cn/users/luojw/P2P/images/2_3.JPG" width="371" /> </p> <p align="center">?Pastry的消息\?strong></strong></p> <p align="left"> <strong>Chord [10]</strong>目诞生于美国的ȝ理工学院。它的目标是提供一个适合于P2P环境的分布式资源发现服务Q它通过使用DHT技术得发现指定对象只需要维护O(logN)长度的\p。在DHT技术中Q网l结Ҏ(gu)照一定的方式分配一个唯一l点标识W?Node ID) Q资源对象通过散列q算产生一个唯一的资源标识符(Object ID) Q且该资源将存储在结点ID与之相等或者相q的l点上。需要查找该资源Ӟ采用同样的方法可定位到存储该资源的结炏V因此,Chord的主要A(ch)献是提出了一个分布式查找协议Q该协议可将指定的关键字(Key) 映射到对应的l点(Node) 。从法来看QChord是相Ҏ(gu)列算法的变体?/p> <p align="center"> <img height="309" src="http://www.intsci.ac.cn/users/luojw/P2P/images/2_4.JPG" width="368" /> </p> <p align="center">? Chord的拓扑Ş?/p> <p align="left"> <strong>CAN</strong>(Content Addressable Networks)[11] 目采用多维的标识符I间来实现分布式散列法。CAN所有结Ҏ(gu)到一个nl的W卡?dng)空间中Qƈ为每个结点尽可能均匀的分配一块区域。CAN采用的散列函数通过?key, value) 对中的keyq行散列q算Q得到笛卡尔I间中的一个点Qƈ?key, value) 对存储在拥有该点所在区域的l点内。CAN采用的\q法相当直接和单,知道目标点的坐标后,将h传给当前l点四邻中坐标最接近目标点的l点。CAN是一个具有良好可扩展性的pȝQ给定N个结点,pȝl数为dQ则路由路径长度为O(n1/d) Q每l点l护的\p信息和网l规模无关ؓ(f)O(d) ?/p> <p align="left">上述四种ZDHT的P2Ppȝ的性能比较可以参照[12]。DHTq类l构最大的问题是DHT的维护机制较为复杂,其是结炚wJ加入退出造成的网lL动(ChurnQ会(x)极大增加DHT的维护代仗DHT所面(f)的另外一个问题是DHT仅支持精关键词匚w查询Q无法支持内?语义{复杂查询?/p> <p align="left"> <strong>半分布式拓扑l构</strong>Q有的文献亦UCh模式Q英文表达ؓ(f)Hybrid StructureQ吸取了中心化结构和全分布式非结构化拓扑的优点,选择性能较高Q处理、存储、带宽等斚w性能Q的l点作ؓ(f)l点Q英文表达ؓ(f)SuperNodes或者HubsQ,在各个超U结点上存储了系l中其他部分l点的信息,发现法仅在l点之间转发Q超U结点再查询请求{发给适当的叶子结炏V半分布式结构也是一个层ơ式l构Q超U结点之间构成一个高速{发层Q超U结点和所负责的普通结Ҏ(gu)成若q层ơ。采用这U结构的最典型的案例就?a >KaZaa</a>?/p> <p align="center"> <img height="246" src="http://www.intsci.ac.cn/users/luojw/P2P/images/2_5.JPG" width="334" /> </p> <p align="center">? 半分布式拓扑l构Q网l中包含Super NodeQ?/p> <p align="left">KaZaa是当前世界最行的几ƾP2P文g׃n软g之一。根据CA公司l计Q全球KaZaa的下载量过2.5亿次。用KaZaa软gq行文g传输消耗了互联|?0%的带宽。之所以它如此的成功,是因为它l合了Napster和Gnutella共同的优炏V从l构上来_(d)它用了Gnutella的全分布式的l构Q这样可以是pȝ更好的扩展,因ؓ(f)它无需中央索引服务器存储文件名Q它是自动的把性能好的机器成ؓ(f)SuperNodeQ它存储着d最q的叶子节点的文件信息,q些SuperNode,再连通v来Ş成一个Overlay Network. ׃SuperNode的烦(ch)引功能,使搜索效率大大提高?/p> <p align="center"> <img height="289" src="http://www.intsci.ac.cn/users/luojw/P2P/images/2_6.JPG" width="380" /> </p> <p align="center">? KaZaa的Y件界?/p> <p align="left">半分布式l构的优Ҏ(gu)性能、可扩展性较好,较容易管理,但对点依赖性大Q易于受到攻击,定w性也受到影响?/p> <p align="left">在实际应用中Q每U拓扑结构的P2P|络都有其优~点Q下表从可扩展性、可靠性、可l护性、发现算法的效率、复杂查询等斚w比较了这四种拓扑l构的综合性能?/p> <table cellspacing="1" cellpadding="0" align="center" border="1"> <tbody> <tr> <td valign="top" width="124"> <p align="left">比较标准Q拓扑结?/p> </td> <td valign="top" width="95"> <p align="left">中心化拓?/p> </td> <td valign="top" width="92"> <p align="left">全分布式非结构化拓扑</p> </td> <td valign="top" width="81"> <p align="left">全分布式l构化拓?/p> </td> <td valign="top" width="50"> <p align="left">半分布式拓扑</p> </td> </tr> <tr> <td valign="top" width="124"> <p align="left">可扩展?/p> </td> <td valign="top" width="95"> <p align="left">?/p> </td> <td valign="top" width="92"> <p align="left">?/p> </td> <td valign="top" width="81"> <p align="left">?/p> </td> <td valign="top" width="50"> <p align="left">?/p> </td> </tr> <tr> <td valign="top" width="124"> <p align="left">可靠?/p> </td> <td valign="top" width="95"> <p align="left">?/p> </td> <td valign="top" width="92"> <p align="left">?/p> </td> <td valign="top" width="81"> <p align="left">?/p> </td> <td valign="top" width="50"> <p align="left">?/p> </td> </tr> <tr> <td valign="top" width="124"> <p align="left">可维护?/p> </td> <td valign="top" width="95"> <p align="left">最?/p> </td> <td valign="top" width="92"> <p align="left">最?/p> </td> <td valign="top" width="81"> <p align="left">?/p> </td> <td valign="top" width="50"> <p align="left">?/p> </td> </tr> <tr> <td valign="top" width="124"> <p align="left">发现法效率</p> </td> <td valign="top" width="95"> <p align="left">最?/p> </td> <td valign="top" width="92"> <p align="left">?/p> </td> <td valign="top" width="81"> <p align="left">?/p> </td> <td valign="top" width="50"> <p align="left">?/p> </td> </tr> <tr> <td valign="top" width="124"> <p align="left">复杂查询</p> </td> <td valign="top" width="95"> <p align="left">支持</p> </td> <td valign="top" width="92"> <p align="left">支持</p> </td> <td valign="top" width="81"> <p align="left">不支?/p> </td> <td valign="top" width="50"> <p align="left">支持</p> </td> </tr> </tbody> </table> <br /> <br />我还是比较看好chord...虽然目前q有不少问题没有解决....<br />Z附上一经典的chord论文: Chord: A Scalable Peertopeer Lookup Service for Internet Applications<br /><a href="/Files/heiyuchuanxia/chord_sigcomm.rar">http://www.aygfsteel.com/Files/heiyuchuanxia/chord_sigcomm.rar</a><img src ="http://www.aygfsteel.com/heiyuchuanxia/aggbug/81271.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/heiyuchuanxia/" target="_blank">Stefanie</a> 2006-11-15 15:28 <a href="http://www.aygfsteel.com/heiyuchuanxia/archive/2006/11/15/81271.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Sematic Web Services Summeryhttp://www.aygfsteel.com/heiyuchuanxia/archive/2006/11/12/80691.htmlStefanieStefanieSun, 12 Nov 2006 06:00:00 GMThttp://www.aygfsteel.com/heiyuchuanxia/archive/2006/11/12/80691.htmlhttp://www.aygfsteel.com/heiyuchuanxia/comments/80691.htmlhttp://www.aygfsteel.com/heiyuchuanxia/archive/2006/11/12/80691.html#Feedback1http://www.aygfsteel.com/heiyuchuanxia/comments/commentRss/80691.htmlhttp://www.aygfsteel.com/heiyuchuanxia/services/trackbacks/80691.html阅读全文

    Stefanie 2006-11-12 14:00 发表评论
    ]]>
    深入JAVA初始?/title><link>http://www.aygfsteel.com/heiyuchuanxia/archive/2006/11/05/79193.html</link><dc:creator>Stefanie</dc:creator><author>Stefanie</author><pubDate>Sun, 05 Nov 2006 06:43:00 GMT</pubDate><guid>http://www.aygfsteel.com/heiyuchuanxia/archive/2006/11/05/79193.html</guid><wfw:comment>http://www.aygfsteel.com/heiyuchuanxia/comments/79193.html</wfw:comment><comments>http://www.aygfsteel.com/heiyuchuanxia/archive/2006/11/05/79193.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/heiyuchuanxia/comments/commentRss/79193.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/heiyuchuanxia/services/trackbacks/79193.html</trackback:ping><description><![CDATA[      最q的E序中L出现写奇怪的问题....于是乎就查了一点相关的资料....扑ֈ了这样一片相关的文章....感觉收获挺多?....      分n分n.......<br />  <br />      关于Java 初始化,有多文章都用了很大篇q的介绍。经典的<<Thinking in java>>更是用了专门的一章来介绍Java初始化。但在大量有代码实例后面Q感觉上仍然没有真正深入到初始化的本质? <p>  本文以作者对JVM的理解和自己的经验,对Java的初始化做一个比深入的说明,׃作者有水^限制Q以?qing)JDK各实现版本的变化Q可能仍然有不少错误和缺炏V欢q行安手赐教?/p><p>  要深入了解Java初始化,我们无法知道从程序流E上知道JVM是按什么顺序来执行的。了解JVM的执行机制和堆栈跟踪是有效的手段。可惜的是,到目前ؓ(f)止。JDK1?和JDK1?在javap功能上却仍然存在着BUG。所以有些过E我无法用实际的l果向你证明两种相反的情c(din)?/p><p>  <<Thinking in java>>(W三?在第四章一开始的时?q样来描qJava的初始化工作:</p><p>  以下译文原文:</p><p>  可以q样认ؓ(f),每个c都有一个名为Initialize()的方?q个名字暗CZ它得在用之前调?不幸的是,q么做的?用户得C要调用这个方?javacd的设计者们可以通过一U被UCؓ(f)构造函数的Ҏ(gu)Ҏ(gu),来保证每个对象都能得到被始化.如果cL构造函?那么java׃(x)在对象刚刚创?用户q来不及(qing)得到的时?自动调用那个构造函?q样初始化就有保障了?/p><p>  我不知道原作者的描述和译者的理解之间有多大的差异,l合全章,我没有发C个最关键的字"<clinit>"?<init>"。至说明原作者和译者ƈ没有真正说明JVM在初始化时做了什?或者说q不了解JVM的初始化内幕,要不然明明有q两个方?却ؓ(f)什么要认ؓ(f)有一个事实上q不存在?Initialize()"Ҏ(gu)?</p><p>  "<clinit>"?<init>"Ҏ(gu)在哪里?q两个方法是实际存在而你又找不到的方法,也许正是q样才得一些大师都犯晕。加上jdk实现上的一些BUGQ如果没有深入了解,真的让h怸着北?/p><p>  现在U学体系有一个奇怪的现象Q那么庞大的体系最初都是徏立在一个假讄基础是,假设1是正的Q由此推导出2Q再l箋推导?0000000000。可惜的是太多的人根本不在乎2-100000000000q样的体p都是徏立在假设1是正的基础上的。我q不?x)用“可以这栯为”这L(fng)假设Q我要确实证?<clinit>"?<init>"Ҏ(gu)是真真实实的存在的:(x)</p><pre class="code"> package debug; public class MyTest{ static int i = 100/0; public static void main(String[] args){ Ssytem.out.println("Hello,World!"); } } </pre><p>  执行一下看?q是jdk1.5的输出:(x)</p><pre class="code">java.lang.ExceptionInInitializerError Caused by: java.lang.ArithmeticException: / by zero at debug.MyTest.<clinit>(Test.java:3) Exception in thread "main" </clinit></pre><p>  h意,和其它方法调用时产生的异怸P异常被定位于debug.MyTest?lt;clinit>.</p><p>  再来看:(x)</p><pre class="code">package debug; public class Test { Test(){ int i = 100 / 0; } public static void main(String[] args) { new Test(); } }<br />jdk1.5输入Q?br /> Exception in thread "main" java.lang.ArithmeticException: / by zero at debug.Test.<init>(Test.java:4) at debug.Test.main(Test.java:7) <br />JVMq没有把异常定位在Test()构造方法中Q而是在debug.Test.<init>?p>  当我们看Cq两个方法以后,我们再来详细讨论q两个“内|初始化Ҏ(gu)”(我ƈ不喜Ƣ生造一?/p><p>  非标准的术语Q但我确实不知道如何规范地称g们)(j)?/p><p>  内置初始化方法是JVM在内部专门用于初始化的特有方法,而不是提供给E序员调用的Ҏ(gu)Q事实上?lt;>”这L(fng)语法在源E序中你q编译都无法通过。这p明,初始化是由JVM控制而不是让E序员来控制的?/p><h3>cd始化Ҏ(gu)Q?lt;clinit></h3><p>  我没有从M地方了解?lt;clinit>的cl是不是class的简写,但这个方法确实是用来对“类”进行初</p><p>  始化的。换句话说它是用来初始化static上下文的?/p><p>  在类装蝲QloadQ时QJVM?x)调用内|的<clinit>Ҏ(gu)对类成员和静态初始化块进行初始化调用。它们的序按照源文件的原文序?/p><p>  我们E微增加两行static语句Q?/p><pre class="code">package debug; public class Test { static int x = 0; static String s = "123"; static { String s1 = "456"; if(1==1) throw new RuntimeException(); } public static void main(String[] args) { new Test(); } } </pre><p>  然后q行反编译:(x)</p><pre class="code">javap -c debug.Test Compiled from "Test.java" public class debug.Test extends java.lang.Object{ static int x; static java.lang.String s; public debug.Test(); Code: 0: aload_0 1: invokespecial #1; //Method java/lang/Object."<init>":()V 4: return public static void main(java.lang.String[]); Code: 0: new #2; //class debug/Test 3: dup 4: invokespecial #3; //Method "<init>":()V 7: pop 8: return static {}; Code: 0: iconst_0 1: putstatic #4; //Field x:I 4: ldc #5; //String 123 6: putstatic #6; //Field s:Ljava/lang/String; 9: ldc #7; //String 456 11: astore_0 12: new #8; //class java/lang/RuntimeException 15: dup 16: invokespecial #9; //Method java/lang/RuntimeException."<init>":()V 19: athrow<br />我们可以看到,cd始化正是按照源文件中定义的原文顺序进行。先是声?pre class="code"> static int x; static java.lang.String s;</pre><p>  然后对int x和String sq行赋|(x)</p><pre class="code"> 0: iconst_0 1: putstatic #4; //Field x:I 4: ldc #5; //String 123 6: putstatic #6; //Field s:Ljava/lang/String; </pre><p>  执行初始化块的String s1 = "456";生成一个RuntimeException?/p><pre class="code"> 9: ldc #7; //String 456 11: astore_0 12: new #8; //class java/lang/RuntimeException 15: dup 16: invokespecial #9; //Method java/lang/RuntimeException."<init>":()V 19: athrow </init></pre><p>  要明白的是,"<clinit>"Ҏ(gu)不仅是类初始化方法,而且也是接口初始化方法。ƈ不是所以接?/p><p>  的属性都是内联的Q只有直接赋帔R值的接口帔R才会(x)内联。?/p><p>  [public static final] double d = Math.random()*100;</p><p>  q样的表辑ּ是需要计的Q在接口中就要由"<clinit>"Ҏ(gu)来初始化?/p><h3>下面我们再来看看实例初始化方?<init>"</h3><p>  "<init>"用于对象创徏时对对象q行初始化,当在HEAP中创建对象时Q一旦在HEAP分配了空间。最先就?x)调?<init>"Ҏ(gu)。这个方法包括实例变量的赋|声明不在其中Q和初始化块Q以?qing)构造方法调用。如果有多个重蝲的构造方法,每个构造方法都?x)有一个对应的"<init>"Ҏ(gu)。构造方法隐式或昄调用父类的构造方法前,L先执行实例变量初始化和初始化?同样Q实例变量和初始化块的顺序也是按源文件的原文序执行Q构造方法中的代码在最后执行:(x)</p><br /><pre class="code">package debug; public class Test { int x = 0; String s = "123"; { String s1 = "456"; //if(1==1) //throw new RuntimeException(); } public Test(){ String ss = "789"; } public static void main(String[] args) { new Test(); } } javap -c debug.Test的结果:(x) Compiled from "Test.java" public class debug.Test extends java.lang.Object{ int x; java.lang.String s; public debug.Test(); Code: 0: aload_0 1: invokespecial #1; //Method java/lang/Object."<init>":()V 4: aload_0 5: iconst_0 6: putfield #2; //Field x:I 9: aload_0 10: ldc #3; //String 123 12: putfield #4; //Field s:Ljava/lang/String; 15: ldc #5; //String 456 17: astore_1 18: ldc #6; //String 789 20: astore_1 21: return public static void main(java.lang.String[]); Code: 0: new #7; //class debug/Test 3: dup 4: invokespecial #8; //Method "<init>":()V 7: pop 8: return } </init></init></pre><p>  如果在同一个类中,一个构造方法调用了另一个构造方法,那么对应?<init>"Ҏ(gu)׃(x)调用另一</p><p>  ?<init>"Q但是实例变量和初始化块?x)被忽略Q否则它们就?x)被多次执行?/p><pre class="code">package debug; public class Test { String s1 = rt("s1"); String s2 = "s2"; public Test(){ s1 = "s1"; } public Test(String s){ this(); if(1==1) throw new Runtime(); } String rt(String s){ return s; } public static void main(String[] args) { new Test(""); } } </pre><p>  反编译的l果Q?/p><pre class="code">Compiled from "Test.java" public class debug.Test extends java.lang.Object{ java.lang.String s1; java.lang.String s2; public debug.Test(); Code: 0: aload_0 1: invokespecial #1; //Method java/lang/Object."<init>":()V 4: aload_0 5: aload_0 6: ldc #2; //String s1 8: invokevirtual #3; //Method rt:(Ljava/lang/String;)Ljava/lang/String; 11: putfield #4; //Field s1:Ljava/lang/String; 14: aload_0 15: ldc #5; //String s2 17: putfield #6; //Field s2:Ljava/lang/String; 20: aload_0 21: ldc #2; //String s1 23: putfield #4; //Field s1:Ljava/lang/String; 26: return public debug.Test(java.lang.String); Code: 0: aload_0 1: invokespecial #7; //Method "<init>":()V 4: new #8; //class java/lang/RuntimeException 7: dup 8: invokespecial #9; //Method java/lang/RuntimeException."<init>":()V 11: athrow java.lang.String rt(java.lang.String); Code: 0: aload_1 1: areturn public static void main(java.lang.String[]); Code: 0: new #10; //class debug/Test 3: dup 4: ldc #11; //String 6: invokespecial #12; //Method "<init>":(Ljava/lang/String;)V 9: pop 10: return } </init></init></init></init></pre><p>  我们看到Q由于Test(String s)调用了Test();所?<init>":(Ljava/lang/String;)V不再?/p><p>  实例变量和初始化块进ơ初始化Q?/p><pre class="code">public debug.Test(java.lang.String); Code: 0: aload_0 1: invokespecial #7; //Method "<init>":()V 4: new #8; //class java/lang/RuntimeException 7: dup 8: invokespecial #9; //Method java/lang/RuntimeException."<init>":()V 11: athrow </init></init></pre><p>  而如果两个构造方法是怺独立的,则每个构造方法调用前都会(x)执行实例变量和初始化块的调用Q?/p><pre class="code">package debug; public class Test { String s1 = rt("s1"); String s2 = "s2"; { String s3 = "s3"; } public Test() { s1 = "s1"; } public Test(String s) { if (1 == 1) throw new RuntimeException(); } String rt(String s) { return s; } public static void main(String[] args) { new Test(""); } } </pre><p>  反编译的l果Q?/p><pre class="code">Compiled from "Test.java" public class debug.Test extends java.lang.Object{ java.lang.String s1; java.lang.String s2; public debug.Test(); Code: 0: aload_0 1: invokespecial #1; //Method java/lang/Object."<init>":()V 4: aload_0 5: aload_0 6: ldc #2; //String s1 8: invokevirtual #3; //Method rt:(Ljava/lang/String;)Ljava/lang/String; 11: putfield #4; //Field s1:Ljava/lang/String; 14: aload_0 15: ldc #5; //String s2 17: putfield #6; //Field s2:Ljava/lang/String; 20: ldc #7; //String s3 22: astore_1 23: aload_0 24: ldc #2; //String s1 26: putfield #4; //Field s1:Ljava/lang/String; 29: return public debug.Test(java.lang.String); Code: 0: aload_0 1: invokespecial #1; //Method java/lang/Object."<init>":()V 4: aload_0 5: aload_0 6: ldc #2; //String s1 8: invokevirtual #3; //Method rt:(Ljava/lang/String;)Ljava/lang/String; 11: putfield #4; //Field s1:Ljava/lang/String; 14: aload_0 15: ldc #5; //String s2 17: putfield #6; //Field s2:Ljava/lang/String; 20: ldc #7; //String s3 22: astore_2 23: new #8; //class java/lang/RuntimeException 26: dup 27: invokespecial #9; //Method java/lang/RuntimeException."<init>":()V 30: athrow java.lang.String rt(java.lang.String); Code: 0: aload_1 1: areturn public static void main(java.lang.String[]); Code: 0: new #10; //class debug/Test 3: dup 4: ldc #11; //String 6: invokespecial #12; //Method "<init>":(Ljava/lang/String;)V 9: pop 10: return } </init></init></init></init></pre><p>  明白了上面这些知?我们来做一个小试?</p><pre class="code">public class Test2 extends Test1{ { System.out.print("1"); } Test2(){ System.out.print("2"); } static{ System.out.print("3"); } { System.out.print("4"); } public static void main(String[] args) { new Test2(); } } class Test1 { Test1(){ System.out.print("5"); } static{ System.out.print("6"); } } </pre><p>  试试看能清楚打印的顺序吗?如果没有new Test2()打C?</p><br />作?axman 专栏:http://blog.csdn.net/axman/ </init></init></init></pre></pre><img src ="http://www.aygfsteel.com/heiyuchuanxia/aggbug/79193.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/heiyuchuanxia/" target="_blank">Stefanie</a> 2006-11-05 14:43 <a href="http://www.aygfsteel.com/heiyuchuanxia/archive/2006/11/05/79193.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>蚁群法?http://www.aygfsteel.com/heiyuchuanxia/archive/2006/11/02/78643.htmlStefanieStefanieThu, 02 Nov 2006 04:25:00 GMThttp://www.aygfsteel.com/heiyuchuanxia/archive/2006/11/02/78643.htmlhttp://www.aygfsteel.com/heiyuchuanxia/comments/78643.htmlhttp://www.aygfsteel.com/heiyuchuanxia/archive/2006/11/02/78643.html#Feedback0http://www.aygfsteel.com/heiyuchuanxia/comments/commentRss/78643.htmlhttp://www.aygfsteel.com/heiyuchuanxia/services/trackbacks/78643.html     q两天上?...老师L提到蚁群法....听v来似乎很有意?.....扑ֈ一简?....攑֜q里有兴的朋友...参考一?.......
      
         E序开始运行,蚂蚁们开始从H里出动了,L食物Q他们会(x)着屏幕爬满整个画面Q直到找到食物再q回H?br />
         其中Q‘F’点表示食物Q‘H’表C窝Q白色块表示障碍物,?’就是蚂蚁了?br />

    预期的结果:(x)
       各个蚂蚁在没有事先告诉他们食物在什么地方的前提下开始寻N物。当一只找到食物以后,它会(x)向环境释放一U信息素Q吸引其他的蚂蚁q来Q这栯来越多的蚂蚁?x)找到食物!有些蚂蚁q没有象其它蚂蚁一h重复同L(fng)路,他们?x)另辟蹊径,如果令开辟的道\比原来的其他道\更短Q那么,渐渐Q更多的蚂蚁被吸引到q条较短的\上来。最后,l过一D|间运行,可能?x)出C条最短的路径被大多数蚂蚁重复着?br />
    原理Q?br /> Z么小的蚂蚁能够扑ֈ食物Q他们具有智能么Q设惻I如果我们要ؓ(f)蚂蚁设计一个h工智能的E序Q那么这个程序要多么复杂呢?首先Q你要让蚂蚁能够避开障碍物,必L据适当的地形给它编q指令让他们能够巧妙的避开障碍物,其次Q要让蚂蚁找到食物,需要让他们遍历I间上的所有点Q再ơ,如果要让蚂蚁扑ֈ最短的路径Q那么需要计所有可能的路径q且比较它们的大,而且更重要的是,你要心翼的编E,因ؓ(f)E序的错误也怼(x)让你前功弃。这是多么不可思议的程序!太复杂了Q恐怕没够完成这L(fng)琐冗余的E序?br />  然而,事实q没有你惛_那么复杂Q上面这个程序每个蚂蚁的核心E序~码不过100多行Qؓ(f)什么这么简单的E序?x)让蚂蚁q这样复杂的事情Q答案是Q简单规则的涌现。事实上Q每只蚂蚁ƈ不是像我们想象的需要知道整个世界的信息Q他们其实只兛_很小范围内的眼前信息Q而且Ҏ(gu)q些局部信息利用几条简单的规则q行决策Q这P在蚁这个集体里Q复杂性的行ؓ(f)׃(x)凸现出来。这是人工生命、复杂性科学解释的规律Q那么,q些单规则是什么呢Q下面详l说明:(x)
    1、范_(d)(x)
       蚂蚁观察到的范围是一个方g界,蚂蚁有一个参Cؓ(f)速度半径Q一般是3Q,那么它能观察到的范围是3*3个方g界,q且能移动的距离也在q个范围之内?br />2、环境:(x)
       蚂蚁所在的环境是一个虚拟的世界Q其中有障碍物,有别的蚂蚁,q有信息素,信息素有两种Q一U是扑ֈ食物的蚂蚁洒下的食物信息素,一U是扑ֈH的蚂蚁z下的窝的信息素。每个蚂蚁都仅仅能感知它范围内的环境信息。环境以一定的速率让信息素消失?br />3、觅食规则:(x)
       在每只蚂蚁能感知的范围内L是否有食物,如果有就直接q去。否则看是否有信息素Qƈ且比较在能感知的范围内哪一点的信息素最多,q样Q它?yu)朝信息素多的地方走Qƈ且每只蚂蚁多?x)以概率犯错误Q从而ƈ不是往信息素最多的点移动。蚂蚁找H的规则和上面一P只不q它对窝的信息素做出反应Q而对食物信息素没反应?br />4、移动规则:(x)
       每只蚂蚁都朝向信息素最多的方向U,q且Q当周围没有信息素指引的时候,蚂蚁?x)按照自己原来运动的方向惯性的q动下去Qƈ且,在运动的方向有一个随机的的扰动。ؓ(f)了防止蚂蚁原地{圈,它会(x)C最q刚走过了哪些点Q如果发现要走的下一点已l在最q走q了Q它?yu)׃?x)量避开?br />5、避障规则:(x)
       如果蚂蚁要移动的方向有障物挡住Q它?x)随机的选择另一个方向,q且有信息素指引的话Q它?x)按照觅食的规则行?f)?
    7、播撒信息素规则Q?br />   每只蚂蚁在刚扑ֈ食物或者窝的时候撒发的信息素最多,q着它走q的距离Q播撒的信息素越来越?br />
       Ҏ(gu)q几条规则,蚂蚁之间q没有直接的关系Q但是每只蚂蚁都和环境发生交互,而通过信息素这个纽带,实际上把各个蚂蚁之间兌h了。比如,当一只蚂蚁找C食物Q它q没有直接告诉其它蚂蚁这儿有食物Q而是向环境播撒信息素Q当其它的蚂蚁经q它附近的时候,׃(x)感觉C息素的存在,q而根据信息素的指引找C食物?br />
    问题Q?br />    说了q么多,蚂蚁I竟是怎么扑ֈ食物的呢Q?br />   在没有蚂蚁找到食物的时候,环境没有有用的信息素Q那么蚂蚁ؓ(f)什么会(x)相对有效的找到食物呢Q这要归功于蚂蚁的移动规则,其是在没有信息素时候的Ud规则。首先,它要能尽量保持某U惯性,q样使得蚂蚁量向前方移动(开始,q个前方是随机固定的一个方向)(j)Q而不是原地无谓的打{或者震动;其次Q蚂蚁要有一定的随机性,虽然有了固定的方向,但它也不能像_子一L(fng)U运动下去,而是有一个随机的q扰。这样就使得蚂蚁q动hh了一定的目的性,量保持原来的方向,但又有新的试探,其当碰到障物的时候它?x)立x变方向,q可以看成一U选择的过E,也就是环境的障碍物让蚂蚁的某个方向正,而其他方向则不对。这p释了Z么单个蚂蚁在复杂的诸如迷宫的地图中仍然能扑ֈ隐蔽得很好的食物?br />    当然Q在有一只蚂蚁找C食物的时候,其他蚂蚁?x)沿着信息素很快找到食物的?br />
        蚂蚁如何扑ֈ最短\径的Q这一是要归功于信息素Q另外要归功于环境,具体说是计算机时钟。信息素多的地方昄l过q里的蚂蚁会(x)多,因而会(x)有更多的蚂蚁聚集q来。假设有两条路从H通向食物Q开始的时候,走这两条路的蚂蚁数量同样多(或者较长的路上蚂蚁多,q也无关紧要Q。当蚂蚁沿着一条\到达l点以后?x)马上返回来Q这P短的路蚂蚁来回一ơ的旉qQ这也意味着重复的频率就快,因而在单位旉里走q的蚂蚁数目多Q洒下的信息素自然也?x)多Q自然会(x)有更多的蚂蚁被吸引过来,从而洒下更多的信息素……;而长的\正相反,因此Q越来越多地蚂蚁聚集到较短的路径上来Q最短的路径p似找C。也许有Z(x)问局部最短\径和全局最短\的问题,实际上蚂蚁逐渐接近全局最短\的,Z么呢Q这源于蚂蚁?x)犯错误Q也是它会(x)按照一定的概率不往信息素高的地方走而另辟蹊径,q可以理解ؓ(f)一U创斎ͼq种创新如果能羃短\途,那么Ҏ(gu)刚才叙述的原理,更多的蚂蚁会(x)被吸引过来?br />

    引申
       跟着蚂蚁的踪q,你找C什么?通过上面的原理叙q和实际操作Q我们不隑֏现蚂蚁之所以具有智能行为,完全归功于它的简单行则,而这些规则综合v来具有下面两个方面的特点Q?br />1、多h?br />2、正反馈
       多样性保证了蚂蚁在觅食的时候不|走q死胡同而无限@环,正反馈机制则保证了相对优良的信息能够被保存下来。我们可以把多样性看成是一U创造能力,而正反馈是一U学?fn)强化能力。正反馈的力量也可以比喻成权威的意见Q而多h是打破权威体现的创造性,正是q两点小心翼的巧妙l合才得智能行为涌现出来了?br />    引申来讲Q大自然的进化,C会(x)的进步、hcȝ创新实际上都M开q两样东西,多样性保证了pȝ的创新能力,正反馈保证了优良Ҏ(gu)能够得到强化,两者要恰到好处的结合。如果多h过剩,也就是系l过于活跃,q相当于蚂蚁?x)过多的随机q动Q它?yu)׃?x)陷入h状态;而相反,多样性不够,正反馈机制过强,那么pȝ好比一潭死水。这在蚁中来讲pCؓ(f)Q蚂蚁的行ؓ(f)q于늡Q当环境变化了,蚂蚁仍然不能适当的调整?br />    既然复杂性、智能行为是Ҏ(gu)底层规则涌现的,既然底层规则h多样性和正反馈特点,那么也许你会(x)问这些规则是哪里来的Q多h和正反馈又是哪里来的?我本人的意见Q规则来源于大自然的q化。而大自然的进化根据刚才讲的也体现为多h和正反馈的巧妙l合。而这L(fng)巧妙l合又是Z么呢Qؓ(f)什么在你眼前呈现的世界是如此栩栩如生呢Q答案在于环境造就了这一切,之所以你看到栩栩如生的世界,是因为那些不能够适应环境的多h与正反馈的l合都已l死掉了Q被环境淘汰了!

    参数说明Q?br />最大信息素Q蚂蚁在一开始拥有的信息素总量Q越大表C程序在较长一D|间能够存在信息素。信息素消减的速度Q随着旉的流逝,已经存在于世界上的信息素?x)消减,q个数D大,那么消减的越快?br />错误概率表示q个蚂蚁不往信息素最大的区域走的概率Q越大则表示q个蚂蚁有创新性?br />速度半径表示蚂蚁一ơ能走的最大长度,也表C个蚂蚁的感知范围?br />记忆能力表示蚂蚁能记住多个刚刚走过点的坐标Q这个值避免了蚂蚁在本地打转,停滞不前。而这个D大那么整个系l运行速度慢Q越则蚂蚁容易原地{圈?/font>


    Stefanie 2006-11-02 12:25 发表评论
    ]]>RESTful Web Serviceshttp://www.aygfsteel.com/heiyuchuanxia/archive/2006/10/14/75126.htmlStefanieStefanieSat, 14 Oct 2006 07:26:00 GMThttp://www.aygfsteel.com/heiyuchuanxia/archive/2006/10/14/75126.htmlhttp://www.aygfsteel.com/heiyuchuanxia/comments/75126.htmlhttp://www.aygfsteel.com/heiyuchuanxia/archive/2006/10/14/75126.html#Feedback2http://www.aygfsteel.com/heiyuchuanxia/comments/commentRss/75126.htmlhttp://www.aygfsteel.com/heiyuchuanxia/services/trackbacks/75126.html

    RESTful Web Services


    1. The Fundamental
     
       1.1 What’s REST 
                REST: REpresentational State Transfer 
                It’s an architecture style (the stateless client-server architecture), not a toolkit. 
       1.2 REST defined 
                ?/font>Resources are identified by uniform resource identifiers (URIs) 
                ?Resources are manipulated through their representations 
                ?/font>Messages are self-descriptive and stateless 
                ?/font>Multiple representations are accepted or sent 
                ?/font>Hypertext is the engine of application state 
       1.3 Representation 
                Just think that a web page is a representationof a resource, and the customer can get the resource from the URLs. Clients can then request a specific representation of the concept from the representations the server makes available. 
       1.4 State 
             “State?means application/session state, maintained as part of the content transferred from client to server back to client.Application state is the information necessary to understand the context of an interaction.The "stateless" constraint means that all messages must include all application state. 
         1.5 Transfer of state 
             ?/font>Connectors (client, server, cache, resolver, and tunnel) are unrelated to sessions 
             ?/font>State is maintained by being transferred from clients to servers and back to clients

    The Conclusion:
     
             So we can say that “REST is a post hocdescription of the Web? Unsurprisingly, HTTP is the most RESTful protocol. 

        1.6 REST messages 
               REST can support any media type, but XML is expected to be the most popular transport for structured information, it can make a resource have as many representations as you need,The XmlHttpRequest object lets you do REST from insidea web page.Unlike SOAP and XML-RPC, REST does not really require a new message format; it’s just use URLs to transfer the messages as parameters. 
       1.7 Web based application 
              A Web-based application is a dynamically changing graph of 
             ?State representations (pages) 
             ?Potential transitions (links) between states 
       1.8 OOP on REST 
              Every useful data object has an address;Resources themselves are the targets for method calls; the list of methods is fixed for all resources. 
       1.9 REST and RPC 
                ?/font>REST is, in a sense, a species of RPC, except the methods have been defined in advance. REST is incompatible with "end-point" RPC. So REST is architecture not only a design style. 
                ?/font>Most RPC applications don't adhere to the REST philosophy. 
                ?/font>It’s possible to work with RPC-style tools to produce REST results. 
       1.10 POST on the REST attitude 
              There are two views on POST, the first is ?/b>POST lets you pass a whole lot of parameters and get something back, bypassing caches.? and the other is “POST lets you create new resources that are related to old ones.?The second view is on the REST point.
     
    2. RESTful Web Services 
             In the web services world, REpresentational State Transfer (REST) is a key design idiom that embraces a stateless client-server architecture in which the web services are viewed as resources and can be identified by their URLs. The Java API for XML Web Services (JAX-WS) provides full support for building and deploying RESTful web services. 
       2.1 When to use REST 
                ?/font> The web services are completely stateless. 
                ?/font>A caching infrastructure can be leveraged for performance. 
                ?/font>The service producer and service consumer have a mutual understanding of the context and content being passed along. 
                ?/font>Bandwidth is particularly important and needs to be limited. 
                ?/font>Web service delivery or aggregation into existing web sites can be enabled easily with a RESTful style.
    2.2 How to build a RESTful Web Service 
             JAX-WS enables building RESTful endpoints through a javax.xml.ws.Provider interface in the API. Provider is a generic interface that can be implemented by a class as a dynamic alternative to a service endpoint interface (SEI).
           The two important annotations in development:
           1. @WebServiceProvider (wsdl=”…??   //wsdl can omit
           2. @BindingType (value=HTTPBinding.HTTP_BINDING)   //Must
          
    Reference:
      1. RESTful Web Services by Sameer Tyagi: 
                http://java.sun.com/developer/technicalArticles/WebServices/restful/ 
      2. Publishing a RESTful Web Service with JAX-WS by Doug Kohlert:                     
              http://weblogs.java.net/blog/kohlert/archive/2006/01/publishing_a_re.html
     
    3. Make Your Service RESTFul by Robin Zou: 
              http://zouzhile.googlepages.com/basicrestful
     

    Stefanie 2006-10-14 15:26 发表评论
    ]]>
    关于技术的bloghttp://www.aygfsteel.com/heiyuchuanxia/archive/2006/10/13/75049.htmlStefanieStefanieFri, 13 Oct 2006 12:22:00 GMThttp://www.aygfsteel.com/heiyuchuanxia/archive/2006/10/13/75049.htmlhttp://www.aygfsteel.com/heiyuchuanxia/comments/75049.htmlhttp://www.aygfsteel.com/heiyuchuanxia/archive/2006/10/13/75049.html#Feedback1http://www.aygfsteel.com/heiyuchuanxia/comments/commentRss/75049.htmlhttp://www.aygfsteel.com/heiyuchuanxia/services/trackbacks/75049.html       blogjava的blog,我是打算专门写一些关于我专业方向的学?fn)心?也算是一个交的q_?....
           上了?选择了web servicesq个方向,对于我应该也是一个不的挑战,q个领域涉及(qing)Ҏ(gu)面面的东?对于一个刚刚v步的?也真是有很多地方需要好好学?....
           打算在此记录下我在web services之\上的点点滴滴......

    Stefanie 2006-10-13 20:22 发表评论
    ]]>
    վ֩ģ壺 ٤ʦ| | | üɽ| | »| | ɽ| | | | ¡| | | | | Ͻ| | | | | ±| | ߰| ն| | ׯ| | | ֲ| ϻ| ˱| | | | ֣| | ̷| ï| | |