• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            2011年1月11日

            求兩個(gè)正規(guī)式之間的編輯距離

            正規(guī)式與編輯距離都是常見知識,如果不熟悉請見原題[1]

             

            兩個(gè)字符串之間的編輯距離的經(jīng)典解法是動態(tài)規(guī)劃。然而正規(guī)式可能包含無窮多個(gè)字符串。 不好將它轉(zhuǎn)化到兩字符串的編輯距離上。另外一個(gè)問題,首先要有一種能夠識別正規(guī)式的方法,就像進(jìn)行表達(dá)式計(jì)算時(shí),用遞歸下降方法來識別就很順手。

            一時(shí)之間想不起用什么來表示正規(guī)式,后來看到解題報(bào)告 [2] 才有恍然大悟的感覺,用一個(gè)NFA[3]來表示正規(guī)式(編譯原理課上學(xué)過的,還是重點(diǎn))。這樣狀態(tài)非常的清晰。

            首先將正規(guī)式轉(zhuǎn)換成NFA的形式,這樣兩個(gè)正規(guī)式,就變成了兩個(gè)NFA。設(shè)<x , y>表示當(dāng)前匹配到第一個(gè)NFAx狀態(tài),第二個(gè)NFAy狀態(tài)所消耗的當(dāng)前最少代價(jià)。對于當(dāng)前的狀態(tài)<s1, s2>尋找他所有的后繼<t1, t2>,如果發(fā)現(xiàn)能夠更新后繼<t1, t2>,那么更新它,并且將它入隊(duì),用于更新其他的狀態(tài)。當(dāng)隊(duì)列里空了時(shí)候,那么就求到了最小編輯距離。

            這里有個(gè)小技巧,就是標(biāo)記當(dāng)前狀態(tài)是否已經(jīng)在隊(duì)列中,防止隊(duì)列中出現(xiàn)重復(fù)狀態(tài)。具體實(shí)現(xiàn)可以參考UESTC_Melody的代碼[4],寫的非常優(yōu)美。

             

            引用

            [1]http://acmicpc-live-archive.uva.es/nuevoportal/data/problem.php?p=5109

            [2] http://icpc.amrita.ac.in/2010/images/solution_logic.pdf

            [3] http://en.wikipedia.org/wiki/Nondeterministic_finite_state_machine

            [4] http://acm.hust.edu.cn:8080/judge/problem/viewSource.action?id=56951

            posted @ 2011-01-11 16:21 王之昊 閱讀(459) | 評論 (0)編輯 收藏


            2010年12月27日

            OpenMP官方推薦的一本教程。
            下載地址為http://www.ppurl.com/2008/12/using-openmp-portable-shared-memory-parallel-programming.html

            看這本書的目的是想了解如何寫一個(gè)并行程序。只有300來頁,給自己一個(gè)星期大概瀏覽一遍,對于這種語言類的書一個(gè)星期就夠了。一天50頁。

            posted @ 2010-12-27 18:27 王之昊 閱讀(432) | 評論 (0)編輯 收藏


            2010年11月24日

                 摘要: 福州賽區(qū)總結(jié)  閱讀全文

            posted @ 2010-11-24 13:16 王之昊 閱讀(541) | 評論 (2)編輯 收藏


            2010年8月20日

            1.在做多邊形切割時(shí),常常先加一個(gè)框,框不宜加的過大,比如eps=1e-8,那么框最大不要超過1e7,保證他們的精度之和能夠保證在15位之內(nèi)。這樣可以防止在運(yùn)算過程中出現(xiàn)舍入誤差。

            2 double的范圍是 -1.7*10^(-308) ~ 1.7 * 10^308。超過此范圍,可以通過儲存他們的指數(shù)來保證精度。

            posted @ 2010-08-20 16:25 王之昊 閱讀(226) | 評論 (0)編輯 收藏


            2010年7月25日

            旋轉(zhuǎn)

            posted @ 2010-07-25 12:42 王之昊 閱讀(216) | 評論 (0)編輯 收藏


            2010年7月4日

            http://acm.pku.edu.cn/JudgeOnline/problem?id=1259
            the picnic

            POJ2823

            hdu3401

            http://202.120.80.191/state.php?problemid=1016
            best cow fence

            posted @ 2010-07-04 22:33 王之昊 閱讀(240) | 評論 (0)編輯 收藏


            2010年7月3日


            Stars


            題意:
            給你一副星座地圖,還有若干星座,對于每個(gè)星座,尋找他在地圖中出現(xiàn)的次數(shù)。其中允許旋轉(zhuǎn)和縮放,若某個(gè)星座在地圖上的兩個(gè)映射A,B所包含的點(diǎn)集是一樣的,則A,B算一次。

                  大致思路是取出星座的第一,第二點(diǎn),然后枚舉這兩個(gè)點(diǎn)在地圖中的位置,將其他的點(diǎn)旋轉(zhuǎn)過去檢查是否合法。計(jì)算出次數(shù)S。

                   然后在類似的計(jì)算出星座在自身中重復(fù)出現(xiàn)的次數(shù)B,最后答案為S / B
                  
            在具體實(shí)現(xiàn)上有幾個(gè)問題:

            • 取整函數(shù)的寫法:
            double round(double d)
            {
                return floor(d + 0.5);
            }

            • 最開始的速度很慢,分析原因有:
            1. 用了vector,導(dǎo)致變慢, vector確實(shí)是慢了,改成數(shù)組 1000ms-->204ms
            2. 用了map和set導(dǎo)致變慢,將map改成手寫的hash,204ms-->110ms
              • 遇到段錯(cuò)誤,結(jié)果發(fā)現(xiàn)是數(shù)組越界,數(shù)組越界有上越界(比如數(shù)組開小了)和下越界(比如下標(biāo)為負(fù))

              posted @ 2010-07-03 11:00 王之昊 閱讀(282) | 評論 (0)編輯 收藏


              2010年7月1日

              Deformed Wheel


              題意:
              給你一個(gè)斜面,再給一個(gè)凸多邊形的石頭,讓石頭從高出放下,沿著斜面滾動,問石頭重心最后的位置。因?yàn)槟Σ亮艽螅^不能滑動,只能轉(zhuǎn)動。(還有很多細(xì)節(jié),具體見原題)

                    首先,這里要確定什么時(shí)候石頭算穩(wěn)定了,可以找到石頭和斜面相交的兩個(gè)點(diǎn),一個(gè)是相對石頭的最左點(diǎn)A,一個(gè)是相對石頭的最右點(diǎn)B,這樣如果石頭要向左轉(zhuǎn)動,必是繞著A轉(zhuǎn);要向右轉(zhuǎn)動,必是繞著B轉(zhuǎn)。這里有個(gè)問題,如果A,B的橫坐標(biāo)相同,那么A取最低的那個(gè),B取最高的那個(gè)。
                   
                    找到A,B兩點(diǎn)之后,如果重心G 有 A.x<=G.x <= B.x 那么他是穩(wěn)定的,如果G.x < A.x 那么他是向左轉(zhuǎn),如果G.x > B.x那么他是向右轉(zhuǎn)。
                   
                    其次,要知道石頭如果開始轉(zhuǎn)動,不論向左向右,轉(zhuǎn)動多少角度會再次碰到斜面。假設(shè)轉(zhuǎn)動theta再次碰到斜面。我們要求出這個(gè)theta的值。這里可以采用二分theta的方法來解決,對于某個(gè)確定的角度theta1,直接模擬轉(zhuǎn)動theta1角度。看是否超出斜面的范圍,如果是,說明theta1大了,否則說明theta1小了。

                    二分的實(shí)現(xiàn)上我覺得還是有很多trick的,比如
              1. 在檢查的時(shí)候,要檢查石頭上是否存在一點(diǎn)是否在斜面的下側(cè),這里很容易忽視那個(gè)支點(diǎn),如果把支點(diǎn)也一并去檢查,很可能因?yàn)榫鹊年P(guān)系判他在斜面的下方,結(jié)果check函數(shù)一直都是不合法。
              2. 向左轉(zhuǎn)和向右轉(zhuǎn)的處理上,向左轉(zhuǎn)我采用的是二分[0,PI]轉(zhuǎn)角,向右轉(zhuǎn)我則是二分[-PI, 0]轉(zhuǎn)角,結(jié)果寫在一起就出問題了,向左轉(zhuǎn)的判定如果在斜面下方,那么是角度大了,向右轉(zhuǎn)的判定如果在斜面下方,實(shí)際上是角度小了,盡管絕對值是大了。還有一種寫法是枚舉[0,PI],在check函數(shù)里再判斷是向左轉(zhuǎn),還是向右轉(zhuǎn)。這樣不容易寫錯(cuò)。

              posted @ 2010-07-01 19:54 王之昊 閱讀(575) | 評論 (0)編輯 收藏

              Warehouse Location
                    最小包圍球,采用隨機(jī)增量的方法。時(shí)間復(fù)雜度O(n)。

                    首先一個(gè)點(diǎn)的情況最小包圍球的半徑為0,沒有什么意義。
                    對于求 n 個(gè)點(diǎn)的最小包圍球,假設(shè)這 n 個(gè)點(diǎn)分別為 p1,p2, ..,pn。我們可以先求兩個(gè)點(diǎn)p1,p2的最小包圍球,再求三個(gè)點(diǎn)p1,p2,p3的最小包圍球,總之在求前 k 個(gè)點(diǎn)的最小包圍球之前,先求前 k-1 個(gè)點(diǎn)的最小包圍球。這里的點(diǎn)是已經(jīng)經(jīng)過隨機(jī)洗牌的,假設(shè)前k個(gè)點(diǎn)的最小包圍球是Ck
                   
                    如果pn被 球Cn-1 所包圍,那么Cn=Cn-1;否則Cn一定經(jīng)過pn,這樣我們知道Cn經(jīng)過的一個(gè)點(diǎn),我們再重復(fù)上面的方法重新去算一遍Cn,結(jié)果要么是直接確定了Cn,要么是增加一個(gè)Cn一定經(jīng)過的點(diǎn)。然而如果知道4個(gè)Cn經(jīng)過的點(diǎn),那么這個(gè)球也就唯一確定了。

              posted @ 2010-07-01 09:56 王之昊 閱讀(1028) | 評論 (0)編輯 收藏


              2010年6月30日

              http://acm.pku.edu.cn/JudgeOnline/problem?id=2064

              posted @ 2010-06-30 02:12 王之昊 閱讀(340) | 評論 (0)編輯 收藏


              僅列出標(biāo)題  下一頁

              posts - 26, comments - 7, trackbacks - 0, articles - 17

              Copyright © 王之昊

              久久精品麻豆日日躁夜夜躁| 亚洲?V乱码久久精品蜜桃| 性做久久久久久久| AV无码久久久久不卡蜜桃| 久久99久久99小草精品免视看| 久久综合九色综合久99 | 日日躁夜夜躁狠狠久久AV| 91精品国产91久久久久福利| 精品人妻伦一二三区久久| 国产激情久久久久久熟女老人| 激情伊人五月天久久综合| 性做久久久久久久久浪潮| 久久66热人妻偷产精品9| 亚洲成av人片不卡无码久久| 无码日韩人妻精品久久蜜桃| 久久久无码精品午夜| 国产成人精品免费久久久久| 麻豆国内精品久久久久久| 99久久超碰中文字幕伊人| 国产精品久久久久久久人人看| 久久91亚洲人成电影网站| 久久精品国产亚洲AV久| 亚洲国产精品久久久久网站 | 韩国免费A级毛片久久| 婷婷久久综合九色综合绿巨人| 国产精品久久午夜夜伦鲁鲁| 日本精品一区二区久久久| 国产精品女同一区二区久久| 久久水蜜桃亚洲av无码精品麻豆| 久久久久女教师免费一区| 精品国产一区二区三区久久| 日产精品久久久久久久性色| 国产精品一区二区久久精品涩爱| 久久国产免费直播| 草草久久久无码国产专区| 伊人热人久久中文字幕| 久久久久夜夜夜精品国产| 久久综合综合久久狠狠狠97色88| 国产精品毛片久久久久久久| 久久99精品久久久久久久不卡| 性欧美丰满熟妇XXXX性久久久 |