??xml version="1.0" encoding="utf-8" standalone="yes"?>精品无码久久久久久国产,日韩精品久久久肉伦网站,国产成人精品久久综合http://m.shnenglu.com/tgh621/category/8151.html专注技术开?/description>zh-cnWed, 12 Nov 2008 02:42:37 GMTWed, 12 Nov 2008 02:42:37 GMT60 【{】字W串匚w法Q四Q可以滑动多q?/title><link>http://m.shnenglu.com/tgh621/archive/2008/11/11/66596.html</link><dc:creator>大v</dc:creator><author>大v</author><pubDate>Tue, 11 Nov 2008 05:09:00 GMT</pubDate><guid>http://m.shnenglu.com/tgh621/archive/2008/11/11/66596.html</guid><wfw:comment>http://m.shnenglu.com/tgh621/comments/66596.html</wfw:comment><comments>http://m.shnenglu.com/tgh621/archive/2008/11/11/66596.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/tgh621/comments/commentRss/66596.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/tgh621/services/trackbacks/66596.html</trackback:ping><description><![CDATA[     摘要: 记得在穷举法中,每一比较后Q无论成与不成,都将模式向右滑动一个位|,然后l箋比较。有没有办法能利用之前的比较l果Q得模式滑动的更远一点呢Q? 在介l经典的KMP法前,我先介绍几个单的滑动cȝ法? Not So Naive 同名字一Pq个法的确有点q稚Q它Ҏ模式的前两个字符是否相同来滑动比ID法稍长一点的距离Q如果前两个字符相同Q那么文本中与第二个字符不同则必然也与第一...  <a href='http://m.shnenglu.com/tgh621/archive/2008/11/11/66596.html'>阅读全文</a><img src ="http://m.shnenglu.com/tgh621/aggbug/66596.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/tgh621/" target="_blank">大v</a> 2008-11-11 13:09 <a href="http://m.shnenglu.com/tgh621/archive/2008/11/11/66596.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> 【{】字W串匚w法Q三Q位q算的魔法——KR与SOhttp://m.shnenglu.com/tgh621/archive/2008/11/11/66595.html大v大vTue, 11 Nov 2008 05:08:00 GMThttp://m.shnenglu.com/tgh621/archive/2008/11/11/66595.htmlhttp://m.shnenglu.com/tgh621/comments/66595.htmlhttp://m.shnenglu.com/tgh621/archive/2008/11/11/66595.html#Feedback0http://m.shnenglu.com/tgh621/comments/commentRss/66595.htmlhttp://m.shnenglu.com/tgh621/services/trackbacks/66595.html位运经常能做出一些不可思议的事情来Q例如不用时变量要交换两个数该怎么做呢Q一个没接触q这c问题的人打M也想不出来。如果拿围棋来做比喻Q那么位q算可以Mؓ~程中的“手筋”?/div>

按位的存储方式能提供最大的存储I间利用率,而随着I间被压~的同时Q由于CPUg的直接支持,速度竟然奇般的提升了。D个例子,普通的数组要实现移位操作,那是O(n)的时间复杂度Q而如果用位运中的移位,是一个指令搞定了?/div>

KR法

KR法之前W一章介l中说是利用哈希Q原文这么介l的。而我的看法是Q哈希只是一个幌子。这个算法的基本步骤同穷举法一P不同在于每趟比较前先比较一下哈希|hashg同就不必比较了。而如果hash值无法高效计,q样的改q甚臌不如不改q呢。你xQ比较之前还要先计算一遍hash|有计的功夫Q直接比都比完了?/div>

KR法Z把挨个字W的比较转化Z个整数的比较Q它把一个m长度的字W串直接当成一个整数来对待Q以2为基数的整数。这样呢Q在W一ơ算个整数后Q以后每ơ移动窗口,只需要移L高位Q再加上最低位Q就得出一个新的hash倹{但是m太大Q导致超机所能处理的最大整数怎么办?不用担心Q对整数最大值取模,借助模运的Ҏ,一切可以完的q行。而且׃是对整数最大值取模,所以取模这一步都可以忽略掉?/div>

q是KR法的代码:
  1. #define REHASH(a, b, h) ((((h) - (a)*d) << 1) + (b))
  2. void KR(char *x, int m, char *y, int n) {
  3.    int d, hx, hy, i, j;
  4.    /* Preprocessing */
  5.    /* computes d = 2^(m-1) with
  6.       the left-shift operator */
  7.    for (d = i = 1; i < m; ++i)
  8.       d = (d<<1);
  9.    for (hy = hx = i = 0; i < m; ++i) {
  10.       hx = ((hx<<1) + x[i]);
  11.       hy = ((hy<<1) + y[i]);
  12.    }
  13.    /* Searching */
  14.    j = 0;
  15.    while (j <= n-m) {
  16.       if (hx == hy && memcmp(x, y + j, m) == 0)
  17.          OUTPUT(j);
  18.       hy = REHASH(y[j], y[j + m], hy);
  19.       ++j;
  20.    }
  21. }
我们可以看到QKR法有O(m)复杂度的预处理的q程QL觉它的预处理没有反映出模式本w的特点来,D它的搜烦q程依然是O(mn)复杂度的Q只不过一般情况下体现不出来,?aaaaaaaaaaaaaaaaaaaaaaaaa"中搜"aaaaa"q道KR多慢了?/div>

ȝ来说QKR法比穷丑ּ一点,比较ơ数的期望值是O(m+n)?/div>

Shift Or 法

Z最大限度的发挥Zq算的能力,Shift Or法有了一个最大缺P模式不能过机器字长。按现在普遍?2位机Q机器字长就?2Q也是只能用来匚w不大?2个字W的模式。而带来的好处是匚wq程是O(n)旉复杂度的Q达到自动机的速度了。而预处理所p的时间与I间都ؓO(m+σ)Q比自动机少多了?/div>

我们来看看它怎么巧妙的实?#8220;只看一?#8221;的:

假设我们有一个升U系l,d有m个别。每一关都会放一个新人到W?U上Q然后对于系l中所有的人,如果通过考验Q升一U,否则Q咔嚓掉。而对于升到最高的hQ那说明他连l通过了mơ考验Q这是我们要选拔的h?/div>

KR法的思\是上面的升U规则,l出的考验是你的位置上的字符与给出的文本字符是否一致。升满了,说明在连lm个位|上与不断给出的文本字符一_q也是匚w成功了?/div>

明白了这个思\后,疑问开始出来了Q检查哪些位|与文本字符一_需要mơ吧Q那么整个算法就是O(mn)了?

现在p位运出ZQ对Q这个算法的思\是很W,但是我位q算的效率高呀Q事先我出字母表中每个字符在模式中出现的位|,用位的方式存在整数里Q出现的地方标ؓ0Q不出现的地Ҏ?Q这hd使用σ个整敎ͼ同样Q我用一个整数来表示升状态,某个U别有h标?Q没人就标ؓ1Q整个系l升U就恰好可以?#8220;UM”来进行,当检查位|的时候只需要与表示状态的整数“?#8221;1ơ,所以整个算法就成O(n)了。Shift-Or法名字是q样来的?/div>

有一个地方很奇怪,0?的设定和通常的习惯相反呀Q习惯上Q喜Ƣ把存在设ؓ1Q不存在设ؓ0的。不q这里没有办法,因ؓUM新移出来的是0?/div>

q时我们来看代码容易理解多了:
  1. #define WORDSIZE sizeof(int)*8
  2. #define ASIZE 256
  3. int preSo(const char *x, int m, unsigned int S[]) {
  4.         unsigned int j, lim;
  5.         int i;
  6.         for (i = 0; i < ASIZE; ++i)
  7.                 S[i] = ~0;
  8.         for (lim = i = 0, j = 1; i < m; ++i, j <<= 1) {
  9.                 S[x[i]] &= ~j;
  10.                 lim |= j;
  11.         }
  12.         lim = ~(lim>>1);
  13.         return(lim);
  14. }
  15. void SO(const char *x, int m, const char *y, int n) {
  16.         unsigned int lim, state;
  17.         unsigned int S[ASIZE];
  18.         int j;
  19.         if (m > WORDSIZE)
  20.                 error("SO: Use pattern size <= word size");
  21.         /* Preprocessing */
  22.         lim = preSo(x, m, S);
  23.         /* Searching */
  24.         for (state = ~0, j = 0; j < n; ++j) {
  25.                 state = (state<<1) | S[y[j]];
  26.                 if (state < lim)
  27.                         OUTPUT(j - m + 1);
  28.         }
  29. }
代码中lim变量其实是一个标,例如出现最高的状态是01111111Q那么lim成?0000000Q因此只要小于limQ就表示最高上的0出现了?

原文中对Shift-Or法的描q还是很难懂的,如果对着那段说明ȝ代码Q有点不知所云的感觉。我q是直接对着代码才想个升U的比喻来?/div>

大v 2008-11-11 13:08 发表评论
]]> [转]字符串匹配算法(二)ID与自动机http://m.shnenglu.com/tgh621/archive/2008/11/11/66594.html大v大vTue, 11 Nov 2008 05:07:00 GMThttp://m.shnenglu.com/tgh621/archive/2008/11/11/66594.htmlhttp://m.shnenglu.com/tgh621/comments/66594.htmlhttp://m.shnenglu.com/tgh621/archive/2008/11/11/66594.html#Feedback0http://m.shnenglu.com/tgh621/comments/commentRss/66594.htmlhttp://m.shnenglu.com/tgh621/services/trackbacks/66594.html
Rob Pike, 最伟大的C 语言大师之一, 在《Notes on C Programming》中阐述了一个原则:花哨的算法比单算法更Ҏ出bug、更隑֮玎ͼ量使用单的法配合单的数据l构。?/span>Ken Thompson——Unix 最初版本的设计者和实现者,宗偈语般地对Pike 的这一原则作了Q?nbsp;拿不准就IDQWhen in doubt , use brute forceQ?/span>?nbsp;而对于装13爱好者来_更是自豪的称其用的是BF法?/span>

ID法用在字W串匚w上,单的描述是Q检查文本从0到n-m的每一个位|,看看从这个位|开始是否与模式匚w。这U方法还是有一些优点的Q如Q不需要预处理q程Q需要的额外I间为常敎ͼ每一比较时可以以Q意顺序进行?br>

管它的旉复杂度ؓO(mn)Q例如在文本"aaaaaaaaaaaaaaaaaaaaaaaaaaa"中寻?aaaaab"Ӟ完全体现出来了。但是算法的期望值却?nQ这表明该算法在实际应用中效率不低?/div>

C代码如下Q?/div>
  1. void BF(char *x, int m, char *y, int n) {
  2.    int i, j;
  3.    /* Searching */
  4.    for (j = 0; j <= n - m; ++j) {
  5.       for (i = 0; i < m && x[i] == y[i + j]; ++i);
  6.       if (i >= m)
  7.          OUTPUT(j);
  8.    }
  9. }
  10.   
如果我们注意到C库函数是汇编优化q的Qƈ通常能提供比C代码更高的性能的话Q我们可以用memcmp来完成每一比较过E,从而达到更好的性能Q?/div>
  1. #define EOS '\0'
  2.    
  3. void BF(char *x, int m, char *y, int n) { 
  4.   char *yb; 
  5.   /* Searching */ 
  6.   for (yb = y; *y != EOS; ++y) 
  7.     if (memcmp(x, y, m) == 0) 
  8.       OUTPUT(y - yb);
  9. }
自动机的Ҏ其实和穷举法有点怼Q都是用最单直白的方式来做事情。区别在于穷举法是在计算Q而自动机则是查表。尽自动机的构造过E有一点点难解Q要涉及到DFA的理论,但是自动机的比较q程那绝Ҏ单到无语?/div>

单说来,Ҏ模式Ԍd了一张大的表|表格m+1?#963;列,q里σ表示字母表的大小。表格每一行表CZU状态,状态数比模式长度多1。一开始的状态是0Q也是处在表格的第0行,q一行的每个元素指示了当遇到某字W时p转到另一个状态。每当蟩转到最l状态时Q表C找C一个匹配?/div>

语言表述hq是比较啰嗦Q看代码q道了Q?/div>
  1. #define ASIZE 256
  2. int preAut(const char *x, int m, int* aut) {
  3.         int i, state, target, old;
  4.         for (state = 0, i = 0; i < m; ++i) {
  5.                 target = i + 1;
  6.                 old = aut[state * ASIZE + x[i]];
  7.                 aut[state * ASIZE + x[i]] = target;
  8.                 memcpy(aut + target * ASIZE, aut + old * ASIZE, ASIZE*sizeof(int));
  9.                 state = target;
  10.         }
  11.         return state;
  12. }
  13. void AUT(const char *x, int m, const char *y, int n) {
  14.         int j, state;
  15.         /* Preprocessing */
  16.         int *aut = (int*)calloc((m+1)*ASIZE, sizeof(int));
  17.         int Terminal = preAut(x, m, aut);
  18.         /* Searching */
  19.         for (state = 0, j = 0; j < n; ++j) {
  20.                 state = aut[state*ASIZE+y[j]];
  21.                 if (state == Terminal)
  22.                         OUTPUT(j - m + 1);
  23.         }
  24. }
Q?span class=Apple-style-span style="COLOR: rgb(51,51,153)">注:原文的代码用一个有向图的数据结构,我遵循大师的指引Q改用了更简单一点的数组Q?br>

从代码上我们很容易看出,自动机的构造需要时间是O(mσ)Q空间也是O(mσ)Q严格来说这份代码用了O((m+1)σ)Q,但是一旦构造完毕,接下来匹配的旉则是O(n)?/div>

匚w的过E前面已l说了,太简单了没什么好说的Q这里就解释一下构造过E吧Q?/div>

我们构造的目标是对应模式长度,构造出同样多的状态,?表示初始状态,然后W一个字W用状?表示Q第二个用状?表示Q依ơ类推,直到最后一个字W,用m表示Q也是最l状态?/div>

一开始,数组全都|?Q,q个时候的自动机遇CQ何字W都转到初始状态。然后给它看模式的第一个字W,假设q是'a'吧,告诉它,状?遇到'a'应该C个新的状态——状?Q所以把W?行的W?a'列修改ؓ1。而这个时候状?q是I白的,怎么办呢Q?/div>

q时候状?想呀Q在我被告知遇到'a'要去状?之前Q我原本遇到'a'都要ȝ?的,也就是修改之前第'a'列所指的那个状态,UCؓold状态吧Q而现在我遇到'a'却要M个新的状态,既然以前old状态能处理遇到'a'之后的事情,那么我让新的状态像old状态一样就好了。于是状?把old状态拷贝到状??/div>

现在轮到状?了,l它看第二个字符Q它也如法炮Ӟ指向了状?Q又把old状态拷贝给了状??/div>

于是Q状态机在q种代代传承的过E中构造完毕了?/div>

虽然理论上自动机是最完美的匹配方式,但是׃预处理的消耗过大,实践中,主要q是用于正则表达式?/div>

l语Q穷举法与自动机各自C两个极端Q因此都没能辑ֈl合性能的最佻I本文之后介绍的算法,可以看成是在ID和自动机两者之间取舍权衡的l果?/div>


大v 2008-11-11 13:07 发表评论
]]>[转]字符串匹配算法(一Q简?/title><link>http://m.shnenglu.com/tgh621/archive/2008/11/11/66593.html</link><dc:creator>大v</dc:creator><author>大v</author><pubDate>Tue, 11 Nov 2008 05:05:00 GMT</pubDate><guid>http://m.shnenglu.com/tgh621/archive/2008/11/11/66593.html</guid><wfw:comment>http://m.shnenglu.com/tgh621/comments/66593.html</wfw:comment><comments>http://m.shnenglu.com/tgh621/archive/2008/11/11/66593.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/tgh621/comments/commentRss/66593.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/tgh621/services/trackbacks/66593.html</trackback:ping><description><![CDATA[<div>文本信息可以说是q今为止最主要的一U信息交换手D,而作为文本处理中的一个重要领域——字W串匚wQ就是我们今天要说的话题。(<span id="zxjtp79" class=Apple-style-span style="COLOR: rgb(51,51,153)">原文q特意提及文本数据数量每18个月M番,以此法必须要是高效的。不q我注意到摩定律也?8个月ȝQ这正说明数据的增长是紧紧跟随处理速度的,因此是使用高效的算法,来待处理的数据׃多。这也提C屏q前的各位,代码不要写得太快?#8230;…</span>Q?/div> <div><br></div> <div>字符串匹配指的是从文本中扑ևl定字符ԌUCؓ模式Q的一个或所有出现的位置。本文的法一律输出全部的匚w位置。模式串在代码中用x[m]来表C,文本用y[n]来,而所有字W串都构造自一个有限集的字母表ΣQ其大小?#963;?/div> <div><br></div> <div>Ҏ先给出模式还是先l出文本Q字W串匚w分ؓ两类ҎQ?/div> <div> <ul> <li><span id="7v9hx99" class=Apple-style-span style="LINE-HEIGHT: normal">W一cL法基于自动机或者字W串的组合特点,其实CQ通常是对模式q行预处理;</span><br> <li><span id="flpr9d7" class=Apple-style-span style="LINE-HEIGHT: normal">W二cL法对文本建立索引Q这也是现在搜烦引擎采用的方法?/span></li> </ul> 本文仅讨论第一cL法?br></div> <div><br></div> <div>文中的匹配算法都是基于这样一U方式来q行的:设想一个长度ؓm的窗口,首先H口的左端和文本的左端对齐,把窗口中的字W与模式字符q行比较Q这UCؓ一比较,当这一比较完全匹配或者出现失配时Q将H口向右Ud。重复这个过E,直到H口的右端到达了文本的右端。这U方法我们通常叫sliding window?/div> <div><br></div> <div>对于ID法来_扑ֈ所有匹配位|需要的旉为O(mn)Q基于对ID法改q的l果Q我们按照每一比较时的比较顺序,把这些算法分Z下四U:</div> <div> <ol> <li>从左到右Q最自然的方式,也是我们的阅读顺? <li>从右到左Q通常在实践中能生最好的法 <li>Ҏ序Q可以达到理Z的极? <li>L序Q这些算法跟比较序没关p(例如Q穷举法Q?/li> </ol> </div> <div>一些主要算法的单介l如下:</div> <div><br></div> <div><span id="zxj7pvv" class=Apple-style-span style="FONT-WEIGHT: bold">从左到右</span></div> <div>采用哈希Q可以很Ҏ在大部分情况下避免二ơ比较,通过合理的假设,q种法是线性时间复杂度的。它最先由Harrison提出Q而后由Karp和Rabin全面分析Q称为KR法?/div> <div>在假设模式长度不大于机器字长ӞShift-Or法是很高效的匹配算法,同时它可以很Ҏ扩展到模p匹配上?/div> <div>MP是第一个线性时间算法,随后被改qؓKMPQ它的匹配方式很cM于自动机的识别过E,文本的每个字W与模式的每个字W比较不会超qlog<span id="7pj77jh" class=Apple-style-span style="VERTICAL-ALIGN: sub">Φ</span>(m+1)Q这?#934;是黄金分隔比1.618Q而随后发现的cM法——Simon法Q得文本的每个字符比较不超q?+log<span id="7f7jn77" class=Apple-style-span style="VERTICAL-ALIGN: sub">2</span>mQ这三种法在最坏情况下都只?n-1ơ比较。(<span id="9p79tt9" class=Apple-style-span style="COLOR: rgb(51,51,153)">抱歉限于我的水^q一D|没看懂也没能查证Q大家就看个意思吧</span>Q?/div> <div>Z定性有限自动机的算法对文本字符刚好只用nơ访问,但是它需要额外的<span id="77hrn19" class=Apple-style-span style="FONT-FAMILY: 'Times New Roman'">O(mσ)</span>的空间?/div> <div>一U叫Forward Dawg Matching的算法同样也只用nơ访问,它用了模式的后~自动机?/div> <div>Apostolico-Crochemore法是一U简单算法,最坏情况下也只需?n/2ơ比较?br></div> <div>q有一U不那么q稚QNot So NaiveQ的法Q最坏情况下是nqxQ但是预处理q程的时间和I间均ؓ常数Q而且q_情况下的性能非常接近U性?/div> <div><br></div> <div><span id="hvp7dlt" class=Apple-style-span style="FONT-WEIGHT: bold">从右到左</span></div> <div>BM法被认为是通常应用中最有效率的法了,它或者它的简化版本常用于文本~辑器中的搜索和替换功能Q对于非周期性的模式而言Q?n是这U算法的比较ơ数上界了,不过对于周期性模式,它最坏情况下需要n的二ơ方?/div> <div>BM法的一些变U避免了原算法的二次斚w题,比较高效的有QApostolico and Giancarlo法、Turbo BM法和Reverse Colussi法?/div> <div>实验的结果表明,Quick Search法QBM的一个变U)以及Z后缀自动机的Reverse Factor和Turbo Reverse Factor法是实践中最有效的算法了?br></div> <div>Zhu and Takaoka法和BR法也是BM的变U,它们则需?span class=Apple-style-span style="FONT-FAMILY: 'Times New Roman'">O(σ</span><span id="d77799f" class=Apple-style-span style="FONT-FAMILY: 'Times New Roman'"><span id="vr77bz9" class=Apple-style-span style="VERTICAL-ALIGN: super">2</span></span><span id="fdrdv99" class=Apple-style-span style="FONT-FAMILY: 'Times New Roman'">)</span>的额外空间?/div> <div><br></div> <div><span id="9dxtnxf" class=Apple-style-span style="FONT-WEIGHT: bold">Ҏ序</span></div> <div>最先达到空间线性最优的是Galil-Seiferas和Two Way法Q它们把模式分ؓ两部分,先从左到x索右边的部分Q如果没有失配,再搜索左边的部分?/div> <div>Colussi和Galil-Giancarlo法模式位|分Z个子集,先从左至x索第一个子集,如果没有失配Q再搜烦剩下的。Colussi法作ؓKMP法的改q,使得最坏情况下只需?n/2ơ比较,而Galil-Giancarlo法则通过改进Colussi法的一个特D情况,把最坏比较次数减到?n/3?/div> <div>最佛_配和M最大位Uȝ法分别根据模式的字符频率和首字位U,Ҏ式位|进行排序?br></div> <div>Skip SearchQKMP Skip Search和Alpha Skip Search法q用“?#8221;的方法来军_模式的v始位|?br></div> <div><br></div> <div><span id="nl7dvhn" class=Apple-style-span style="FONT-WEIGHT: bold">L序</span></div> <div><span id="jzvfb9l" class=Apple-style-span style="FONT-WEIGHT: bold"><span id="ntnrvvt" class=Apple-style-span style="FONT-WEIGHT: normal">Horspool法也是BM的一个变U,它用一U移位函敎ͼ而与字符比较序不相qӀ还有其他的变种如:</span><span id="v7fhlvt" class=Apple-style-span style="FONT-WEIGHT: normal">Quick Search法Q?/span><span id="zzbnp97" class=Apple-style-span style="FONT-WEIGHT: normal">Tuned Boyer-Moore法Q?/span><span id="xnzl9l9" class=Apple-style-span style="FONT-WEIGHT: normal">Smith法Q?/span><span id="b97ztfd" class=Apple-style-span style="FONT-WEIGHT: normal">Raita法?/span><br></span></div> <div><br></div> <div>在接下来的章节中Q我们会l出上面q些法的实现。我们把字母表限定ؓASCII码或者它的Q意子集,~程语言用CQ这意味着数组索引是从0开始,而字W串以NULLl尾?/div> <div><br></div> <div>Q?span class=Apple-style-span style="COLOR: rgb(51,51,153)">W一章完。好像这些算法被挨个怺个遍Q反而不知道该选哪一U了Q老外介绍别h的东西时是q样Q尽来虚的?/span>Q?/div> <img src ="http://m.shnenglu.com/tgh621/aggbug/66593.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/tgh621/" target="_blank">大v</a> 2008-11-11 13:05 <a href="http://m.shnenglu.com/tgh621/archive/2008/11/11/66593.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://m.shnenglu.com/" title="精品视频久久久久">精品视频久久久久</a> <div class="friend-links"> </div> </div> </footer> <a href="http://www.2tou.cn" target="_blank">þˬˬav</a>| <a href="http://www.cizbuk.cn" target="_blank">Ʒþþþþ޾Ʒ</a>| <a href="http://www.52888666.cn" target="_blank">ƷþþĻ</a>| <a href="http://www.93jk.cn" target="_blank">þþƷƷapp</a>| <a href="http://www.sensor17.cn" target="_blank">þþþùƷ </a>| <a href="http://www.bkqxv.cn" target="_blank">þùƷ</a>| <a href="http://www.bjsdmngs.cn" target="_blank">޾Ʒþò</a>| <a href="http://www.0795fcw.cn" target="_blank">þþ99Ʒһ</a>| <a href="http://www.yy1122.cn" target="_blank">ݺɫþ</a>| <a href="http://www.05xx.cn" target="_blank">99þѹƷ</a>| <a href="http://www.ghzu.cn" target="_blank">þùɫAVѹۿ</a>| <a href="http://www.zhantu520.cn" target="_blank">޾þþһ</a>| <a href="http://www.qlmoban.cn" target="_blank">һAëƬѹۿþþƷ</a>| <a href="http://www.ferrariwang.cn" target="_blank"> ŷ þ</a>| <a href="http://www.hanshigu.cn" target="_blank">þõӰ2021</a>| <a href="http://www.jiedidianzubiao.cn" target="_blank">þþƷ9988</a>| <a href="http://www.ahsxd.org.cn" target="_blank">۲ӰԺþùƷ</a>| <a href="http://www.eksn.cn" target="_blank">99þþƷһѿ</a>| <a href="http://www.spdx.com.cn" target="_blank">ƷþþþjkƷ</a>| <a href="http://www.d5430.cn" target="_blank">69SEXþþƷ鶹</a>| <a href="http://www.shlinfeng.com.cn" target="_blank">91þùۺϾƷ</a>| <a href="http://www.z2023.cn" target="_blank">99þþùƷ޿</a>| <a href="http://www.xn88.cn" target="_blank">jizzjizzƷþ</a>| <a href="http://www.cahe8.cn" target="_blank">˾þþƷ</a>| <a href="http://www.gouyimai.cn" target="_blank">þþƷѲ</a>| <a href="http://www.chezhuangbao.cn" target="_blank">ŷƷרþ</a>| <a href="http://www.nt52.cn" target="_blank">þþþAVۿ </a>| <a href="http://www.essledyntp.com.cn" target="_blank">պþþþĻ</a>| <a href="http://www.78cbg.cn" target="_blank">պƷþһ</a>| <a href="http://www.gofiv.cn" target="_blank">18ƾþþAAAƬ</a>| <a href="http://www.http2009.cn" target="_blank">ݹƷþþþþ</a>| <a href="http://www.citysoso.cn" target="_blank">avþþþþòվ</a>| <a href="http://www.yizhangguan.cn" target="_blank">99þþƷһ </a>| <a href="http://www.hldqptt.net.cn" target="_blank">þþƷ</a>| <a href="http://www.node-js.cn" target="_blank">þþþѾƷ</a>| <a href="http://www.jkwovf.cn" target="_blank">þ¶Ʒ</a>| <a href="http://www.xiaohaa.cn" target="_blank">ҹƷþþþþëƬ</a>| <a href="http://www.qinghaichu.cn" target="_blank">Ʒþ</a>| <a href="http://www.dyba2008.cn" target="_blank">޹˾ƷŮ˾þþ</a>| <a href="http://www.the-music-cable.cn" target="_blank">ŷһþþþþþôƬ</a>| <a href="http://www.csmfy.cn" target="_blank">þþþavר</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>