﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-英雄哪里出来-随笔分类-算法专辑</title><link>http://www.cppblog.com/menjitianya/category/20893.html</link><description /><language>zh-cn</language><lastBuildDate>Mon, 22 Mar 2021 19:10:56 GMT</lastBuildDate><pubDate>Mon, 22 Mar 2021 19:10:56 GMT</pubDate><ttl>60</ttl><item><title>夜深人静写算法（七）[2016 贺岁版] - 线段树</title><link>http://www.cppblog.com/menjitianya/archive/2016/02/25/212891.html</link><dc:creator>英雄哪里出来</dc:creator><author>英雄哪里出来</author><pubDate>Thu, 25 Feb 2016 15:49:00 GMT</pubDate><guid>http://www.cppblog.com/menjitianya/archive/2016/02/25/212891.html</guid><wfw:comment>http://www.cppblog.com/menjitianya/comments/212891.html</wfw:comment><comments>http://www.cppblog.com/menjitianya/archive/2016/02/25/212891.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/menjitianya/comments/commentRss/212891.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/menjitianya/services/trackbacks/212891.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 目录 &nbsp;零、前言一、引例&nbsp; &nbsp; &nbsp;&nbsp;1、区间最值&nbsp; &nbsp; &nbsp;&nbsp;2、区间求和二、线段树的基本概念&nbsp; &nbsp; &nbsp;1、二叉搜索树&nbsp; &nbsp; &nbsp;2、数据域&nbsp; &nbsp; &nbsp;3、指针表示&nbsp; &nbsp; &nbsp;4、数组表示三、线段树...&nbsp;&nbsp;<a href='http://www.cppblog.com/menjitianya/archive/2016/02/25/212891.html'>阅读全文</a><img src ="http://www.cppblog.com/menjitianya/aggbug/212891.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/menjitianya/" target="_blank">英雄哪里出来</a> 2016-02-25 23:49 <a href="http://www.cppblog.com/menjitianya/archive/2016/02/25/212891.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>夜深人静写算法（六） - 最近公共祖先</title><link>http://www.cppblog.com/menjitianya/archive/2015/12/10/212447.html</link><dc:creator>英雄哪里出来</dc:creator><author>英雄哪里出来</author><pubDate>Wed, 09 Dec 2015 16:14:00 GMT</pubDate><guid>http://www.cppblog.com/menjitianya/archive/2015/12/10/212447.html</guid><wfw:comment>http://www.cppblog.com/menjitianya/comments/212447.html</wfw:comment><comments>http://www.cppblog.com/menjitianya/archive/2015/12/10/212447.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/menjitianya/comments/commentRss/212447.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/menjitianya/services/trackbacks/212447.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 目录 &nbsp;一、引例&nbsp; &nbsp; &nbsp;&nbsp;1、树-结点间最短距离二、LCA（最近公共祖先）&nbsp; &nbsp; &nbsp; 1、朴素算法&nbsp; &nbsp; &nbsp; 2、步进法&nbsp; &nbsp; &nbsp;&nbsp;3、记忆化步进法&nbsp; &nbsp; &nbsp;&nbsp;4、tarjan算法&nbsp; &nbsp; ...&nbsp;&nbsp;<a href='http://www.cppblog.com/menjitianya/archive/2015/12/10/212447.html'>阅读全文</a><img src ="http://www.cppblog.com/menjitianya/aggbug/212447.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/menjitianya/" target="_blank">英雄哪里出来</a> 2015-12-10 00:14 <a href="http://www.cppblog.com/menjitianya/archive/2015/12/10/212447.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>夜深人静写算法（五） - 初等数论</title><link>http://www.cppblog.com/menjitianya/archive/2015/12/02/212395.html</link><dc:creator>英雄哪里出来</dc:creator><author>英雄哪里出来</author><pubDate>Wed, 02 Dec 2015 14:05:00 GMT</pubDate><guid>http://www.cppblog.com/menjitianya/archive/2015/12/02/212395.html</guid><wfw:comment>http://www.cppblog.com/menjitianya/comments/212395.html</wfw:comment><comments>http://www.cppblog.com/menjitianya/archive/2015/12/02/212395.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/menjitianya/comments/commentRss/212395.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/menjitianya/services/trackbacks/212395.html</trackback:ping><description><![CDATA[<div><a href="https://mp.weixin.qq.com/s?__biz=Mzg2NjU1MzIxNg==&amp;mid=2247483938&amp;idx=1&amp;sn=7d8580aed32a0b536d2d45c998d11383&amp;chksm=ce485ecdf93fd7dba6da2ab91fd3f80e6563225b31f91972ae1c87bd301d347cf3eec995eeb3&amp;token=1626063786&amp;lang=zh_CN#rd">夜深人静写算法（三） - 初等数论<br /><img src="http://www.cppblog.com/images/cppblog_com/menjitianya/公众号.png" border="0" alt="" /></a></div><img src ="http://www.cppblog.com/menjitianya/aggbug/212395.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/menjitianya/" target="_blank">英雄哪里出来</a> 2015-12-02 22:05 <a href="http://www.cppblog.com/menjitianya/archive/2015/12/02/212395.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>夜深人静写算法（二十三） - 最短路</title><link>http://www.cppblog.com/menjitianya/archive/2015/11/19/212292.html</link><dc:creator>英雄哪里出来</dc:creator><author>英雄哪里出来</author><pubDate>Thu, 19 Nov 2015 15:44:00 GMT</pubDate><guid>http://www.cppblog.com/menjitianya/archive/2015/11/19/212292.html</guid><wfw:comment>http://www.cppblog.com/menjitianya/comments/212292.html</wfw:comment><comments>http://www.cppblog.com/menjitianya/archive/2015/11/19/212292.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cppblog.com/menjitianya/comments/commentRss/212292.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/menjitianya/services/trackbacks/212292.html</trackback:ping><description><![CDATA[<p><span tabindex="-1" contenteditable="false" data-cke-widget-wrapper="1" data-cke-filter="off" class="cke_widget_wrapper cke_widget_inline cke_widget_image cke_image_nocaption cke_widget_selected" data-cke-display-name="图像" data-cke-widget-id="0" role="region" aria-label=" 图像 小部件"><img alt="" data-cke-saved-src="https://img-blog.csdnimg.cn/20210105190605774.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1doZXJlSXNIZXJvRnJvbQ==,size_16,color_FFFFFF,t_70" src="https://img-blog.csdnimg.cn/20210105190605774.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1doZXJlSXNIZXJvRnJvbQ==,size_16,color_FFFFFF,t_70" data-cke-widget-data="{&amp;quot;hasCaption&amp;quot;:false,&amp;quot;src&amp;quot;:&amp;quot;https://img-blog.csdnimg.cn/20210105190605774.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1doZXJlSXNIZXJvRnJvbQ==,size_16,color_FFFFFF,t_70&amp;quot;,&amp;quot;alt&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;width&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;height&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;lock&amp;quot;:true,&amp;quot;align&amp;quot;:&amp;quot;none&amp;quot;,&amp;quot;classes&amp;quot;:[]}" data-cke-widget-upcasted="1" data-cke-widget-keep-attr="0" data-widget="image" class="cke_widget_element" /><span class="cke_reset cke_widget_drag_handler_container" style="background: url(&quot;https://csdnimg.cn/release/blog_editor_html/release1.6.19/ckeditor/plugins/widget/images/handle.png&quot;) rgba(220, 220, 220, 0.5); top: -15px; left: 0px; display: block;"><img class="cke_reset cke_widget_drag_handler" data-cke-widget-drag-handler="1" src="data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==" width="15" title="点击并拖拽以移动" height="15" role="presentation" draggable="true" alt="" /></span><span class="cke_image_resizer" title="点击并拖拽以改变尺寸">&#8203;</span></span></p><p><strong><a data-cke-saved-href="https://mp.weixin.qq.com/s?__biz=Mzg2NjU1MzIxNg==&amp;mid=2247485426&amp;idx=1&amp;sn=114743202d4fa0feadac7d7eed7a0dd0&amp;chksm=ce485b1df93fd20b50e20214d95a417ec0c859c7eeb134fe92a58aaf993bec7477d76aee3200&amp;token=327533227&amp;lang=zh_CN#rd" href="https://mp.weixin.qq.com/s?__biz=Mzg2NjU1MzIxNg==&amp;mid=2247485426&amp;idx=1&amp;sn=114743202d4fa0feadac7d7eed7a0dd0&amp;chksm=ce485b1df93fd20b50e20214d95a417ec0c859c7eeb134fe92a58aaf993bec7477d76aee3200&amp;token=327533227&amp;lang=zh_CN#rd"></a></strong></p><p><strong>新地址：<a data-cke-saved-href="https://mp.weixin.qq.com/s?__biz=Mzg2NjU1MzIxNg==&amp;mid=2247485426&amp;idx=1&amp;sn=114743202d4fa0feadac7d7eed7a0dd0&amp;chksm=ce485b1df93fd20b50e20214d95a417ec0c859c7eeb134fe92a58aaf993bec7477d76aee3200&amp;token=327533227&amp;lang=zh_CN#rd" href="https://mp.weixin.qq.com/s?__biz=Mzg2NjU1MzIxNg==&amp;mid=2247485426&amp;idx=1&amp;sn=114743202d4fa0feadac7d7eed7a0dd0&amp;chksm=ce485b1df93fd20b50e20214d95a417ec0c859c7eeb134fe92a58aaf993bec7477d76aee3200&amp;token=327533227&amp;lang=zh_CN#rd">夜深人静写算法（二十三）- 最短路</a></strong></p><img src ="http://www.cppblog.com/menjitianya/aggbug/212292.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/menjitianya/" target="_blank">英雄哪里出来</a> 2015-11-19 23:44 <a href="http://www.cppblog.com/menjitianya/archive/2015/11/19/212292.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>夜深人静写算法（十三） - 树状数组</title><link>http://www.cppblog.com/menjitianya/archive/2015/11/02/212171.html</link><dc:creator>英雄哪里出来</dc:creator><author>英雄哪里出来</author><pubDate>Mon, 02 Nov 2015 14:53:00 GMT</pubDate><guid>http://www.cppblog.com/menjitianya/archive/2015/11/02/212171.html</guid><wfw:comment>http://www.cppblog.com/menjitianya/comments/212171.html</wfw:comment><comments>http://www.cppblog.com/menjitianya/archive/2015/11/02/212171.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cppblog.com/menjitianya/comments/commentRss/212171.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/menjitianya/services/trackbacks/212171.html</trackback:ping><description><![CDATA[<a href="https://mp.weixin.qq.com/s?__biz=Mzg2NjU1MzIxNg==&amp;mid=2247484830&amp;idx=1&amp;sn=c4a237dadda7616a7341fd49ea38be9e&amp;chksm=ce485971f93fd0672d0d379a016c6c52360d16ba60f19c5c1fa06471a4557aa6937ba6747fed&amp;scene=178&amp;cur_album_id=1658866261407137801#rd">夜深人静写算法（十三）- 树状数组<br /><img src="http://www.cppblog.com/images/cppblog_com/menjitianya/公众号.png" border="0" alt="" /></a><img src ="http://www.cppblog.com/menjitianya/aggbug/212171.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/menjitianya/" target="_blank">英雄哪里出来</a> 2015-11-02 22:53 <a href="http://www.cppblog.com/menjitianya/archive/2015/11/02/212171.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>夜深人静写算法（二） - 动态规划</title><link>http://www.cppblog.com/menjitianya/archive/2015/10/23/212084.html</link><dc:creator>英雄哪里出来</dc:creator><author>英雄哪里出来</author><pubDate>Fri, 23 Oct 2015 15:24:00 GMT</pubDate><guid>http://www.cppblog.com/menjitianya/archive/2015/10/23/212084.html</guid><wfw:comment>http://www.cppblog.com/menjitianya/comments/212084.html</wfw:comment><comments>http://www.cppblog.com/menjitianya/archive/2015/10/23/212084.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.cppblog.com/menjitianya/comments/commentRss/212084.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/menjitianya/services/trackbacks/212084.html</trackback:ping><description><![CDATA[<a href="https://mp.weixin.qq.com/s?__biz=Mzg2NjU1MzIxNg==&amp;mid=2247483846&amp;idx=1&amp;sn=7691121f35968b55b2474681d16ebb24&amp;chksm=ce485d29f93fd43fe8b8645c5b6a77e2fbab86be395e16d87ba6e1470c3afa065df7712e7e3e&amp;token=1626063786&amp;lang=zh_CN#rd" title="夜深人静写算法（二） - 动态规划">夜深人静写算法（二） - 动态规划<br /><img src="http://www.cppblog.com/images/cppblog_com/menjitianya/公众号.png" border="0" alt="" /></a><img src ="http://www.cppblog.com/menjitianya/aggbug/212084.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/menjitianya/" target="_blank">英雄哪里出来</a> 2015-10-23 23:24 <a href="http://www.cppblog.com/menjitianya/archive/2015/10/23/212084.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>夜深人静写算法（一） - 搜索入门</title><link>http://www.cppblog.com/menjitianya/archive/2015/10/09/211980.html</link><dc:creator>英雄哪里出来</dc:creator><author>英雄哪里出来</author><pubDate>Fri, 09 Oct 2015 14:28:00 GMT</pubDate><guid>http://www.cppblog.com/menjitianya/archive/2015/10/09/211980.html</guid><wfw:comment>http://www.cppblog.com/menjitianya/comments/211980.html</wfw:comment><comments>http://www.cppblog.com/menjitianya/archive/2015/10/09/211980.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/menjitianya/comments/commentRss/211980.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/menjitianya/services/trackbacks/211980.html</trackback:ping><description><![CDATA[<div style="font-family: 微软雅黑;"><a href="https://mp.weixin.qq.com/s?__biz=Mzg2NjU1MzIxNg==&amp;mid=2247483845&amp;idx=1&amp;sn=5a3b9b5bc3247a66568105ee6a028189&amp;chksm=ce485d2af93fd43c9b85aa2a5d91542b4b8f081ad3074feecf9a4945b886a719e2c6821fec36&amp;token=1626063786&amp;lang=zh_CN#rd" title="夜深人静写算法（一）- 搜索入门">夜深人静写算法（一）- 搜索入门</a><br /><a href="https://mp.weixin.qq.com/s?__biz=Mzg2NjU1MzIxNg==&amp;mid=2247483845&amp;idx=1&amp;sn=5a3b9b5bc3247a66568105ee6a028189&amp;chksm=ce485d2af93fd43c9b85aa2a5d91542b4b8f081ad3074feecf9a4945b886a719e2c6821fec36&amp;token=1626063786&amp;lang=zh_CN#rd" title="夜深人静写算法（一）- 搜索入门"><img src="http://www.cppblog.com/images/cppblog_com/menjitianya/公众号.png" border="0" alt="" /><br /></a></div><img src ="http://www.cppblog.com/menjitianya/aggbug/211980.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/menjitianya/" target="_blank">英雄哪里出来</a> 2015-10-09 22:28 <a href="http://www.cppblog.com/menjitianya/archive/2015/10/09/211980.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>二维线段树</title><link>http://www.cppblog.com/menjitianya/archive/2015/10/06/211956.html</link><dc:creator>英雄哪里出来</dc:creator><author>英雄哪里出来</author><pubDate>Tue, 06 Oct 2015 10:56:00 GMT</pubDate><guid>http://www.cppblog.com/menjitianya/archive/2015/10/06/211956.html</guid><wfw:comment>http://www.cppblog.com/menjitianya/comments/211956.html</wfw:comment><comments>http://www.cppblog.com/menjitianya/archive/2015/10/06/211956.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/menjitianya/comments/commentRss/211956.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/menjitianya/services/trackbacks/211956.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp; &nbsp; &nbsp; 二维线段树最主要用于平面统计问题。类似一维线段树，最经典的就是求区间最值（或区间和），推广到二维，求得就是矩形区域最值（或矩形区域和），对于矩形区域和，二维树状数组更加高效，而矩形区域最值，更加高效的方法是二维RMQ，但是二维RMQ不支持动态更新，所以二维线段树还是有用武之地的。&nbsp; &nbsp; &nbsp; 如果对一维线段树已经驾轻就熟，那么直...&nbsp;&nbsp;<a href='http://www.cppblog.com/menjitianya/archive/2015/10/06/211956.html'>阅读全文</a><img src ="http://www.cppblog.com/menjitianya/aggbug/211956.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/menjitianya/" target="_blank">英雄哪里出来</a> 2015-10-06 18:56 <a href="http://www.cppblog.com/menjitianya/archive/2015/10/06/211956.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>AC自动机</title><link>http://www.cppblog.com/menjitianya/archive/2014/07/10/207604.html</link><dc:creator>英雄哪里出来</dc:creator><author>英雄哪里出来</author><pubDate>Thu, 10 Jul 2014 06:26:00 GMT</pubDate><guid>http://www.cppblog.com/menjitianya/archive/2014/07/10/207604.html</guid><wfw:comment>http://www.cppblog.com/menjitianya/comments/207604.html</wfw:comment><comments>http://www.cppblog.com/menjitianya/archive/2014/07/10/207604.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.cppblog.com/menjitianya/comments/commentRss/207604.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/menjitianya/services/trackbacks/207604.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: AC自动机  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 算法目的：  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AC自动机主要用于解决多模式串的匹配问题，是字典树(trie树)的变种，一种伪树形结构(主体是树形的，但是由于加入了失败指针，使得它变成了一个有向图)；trie图(我的理解^_^)是对AC自动机的一种改造，使得图中每个结点都...&nbsp;&nbsp;<a href='http://www.cppblog.com/menjitianya/archive/2014/07/10/207604.html'>阅读全文</a><img src ="http://www.cppblog.com/menjitianya/aggbug/207604.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/menjitianya/" target="_blank">英雄哪里出来</a> 2014-07-10 14:26 <a href="http://www.cppblog.com/menjitianya/archive/2014/07/10/207604.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>RMQ</title><link>http://www.cppblog.com/menjitianya/archive/2014/06/26/207420.html</link><dc:creator>英雄哪里出来</dc:creator><author>英雄哪里出来</author><pubDate>Thu, 26 Jun 2014 08:35:00 GMT</pubDate><guid>http://www.cppblog.com/menjitianya/archive/2014/06/26/207420.html</guid><wfw:comment>http://www.cppblog.com/menjitianya/comments/207420.html</wfw:comment><comments>http://www.cppblog.com/menjitianya/archive/2014/06/26/207420.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/menjitianya/comments/commentRss/207420.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/menjitianya/services/trackbacks/207420.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: RMQ  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 定义：&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A[0...n-1] &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp...&nbsp;&nbsp;<a href='http://www.cppblog.com/menjitianya/archive/2014/06/26/207420.html'>阅读全文</a><img src ="http://www.cppblog.com/menjitianya/aggbug/207420.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/menjitianya/" target="_blank">英雄哪里出来</a> 2014-06-26 16:35 <a href="http://www.cppblog.com/menjitianya/archive/2014/06/26/207420.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>KMP</title><link>http://www.cppblog.com/menjitianya/archive/2014/06/20/207354.html</link><dc:creator>英雄哪里出来</dc:creator><author>英雄哪里出来</author><pubDate>Fri, 20 Jun 2014 13:37:00 GMT</pubDate><guid>http://www.cppblog.com/menjitianya/archive/2014/06/20/207354.html</guid><wfw:comment>http://www.cppblog.com/menjitianya/comments/207354.html</wfw:comment><comments>http://www.cppblog.com/menjitianya/archive/2014/06/20/207354.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/menjitianya/comments/commentRss/207354.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/menjitianya/services/trackbacks/207354.html</trackback:ping><description><![CDATA[<p style="margin-bottom:0pt; margin-top:0pt; text-align:center; "><span style="font-size: 14pt; font-family: 宋体;">K</span><span style="mso-spacerun:'yes'; font-size:14.0000pt; font-family:'宋体'; ">MP</span></p><p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'Times New Roman'; "></span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'Times New Roman'; ">&nbsp; &nbsp; &nbsp; &nbsp; KMP</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'Times New Roman'; ">算法</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">可以说</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'Times New Roman'; ">所有数据结构书上都有，上大学的时候也陆陆续续学过三次，每次学完看似理解了，</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">可是</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'Times New Roman'; ">过了</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">不到</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'Times New Roman'; ">半年又</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">忘记了，或许是因为代码太短，能写出来就以为自己会了，没有深入去理解，导致下次再来看的时候感觉很陌生，一定是这样的。</span></p><p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; "></span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">&nbsp; &nbsp; 今天看了matrix67对KMP的解释，很赞，附上地址：</span><a href="http://www.matrix67.com/blog/archives/115"><span style="color: #0000ff; font-family: 'Times New Roman';">http://www.matrix67.com/blog/archives/115</span></a></p><p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; "></span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">&nbsp; &nbsp; 为了让老年的自己不用在迟暮的时候再学一遍KMP，还是决定把一些关键性的东西记录下来，如果那时候的自己看到自己当年写的这篇笔记能有恍然大悟的感觉，那么现在就不是在浪费时间了。</span></p><p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; "></span>&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;<span style="mso-spacerun:'yes'; font-weight:bold; font-size:10.5000pt; font-family:'宋体'; ">定义：</span></p><p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; "></span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; S[1...&nbsp;n]&nbsp;&nbsp;&nbsp;目标串&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;T[1...m]&nbsp;&nbsp;&nbsp;模式串</span><br /></p><p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; "></span>&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;<span style="mso-spacerun:'yes'; font-weight:bold; font-size:10.5000pt; font-family:'宋体'; ">算法目的：</span></p><p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; "></span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 从目标串S中找到一个子串和模式串T完全匹配。</span></p><p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; "></span>&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;<span style="mso-spacerun:'yes'; font-weight:bold; font-size:10.5000pt; font-family:'宋体'; ">算法核心思想：</span></p><p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; "></span>&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">1)&nbsp;枚举i从1到n，在S[i-j...i-1]和T[1...j]完全匹配的前提下，判断S[i]是否和T[j+1]相等：</span></p><p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">a)&nbsp;如果相等，说明S[i-j...i]和T[1...j+1]完全匹配，那么i和j都自增1；</span></p><p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; "></span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">b)&nbsp;如果不相等，则需要找到一个最大的j'&nbsp;&lt;&nbsp;j，满足S[i-j'...i-1]和T[1...j']完全匹配；</span></p><p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">2)&nbsp;当i=n或j=m的时候说明匹配结束，否则重复1)；<br /><br /></span></p><p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">	</span></p><p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; "></span>&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;<span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">对于j'可以这样理解，由于前提是S[i-j...i-1]和T[1...j]完全匹配，如果要找到一个j'满足S[i-j'...i-1]和T[1...j']也完全匹配，那么T[1...j']必定为T[1...j]的后缀，</span><span style="font-family: 宋体; font-size: 10.5pt;">证明如下：首先将以下的子串进行编号：&nbsp;</span><span style="font-family: 宋体; font-size: 10.5pt;">A&nbsp;=&nbsp;S[i-j...i-1]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;B&nbsp;=&nbsp;T[1...j]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;C&nbsp;=&nbsp;S[i-j'...i-1]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;D&nbsp;=&nbsp;T[1...j']</span></p><p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; "></span>&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;<span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">因为A和B完全匹配，C和D完全匹配，由于C为A的后缀，所以D为B的后缀。</span></p><p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; "></span>&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;<span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">当S[i]和T[j+1]不相等的时候需要调整j的值，调整完后的j&nbsp;=&nbsp;Next[j](这个Next[j]就是之前所说的j')，需要满足 T[1&nbsp;...&nbsp;Next[j]&nbsp;]&nbsp;=&nbsp;=&nbsp;T[&nbsp;j&nbsp;-&nbsp;Next[j]&nbsp;+&nbsp;1...&nbsp;j&nbsp;]， 并且Next[j]的值最大，比较书面的说法就是Next[j]表示</span><span style="mso-spacerun:'yes'; color:#ff0000; font-weight:bold; font-size:10.5000pt; font-family:'宋体'; ">在模式串T中以第j个元素为结尾的最长后缀中满足它是T的前缀的后缀的长度</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">。</span></p><p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; "></span>&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;<span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">举个例子，T&nbsp;=&nbsp;"ababaaba"的Next数组为&nbsp;[0,&nbsp;0,&nbsp;1,&nbsp;2,&nbsp;3,&nbsp;1,&nbsp;2,&nbsp;3]。</span></p><p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; "></span>&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;<span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">由于Next数组表示的含义只和自身的性质有关，所以在没有目标串的情况下同样可以求出Next数组，KMP的精妙之处就在于求这个Next数组了。</span></p><p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; "></span>&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;<span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">在上文中提到的S和T的匹配中，每次S[i-j...i-1]都是尽量找到最大的j使得它和T[1...j]完全匹配，当然有可能找不到这样的j，此时令j&nbsp;=&nbsp;0，即&nbsp;S[i,i-1]和T[1,0]匹配(这是两个空串，空串和空串也可以匹配，hohoho~~所以j是一定存在的)。如果现在把S换成T，那么问题就转化成了T[i-j...i-1]和T[1...j]的匹配问题了，如果T[i-j...i-1]和T[1...j]完全匹配，并且T[1...j]是和T[i-j...i-1]匹配的最长的串，那么&nbsp;Next[i-1]&nbsp;就是&nbsp;j（思考一下红色字的定义就明白了），于是问题就转化成了T的自我匹配的过程了。<br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>算法复杂度：</strong><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;O(n+m)</p><p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">&nbsp;&nbsp;&nbsp;&nbsp;Next函数的求解非常简洁：</span></p><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;MAXN&nbsp;1000010<br /><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;next[MAXN];<br /><span style="color: #008080; ">&nbsp;3</span>&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;传入的字符串下标需要以1开头</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #008000; "></span><span style="color: #0000FF; ">void</span>&nbsp;getNext(<span style="color: #0000FF; ">int</span>&nbsp;m,&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;*str)&nbsp;{<br /><span style="color: #008080; ">&nbsp;6</span>&nbsp;next[1]&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;枚举模式串的每个位置，判断以当前字符结尾能够匹配到的最大前缀</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #008000; "></span><span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;j&nbsp;=&nbsp;0,&nbsp;i&nbsp;=&nbsp;2;&nbsp;i&nbsp;&lt;=&nbsp;m;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">&nbsp;9</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;在str[i-j<img src="http://www.cppblog.com/Images/dot.gif" alt="" />&nbsp;i-1]和str[1<img src="http://www.cppblog.com/Images/dot.gif" alt="" />j]&nbsp;完全匹配的前提下判断str[i]和str[j+1]是否相等<br /></span><span style="color: #008080; ">10</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;如果不相等，则减小j的值，直到匹配到完全相等位置</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">11</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(&nbsp;j&nbsp;&gt;&nbsp;0&nbsp;&amp;&amp;&nbsp;str[i]&nbsp;!=&nbsp;str[j+1]&nbsp;)&nbsp;j&nbsp;=&nbsp;next[j];<br /><span style="color: #008080; ">12</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;如果能够找到以i结尾的后缀和以j+1结尾的前缀完全匹配，j自增1。</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">13</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(str[i]&nbsp;==&nbsp;str[j+1])&nbsp;j&nbsp;++;<br /><span style="color: #008080; ">14</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;这里j有两种情况：<br /></span><span style="color: #008080; ">15</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;j&nbsp;=&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;以i结尾的后缀找不到一个前缀和它完全匹配<br /></span><span style="color: #008080; ">16</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;j&nbsp;&gt;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;以i结尾的后缀和以j结尾的前缀完全匹配，更新Next函数的值</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">17</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;next[i]&nbsp;=&nbsp;j;<br /><span style="color: #008080; ">18</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br /><span style="color: #008080; ">19</span>&nbsp;}</div><p style="margin-bottom:0pt; margin-top:0pt; ">&nbsp;</p><p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-weight:bold; font-size:10.5000pt; font-family:'宋体'; ">PKU</span><span style="mso-spacerun:'yes'; font-weight:bold; font-size:10.5000pt; font-family:'宋体'; ">&nbsp;3461&nbsp;Oulipo</span></p><p style="text-indent:21.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">题意：求一个匹配串</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">T在目标串S中的出现次数。</span></p><p style="text-indent:21.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">题解：</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'Times New Roman'; ">求出</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'Times New Roman'; ">T的</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">N</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'Times New Roman'; ">ext数组</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">，然后和S进行KMP匹配，匹配时当j&nbsp;=&nbsp;=m的时候表示找到一个可行解，计数器+1，然后将Next[j]赋值给j，使得它的最长前缀能够继续和目标串进行匹配。</span></p><p style="text-indent:21.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">KMP匹配过程和Next数组的求解是一样的。</span></p><p style="text-indent:21.0000pt; margin-bottom:0pt; margin-top:0pt; ">&nbsp;</p><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;S[1<img src="http://www.cppblog.com/Images/dot.gif" alt="" />n]&nbsp;目标串<br /></span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #008000; "></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;T[1<img src="http://www.cppblog.com/Images/dot.gif" alt="" />m]&nbsp;匹配串&nbsp;</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #008000; "></span><span style="color: #0000FF; ">int</span>&nbsp;KMP(<span style="color: #0000FF; ">int</span>&nbsp;n,&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;*S,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;m,&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;*T)&nbsp;{<br /><span style="color: #008080; ">&nbsp;4</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;cnt&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">&nbsp;5</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;j&nbsp;=&nbsp;0,&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;=&nbsp;n;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">&nbsp;6</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(&nbsp;j&gt;0&nbsp;&amp;&amp;&nbsp;S[i]&nbsp;!=&nbsp;T[j+1])&nbsp;j&nbsp;=&nbsp;next[j];<br /><span style="color: #008080; ">&nbsp;7</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(S[i]&nbsp;==&nbsp;T[j+1])&nbsp;j++;<br /><span style="color: #008080; ">&nbsp;8</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(j&nbsp;==&nbsp;m)&nbsp;{<br /><span style="color: #008080; ">&nbsp;9</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cnt&nbsp;++;<br /><span style="color: #008080; ">10</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j&nbsp;=&nbsp;next[j];<br /><span style="color: #008080; ">11</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">12</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">13</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;cnt;<br /><span style="color: #008080; ">14</span>&nbsp;}</div><p style="margin-bottom:0pt; margin-top:0pt; ">&nbsp;</p><p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-weight:bold; font-size:10.5000pt; font-family:'宋体'; ">HDU</span><span style="mso-spacerun:'yes'; font-weight:bold; font-size:10.5000pt; font-family:'宋体'; ">&nbsp;4763&nbsp;Theme&nbsp;Section</span></p><p style="text-indent:21.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">题意：给定一个长度为</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">N(1&nbsp;&lt;=&nbsp;N&nbsp;&lt;=&nbsp;10</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; vertical-align:super; ">6</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">)的字符串S，问能否和模式串EAEBE进行匹配其中A和B表示任意随机字符，如果能匹配，输出E的最大可能长度，不能匹配输出0。</span></p><p style="text-indent:21.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">题解：首先利用KMP求出S的Next数组，那么S[1...Next[N]]、S[1...Next[Next[N]]]、S[1...Next[...[N]]&nbsp;]必定能和S的后缀进行完全匹配，将这些Next[i]利用一次迭代求出来，最终的答案一定在这些值中，然后从大到小枚举这些值，判断可行性。</span></p><p style="text-indent:21.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">假设当前枚举长度为i，那么在S[i+1&nbsp;...&nbsp;N-i]&nbsp;中如果能够找到一个长度为i的子串满足和S[1...i]完全匹配，那么i就是一个可行解，又因为枚举是从大到小进行的，所以i就是E可能的最大长度。</span></p><p style="text-indent:21.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">于是问题就转变成了判断S[i+1&nbsp;...&nbsp;N-i]中是否存在一个和S[1...i]完全匹配的子串。如果存在，那么必定存在一个k(&nbsp;2*i&nbsp;&lt;=&nbsp;k&nbsp;&lt;=&nbsp;N-i&nbsp;)，使得S[k-i+1&nbsp;...&nbsp;k]&nbsp;=&nbsp;=&nbsp;S[1&nbsp;...&nbsp;i&nbsp;]，所以必定有Next[Next[...[k]]]&nbsp;=&nbsp;=&nbsp;i，所以我们可以预先将S[i+1&nbsp;...&nbsp;N-i]区间内所有的Next值退化后进行Hash，然后在枚举某个长度i的时候去Hash数组中找i是否被标记，如果被标记说明存在某个k满足S[k-i+1&nbsp;...&nbsp;k]&nbsp;=&nbsp;=&nbsp;S[1&nbsp;...&nbsp;i&nbsp;]，i就是最大可能长度。</span></p><p style="margin-bottom:0pt; margin-top:0pt; ">&nbsp;</p><p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-weight:bold; font-size:10.5000pt; font-family:'宋体'; ">HDU</span><span style="mso-spacerun:'yes'; font-weight:bold; font-size:10.5000pt; font-family:'宋体'; ">&nbsp;2594&nbsp;Simpsons&#8217;&nbsp;Hidden&nbsp;Talents</span></p><p style="text-indent:21.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">题意：给定两个长度不大于</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">50000的</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">串，求两个串的一个最长公共子串满足子串为第一个串的前缀，并且为第二个串的后缀。</span></p><p style="text-indent:21.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">题解：将两个串用一个从未出现过的字符连接，拼成一个长度为</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">N的串，</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">然后进行一次自我匹配，求出</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">next数组，根据Next数组的定义，Next[N]就是所求的最大长度。</span></p><p style="margin-bottom:0pt; margin-top:0pt; ">&nbsp;</p><p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-weight:bold; font-size:10.5000pt; font-family:'宋体'; ">HDU&nbsp;3746&nbsp;Cyclic&nbsp;Nacklace</span></p><p style="text-indent:21.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">题意：给定一个长度为N(N&nbsp;&lt;=&nbsp;10</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; vertical-align:super; ">5</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">)的字符串S，求在它的末尾添加几个字符使得他变成一个至少重复两次的连续重复串，要求添加的字符数最少。</span></p><p style="text-indent:21.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">题解：首先利用KMP进行一次自我匹配求出Next数组，然后枚举重复串的长度i，令x&nbsp;=&nbsp;i&nbsp;*&nbsp;(N/i)，如果x&nbsp;-&nbsp;Next[x]&nbsp;==&nbsp;i，说明S[x]是S的一个连续重复子串（或者叫连续重复前缀更加贴切），理由很简单，将字符串S[x]以长度i为单位分组，</span></p><p style="text-indent:21.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">S[1...i]&nbsp;&nbsp;&nbsp;S[i+1...2i]&nbsp;&nbsp;S[2i+1...3i]&nbsp;&nbsp;&nbsp;&#8230;&#8230;&nbsp;&nbsp;&nbsp;S[(N/i-1)i&nbsp;+&nbsp;1...(N/i)i]</span></p><p style="margin-left:42.0000pt; text-indent:21.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">&nbsp;&nbsp;&nbsp;S[1...i]&nbsp;&nbsp;&nbsp;S[i+1...2i]&nbsp;&nbsp;&nbsp;&#8230;&#8230;&nbsp;&nbsp;S[(N/i-2)i&nbsp;+&nbsp;1...(N/i-1)i]</span></p><p style="text-indent:21.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">由于x&nbsp;+&nbsp;i&nbsp;=&nbsp;=&nbsp;Next[x]，可以列出连等式，有如下等价关系：S[1...i]&nbsp;=&nbsp;=&nbsp;S[i+1...2i]&nbsp;=&nbsp;=&nbsp;...&nbsp;=&nbsp;=&nbsp;S[(N/i-1)i&nbsp;+&nbsp;1...(N/i)i]。</span></p><p style="text-indent:21.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">那么剩下的就是要看S[x+1...N]是否为S的前缀，同样可以根据Next数组的定义进行判断，特殊的，当x&nbsp;==&nbsp;N时，S[x+1...N]&nbsp;==&nbsp;S[N+1,N]为空串，必定为S的前缀，也是满足条件的，枚举所有满足条件的长度L，取L&nbsp;-&nbsp;(N-x)的最小者就是答案了。</span></p><p style="margin-bottom:0pt; margin-top:0pt; ">&nbsp;</p><p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-weight:bold; font-size:10.5000pt; font-family:'宋体'; ">PKU&nbsp;2406&nbsp;Power&nbsp;Strings</span></p><p style="text-indent:21.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">题意：给定一个长度不超过N(N&nbsp;&lt;=&nbsp;10</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; vertical-align:super; ">6</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">)的字符串，它一定是某个串重复K次得到，求这个K的最大值。</span></p><p style="text-indent:21.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">题解：假设子串T重复K次后得到串S，那么T的长度一定为L&nbsp;=&nbsp;N/K(要整除)，则T&nbsp;=&nbsp;S[1...L]，将S拆分成K份，每份长度为L，则有</span></p><p style="text-indent:21.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">S[1...L]&nbsp;=&nbsp;S[L+1...2L]&nbsp;=&nbsp;S[2L+1...3L]&nbsp;=&nbsp;...&nbsp;=&nbsp;S[(K-1)L+1...KL]</span></p><p style="text-indent:21.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">由于要保证K最大，势必L要取最小，所以根据Next函数的定义，有Next[KL]&nbsp;=&nbsp;(K-1)L;</span></p><p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">即Next[N]&nbsp;=&nbsp;N&nbsp;-&nbsp;L，所以L&nbsp;=&nbsp;N&nbsp;-&nbsp;Next[N];</span></p><p style="text-indent:21.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">但是得出的长度L还要保证能被N整除，所以如果不能整除说明L&nbsp;=&nbsp;N，即K&nbsp;=&nbsp;1；而如果能整除，那么K&nbsp;=&nbsp;N&nbsp;/&nbsp;(N&nbsp;-&nbsp;Next[N]);</span></p><p style="margin-bottom:0pt; margin-top:0pt; ">&nbsp;</p><p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-weight:bold; font-size:10.5000pt; font-family:'宋体'; ">PKU&nbsp;2752&nbsp;Seek&nbsp;the&nbsp;Name,&nbsp;Seek&nbsp;the&nbsp;Fame</span></p><p style="text-indent:21.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">题意：给定一个长度为N(N&nbsp;&lt;=&nbsp;400000)的字符串，求它的前缀等于后缀的所有子串的长度。</span></p><p style="text-indent:21.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">题解：考察Next数组的定义。不断迭代求N的Next，Next[N]的Next......然后逆序输出即可。</span></p><p style="margin-bottom:0pt; margin-top:0pt; ">&nbsp;</p><p style="margin-bottom:0pt; margin-top:0pt; ">&nbsp;</p><div style="display: inline-block;"></div><p>&nbsp;</p><p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-weight:bold; font-size:10.5000pt; font-family:'宋体'; ">HDU&nbsp;3374&nbsp;String&nbsp;Problem</span><span style="mso-spacerun:'yes'; font-weight:bold; font-size:10.5000pt; font-family:'宋体'; "><o:p></o:p></span></p><p style="margin-bottom:0pt; margin-top:0pt; "></p><p style="text-indent:21.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">题意：给定一个长度为N(N&nbsp;&lt;=&nbsp;10</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; vertical-align:super; ">6</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">)的字符串S，然后将它进行左移，总共产生N个循环字符串，求其中字典序最小的串的编号以及这样的串的个数，和字典序最大的串的编号以及这样的串的个数。</span></p><p style="text-indent:21.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">题解：先求字典序最小的，字典序最大的只需要将每个字符用127减去本身再求一次字典序最小即可；定义两个指针i，j，i初始为0，j初始为1，再定义一个长度变量k&nbsp;=&nbsp;0：</span></p><p style="text-indent:21.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size:10.5000pt; font-family:'宋体'; ">1)&nbsp;</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">比较S[i+k]&nbsp;和S[j+k]的大小关系：</span></p><p style="margin-left:21.0000pt; text-indent:21.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">a)&nbsp;如果相等，k自增1；当k==N则跳出循环，否则继续1)的比较；</span></p><p style="margin-left:21.0000pt; text-indent:21.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">b)&nbsp;如果S[i+k]&nbsp;&lt;&nbsp;S[j+k]，j +=&nbsp;k + 1,&nbsp;k&nbsp;=&nbsp;0;&nbsp;</span></p><p style="margin-left:21.0000pt; text-indent:21.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">c)&nbsp;如果S[i+k]&nbsp;&gt;&nbsp;S[j+k],&nbsp;i +=&nbsp;k&nbsp;+ 1,&nbsp;k&nbsp;=&nbsp;0;</span></p><p style="text-indent:21.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size:10.5000pt; font-family:'宋体'; ">2)&nbsp;</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">如果i&nbsp;和j相等，j自增1；当j==N或i==N则跳出循环，否则继续1)的比较；</span></p><p style="margin-bottom:0pt; margin-top:0pt; ">&nbsp;</p><p style="text-indent:21.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">这样循环结束后如果，取i和j的小者就是答案。</span></p><p style="text-indent:21.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 宋体;">然后在利用求出来的下标，生成一个新的字符串作为匹配串和一个原串的两倍的串作为目标串进行KMP匹配，得到种数。<br /><br /></span></p><strong><span style="font-family: 宋体; text-indent: 28px;">PKU&nbsp;3690</span><span style="text-indent: 28px;">&nbsp;</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt;">Constellations</span></strong><p class="p0" style="text-indent:21.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 宋体;">题意：给定<font face="Times New Roman">N*M(N&lt;=1000,&nbsp;M&nbsp;&lt;=&nbsp;1000)</font><font face="宋体">的</font><font face="Times New Roman">01</font><font face="宋体">矩阵</font><font face="Times New Roman">S</font><font face="宋体">，再给定</font><font face="Times New Roman">T(T&nbsp;&lt;=&nbsp;100)</font><font face="宋体">个</font><font face="Times New Roman">P*Q(P&nbsp;&lt;=&nbsp;50,&nbsp;Q&nbsp;&lt;=&nbsp;50)</font><font face="宋体">的</font><font face="Times New Roman">01</font><font face="宋体">矩阵，问</font><font face="Times New Roman">P*Q</font><font face="宋体">的矩阵中有多少个是</font><font face="Times New Roman">S</font><font face="宋体">的子矩阵。</font></span><span style="font-size: 10.5pt; font-family: 宋体;"><o:p></o:p></span></p><p class="p0" style="text-indent:21.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 宋体;">题解：由于<font face="Times New Roman">P&nbsp;&lt;=&nbsp;50</font><font face="宋体">，所以我们可以把所有</font><font face="Times New Roman">P*Q</font><font face="宋体">的矩阵进行二进制位压缩，将</font><font face="Times New Roman">P*Q</font><font face="宋体">的矩阵的每一列压缩成一个</font><font face="Times New Roman">64</font><font face="宋体">位整数，这样</font><font face="Times New Roman">P*Q</font><font face="宋体">的矩阵就变成了一个长度为</font><font face="Times New Roman">Q</font><font face="宋体">的整数序列</font><font face="Times New Roman">T</font><font face="宋体">，用同样的方式对</font><font face="Times New Roman">N*M</font><font face="宋体">的矩阵进行压缩，总共可以产生</font><font face="Times New Roman">(N-P+1)</font><font face="宋体">个长度为</font><font face="Times New Roman">M</font><font face="宋体">的整数序列，剩下的就是进行最多</font><font face="Times New Roman">(N-P+1)</font><font face="宋体">次</font><font face="Times New Roman">KMP</font><font face="宋体">匹配了。</font></span><span style="mso-spacerun:'yes'; font-weight:bold; font-size:10.5000pt; font-family:'Times New Roman'; "><o:p></o:p></span></p><p style="text-indent:21.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 宋体;"><br /><br /></span></p><img src ="http://www.cppblog.com/menjitianya/aggbug/207354.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/menjitianya/" target="_blank">英雄哪里出来</a> 2014-06-20 21:37 <a href="http://www.cppblog.com/menjitianya/archive/2014/06/20/207354.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>高斯消元</title><link>http://www.cppblog.com/menjitianya/archive/2014/06/08/207226.html</link><dc:creator>英雄哪里出来</dc:creator><author>英雄哪里出来</author><pubDate>Sun, 08 Jun 2014 11:55:00 GMT</pubDate><guid>http://www.cppblog.com/menjitianya/archive/2014/06/08/207226.html</guid><wfw:comment>http://www.cppblog.com/menjitianya/comments/207226.html</wfw:comment><comments>http://www.cppblog.com/menjitianya/archive/2014/06/08/207226.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/menjitianya/comments/commentRss/207226.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/menjitianya/services/trackbacks/207226.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 高斯消元算法目的：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;高斯消元，一般用于求解线性方程组AX&nbsp;=&nbsp;B（或&nbsp;模线性方程组AX&nbsp;mod&nbsp;P&nbsp;=&nbsp;B），以四个未知数，四个方程为例，AX=B表示成4x4的矩&nbsp; &nbsp;...&nbsp;&nbsp;<a href='http://www.cppblog.com/menjitianya/archive/2014/06/08/207226.html'>阅读全文</a><img src ="http://www.cppblog.com/menjitianya/aggbug/207226.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/menjitianya/" target="_blank">英雄哪里出来</a> 2014-06-08 19:55 <a href="http://www.cppblog.com/menjitianya/archive/2014/06/08/207226.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>