轉(zhuǎn)載請注明出處:http://www.cnblogs.com/kirai/ 作者:Kirai

零.問題的提出

  最近希望在分布式平臺(tái)上實(shí)現(xiàn)一個(gè)AC自動(dòng)機(jī),但是如何在這樣的分布式平臺(tái)上表示這樣的非線性數(shù)據(jù)結(jié)構(gòu)就難住我了。因?yàn)橐恢痹谑褂肦DD提供的一些基本的操作,沒有需要什么復(fù)雜的操作。所以突然想到了在分布式的平臺(tái)上實(shí)現(xiàn)一個(gè)AC自動(dòng)機(jī)一定很有趣。網(wǎng)上搜了下,發(fā)現(xiàn)沒有人實(shí)現(xiàn),因此決定嘗試實(shí)現(xiàn)?;蛟S就是一個(gè)玩具,不過也是能幫助自己更深理解分布式平臺(tái)上進(jìn)行編程和普通編程的區(qū)別吧。

  這個(gè)問題對我來講還是有一定的難度的,加上課業(yè)、復(fù)習(xí)考研、競賽三重壓力,對于這個(gè)問題的研究時(shí)間可能會(huì)比較長,不過一定會(huì)抽出時(shí)間來考慮的。

  文章僅僅是在記錄自己對問題的思考過程和代碼,并不能保證每一步都是合理、有用、正確的。

一.實(shí)現(xiàn)可持久化字典樹

  AC自動(dòng)機(jī)是個(gè)什么東西就不贅述了,我首先用python實(shí)現(xiàn)了一個(gè)比較樸素的版本,這里查詢是返回所有字典中出現(xiàn)的單詞的起始位置,每一個(gè)單詞一個(gè)list,最終組成一個(gè)dict。哈哈,也許有人看出來了這是去年的一道ICPC網(wǎng)賽題,沒錯(cuò)。但是我忘記是哪一道了,只記得當(dāng)時(shí)沒做出來,所以用python寫一個(gè)就當(dāng)是對自己的一個(gè)補(bǔ)償吧:)

iOS培訓(xùn),Swift培訓(xùn),蘋果開發(fā)培訓(xùn),移動(dòng)開發(fā)培訓(xùn)

  1 # -*- coding: utf-8 -*-  2 class Node:  3   """  4   A Trie's basic data structure.  5   """  6   def __init__(self):  7     self.next_letter = {}  8     self.is_word = False  9     self.letter = '' 10     self.depth = -1 11     self.pre = None 12     self.fail = None 13  14  15 class Trie: 16   def __init__(self): 17     self.root = Node() 18  19  20   def insert(self, word): 21     """
        
		

網(wǎng)友評(píng)論