導航:首頁 > 源碼編譯 > 搜索演算法領域

搜索演算法領域

發布時間:2023-04-13 08:25:51

㈠ 大規模領域搜索演算法優點和缺點

1、優點:精度高、對異常值不敏感、無數據輸入假定、適合於多分類問題,理敬嫌塵解起來較簡單。
2、缺點:者銷計算復雜度高、空間復雜度高、演算法原理可解釋亮禪性較差。應用領域:客戶流失預測、欺詐偵測、模式識別等。

㈡ 大數據核心演算法有哪些

1、A* 搜索演算法——圖形搜索演算法,從給定起點到給定終點計算出路徑。其中使用了一種啟發式的估算,為每個節點估算通過該節點的最佳路徑,並以之為各個地點排定次序。演算法以得到的次序訪問這些節點。因此,A*搜索演算法是最佳優先搜索的範例。
2、集束搜索(又名定向搜索,Beam Search)——最佳優先搜索演算法的優化。使用啟發式函數評估它檢查的每個節點的能力。不過,集束搜索只能在每個深度中發現最前面的m個最符合條件的節點,m是固定數字——集束的寬度。

3、二分查找(Binary Search)——在線性數組中找特定值的演算法,每個步驟去掉一半不符合要求的數據。

4、分支界定演算法(Branch and Bound)——在多種最優化問題中尋找特定最優化解決方案的演算法,特別是針對離散、組合的最優化。

5、Buchberger演算法——一種數學演算法,可將其視為針對單變數最大公約數求解的歐幾里得演算法和線性系統中高斯消元法的泛化。

6、數據壓縮——採取特定編碼方案,使用更少的位元組數(或是其他信息承載單元)對信息編碼的過程,又叫來源編碼。

7、Diffie-Hellman密鑰交換演算法——一種加密協議,允許雙方在事先不了解對方的情況下,在不安全的通信信道中,共同建立共享密鑰。該密鑰以後可與一個對稱密碼一起,加密後續通訊。

8、Dijkstra演算法——針對沒有負值權重邊的有向圖,計算其中的單一起點最短演算法。

9、離散微分演算法(Discrete differentiation)。

㈢ 百度和Google的搜索演算法,技術有何差異

網路是中國的,谷歌是美國的。各有側重不能不可比較。技術都是一樣的側重不同罷了。網路側重的是中國民俗,谷歌是側重美國民俗。因為國情國法不同所以無可能比較量級。【搜索引擎技術是硬體加軟體。硬體是實際使用的機器,軟體是程序編程】搜索產品搜索引擎產品其實包括很多種類,並不限於我們最熟悉的全網搜索引擎。簡單分類羅列一下:*全網搜索:包括市場份額最高的幾大搜索引擎巨頭,Google,Yahoo,Bing。*中文搜索:在中文搜索市場中,網路一家獨大,其它幾家如搜狗、搜搜、有道,市場份額相對還比較小。*垂直搜索:在各自的垂直領域成為搜索入口的,購物的淘寶,美食的大眾點評,旅遊的去哪兒,等等。*問答搜索:專注於為問句式提供有效的答案,比如Ask.com;其它的如問答社區像Quora和國內的知乎,應該也會往這方面發展。*知識搜索:典型代表就是WolframAlpha,區別於提供搜索結果列表,它會針對查詢提供更詳細的整合信息。*雲搜索平台:為其它產品和應用提供搜索服務託管平台(SaaS或是PaaS),Amazon剛剛推出它的CloudSearch,IndexTank在被Linkedin收購之前也是做這項服務。*其它:比始DuckDuckGo,主打隱私保護,也有部分用戶買帳。各種搜索產品在各自領域都需要解決特定的技術和業務問題,所以也可以建立相對通用搜索的優勢,來得到自己的市場和用戶。搜索技術搜索引擎所涉及和涵蓋的技術范圍非常廣,涉及到了系統架構和演算法設計等許多方面。可以說由於搜索引擎的出現,把互聯網產品的技術水平提高到了一個新的高度;搜索引擎無論是在數據和系統規模,還是演算法技術的研究應用深度上,都遠超之前的簡單互聯網產品。列舉一些搜索引擎所涉及到的技術點:*爬蟲(Crawling)*索引結構(InvertedIndex)*檢索模型(VSM&TF-IDF)*搜索排序(RelevanceRanking&Evaluation)*鏈接分析(LinkAnalysis)*分類(Document&QueryClassification)*自然語言處理(NLP:Tokenization,Lemmatization,POSTagging,NER,etc.)*分布式系統(DistributedProcessing&Storage)*等等雖然搜索引擎涉及的技術方方面面,但歸結起來最關鍵的幾點在於:*系統:大規模分布式系統,支撐大規模的數據處理容量和在線查詢負載*數據:數據處理和挖掘能力*演算法:搜索相關性排序,查詢分析,分類,等等系統搜索引擎系統是一個由許多模塊組成的復雜系統。核心模塊通常包括:爬蟲,索引,檢索,排序。除了必需的核心模塊之外,通常還需要一些支持輔助模塊,常見的有鏈接分析,去重,反垃圾,查詢分析,等等。[附圖:搜索系統架構概念模型]*爬蟲從互聯網爬取原始網頁數據,存儲於文檔伺服器。*文檔伺服器存儲原始網頁數據,通宵是分布式Key-Value資料庫,能根據URL/UID快速獲取網頁內容。*索引讀取原始網頁數據,解析網頁,抽取有效欄位,生成索引數據。索引數據的生成方式通常是增量的,分塊/分片的,並會進行索引合並、優化和刪除。生成的索引數據通常包括:字典數據,倒排表,正排表,文檔屬性等。生成的索引存儲於索引伺服器。*索引伺服器存儲索引數據,主要是倒排表。通常是分塊、分片存儲,並支持增量更新和刪除。數據內容量非常大時,還根據類別、主題、時間、網頁質量劃分數據分區和分布,更好地服務在線查詢。*檢索讀取倒排表索引,響應前端查詢請求,返回相關文檔列表數據。*排序對檢索器返回的文檔列表進行排序,基於文檔和查詢的相關性、文檔的鏈接權重等屬性。*鏈接分析收集各網頁的鏈接數據和錨文本(AnchorText),以此計算各網頁鏈接評分,最終會作為網頁屬性參與返回結果排序。*去重提取各網頁的相關特徵屬性,計算相似網頁組,提供離線索引和在線查詢的去重服務。*反垃圾收集各網頁和網站歷史信息,提取垃圾網頁特徵,從而對在線索引中的網頁進行判定,去除垃圾網頁。*查詢分析分析用戶查詢,生成結構化查詢請求,指派到相應的類別、主題數據伺服器進行查詢。*頁面描述/摘要為檢索和排序完成的網頁列表提供相應的描述和摘要。*前端接受用戶請求,分發至相應伺服器,返回查詢結果[附圖:爬蟲系統架構]爬蟲系統也是由多個模塊構成:*URLScheler存儲和高度待爬取的網頁地址。*Downloader根據指定的網頁列表爬取網頁內容,存儲至文檔伺服器。*Processer對網頁內容進行簡單處理,提取一些原始屬性,為爬取的後續操作服務。*TrafficController爬取流量控制,防止對目標網站在短時間內造成過大負載[附圖:搜索系統架構實例:Google這是Google早期的一張系統架構圖,可以看出Google系統的各模塊基本和前面概念模型一致。所以一個完整的全網搜索系統的大致系統架構是類似的,區別和競爭力體現在細節實現和優化上。數據除了搜索引擎系統提供了系統支撐外,搜索結果質量很大程度上依賴於源數據的數量和質量,以及數據處理的能力。全網數據的主要來源通常是從互聯網上進行自動爬取,從一些高質量的種子站點開始,並沿網頁鏈接不斷,收集巨量的網頁數據;這通常能達到數據在數量的要求,但也不可避免混入了大量的低質量網頁。除了自動爬取來的數據外,搜索引擎的數據來源還可以來自人工收集、合作夥伴提供、第三方數據源和API、以及購買;這些來源通常會有更好的質量保證,但在數量規模和覆蓋率上會相對少一些,可以和爬取的數據形成有效的互補。收集到足量的原始數據後,需要進行各種數據處理操作,把原始數據轉換成在線檢索需要的數據。這個過程通常包括:網頁分析,數據抽取,文本處理和分詞,索引及合並;最終生成的數據會包括:詞典,倒排表,正排表,文檔權重和各種屬性。最終生成的數據要布署上相應的在線檢索伺服器上,通常會進行數據分區和分片布署,數據內容更豐富時還可能根據內容分類和主題進行分別布署,比如新聞時效類的網頁可能就會獨立布署,針對性地響應時效類的查詢[附圖:索引數據:字典、倒排表、正排表]這張圖來源於Google早期的索引數據結構,包括詞典、倒排表、正排表。演算法有了相當數量的高質量數據之後,搜索結果的質量改進就取決於搜索演算法的准確性上。現在的搜索引擎通常通過向量空間模型(VSM=VectorSpaceModel)來計算查詢和各文檔之間的文本相似性;即把查詢或文檔抽象成一個詞向量,然後再計算向量在向量空間中的夾角,可以用餘弦公式得出,作為文本相似度的度量值。在基本的向量空間模型基礎上通常會進一步加入詞的權重值進行改進,通過經典的TF-IDF公式得出,即詞頻(TF)乘上逆文檔頻率(IDF);其中TF=TermFrequency,即該詞在所在文檔中的出現次數;IDF=InvertDocumentFrequency,即包含該詞的文檔數除以總文檔數,再取反,通常還會取對數來降維,這個值值越大表示這個詞越能代表文檔特徵。除了通過向量空間模型得出的文本匹配評分外,每個文檔還會有自己本身的質量評分,通常由網頁鏈接數據計算得出,代表了該網頁本身的流行度權重。最終的評分會以文本匹配的查詢時動態評分和文檔靜態評分為基礎計算得出;搜索引擎的評分計算都會考慮很多因素,但這兩項通常是評分計算的基礎。有了確定的排序演算法後,另一個重要的任務就是評估搜索結果的質量。由於搜索結果的好與壞是一個比較主觀的過程,所以進行定量的評估並不容易。常見的做法是通過事先選定一批查詢,通過人工評估或是預先設定標准值的方式,逐個評估每個設定查詢搜索結果,最終得到一個統計結果,作為搜索演算法的評估度量。另一類做法是直接通過線上的用戶點擊數據來統計評估搜索結果質量,或是通過A/B測試來比較兩種排序演算法的點擊效果來衡量。合理而有效的評估方法,是搜索演算法可以不斷改進和比較的前提。查詢分析是另一個對搜索結果影響很大的方面,主要任務是把用戶的查詢文本轉換成內部的結構化的搜索請求。涉及的處理可能包括基本的分詞處理,專有名詞的識別和提取,或是查詢模式的識別,或是查詢分類的識別。這些處理的准確性將能極大地改進搜索請求的方式,進一步影響搜索結果的相關性和質量。開源方案近年來在搜索公司內部搜索系統和技術的改進和發展的同時,一批開源的搜索系統和解決方案也逐漸發展和成熟起來。當然開源系統在功能全面性、復雜性和規模上都不能與專業的搜索引擎系統相比,但對於中小企業的搜索應用來說應該已經能很好地滿足需求,而且也成功應用到了一些大規模的產品系統中(比如Twitter的搜索就使用和改進了Lucene)。現在比較常見的開源搜索解決方案有:*LuceneLucene自然是現在最流行,使用度最高的搜索開源方案。它用java開發,以索引和檢索庫的方式提供,可以很容易地嵌入需要的應用中。*Solr&SolrCloudSolr是Lucene的子項目,同屬Apache軟體基金會項目;它是基於Lucene之上實的一個完整的搜索服務應用,提供了大量的搜索定製功能,可以滿足大部分的搜索產品需求。SolrCloud是Solr為了加強其分布式服務能力而開發的功能,目前還在開發階段,將在Solr4.0發布。*Zoie&Sensei(Linkedin)Zoie是Linkedin公司在Lucene基礎上實現的准實時索引庫,通過加入額外的內存索引,來達到准實時索引的效果。Sensei是Linkedin公司在Zoie基礎上實現的分布式搜索服務,通過索引分區來實現分布式搜索服務。*ElasticSearchElasticSearch也是剛推出不久的一個基於Lucene實現的分布式搜索服務,據說在分布式支持和易用性上都有不錯的表現。因為還比較年輕,真實的應用應該還不多,需要觀察。因為也是基於Lucene的分布式開源搜索框架,基本上會與SolrCloud和Sensei形成正面競爭關系。*其它開源產品除了Lucene家族以外,還有一些其它的開源產品,比如Sphinx和Xapian,也有不少的應用;但近年來的更新頻率和社區活躍度都不太能和Lucene系的產品相比。*託管平台除了開源產品外,現在還出現了一些基於雲計算和雲服務的搜索服務,比如Amazon新近推了的CloudSearch,還有更早一些的IndexTank(已被Linkedin收購)。這類服務無需自己布置搜索系統,直接使用在線服務,按需付費,所以也將是開源產品的替代方案和競爭對手。附幾張上面提到的開源系統的概念模型和架構圖:[附圖:Lucene概念模型][附圖:Lucene工作流程][附圖:Sensei系統架構][附圖:SolrCloud系統架構]現狀與未來:傳統的搜索引擎經過了十幾年的發展,目前在技術和產品上都已走向逐漸穩定和成熟,通用搜索的市場也基本進入飽和,不像早些年一直呈現高增長率。同時,在各個垂直領域,也出現了很多和產品結合的很好的垂直搜索產品,比如淘寶的購物搜索,大眾點評的美食搜索,去哪兒和酷訊的旅遊搜索等,也都在各自領域占據了相當大的市場,成為除了通用搜索引擎之外的重要的用戶入口。在開源領域,各種開源產品和解決方案也逐漸發展成熟,通用搜索技術不再為大公司所專有,中小企業能夠以較低的成本實現自己的搜索應用。現在搜索引擎產品之間的競爭的在數據、應用方式和產品形態上,在系統架構和基本演算法上區分並不大。搜索引擎在未來發展上,一是搜索將不僅僅以獨立產品的形式出現,的會作為搜索功能整合到的產品和應用中。在產品形態上,基於傳統的搜索引擎,會演化出像推薦引擎,知識引擎,決策引擎等形式的產品,更好地滿足和服務用戶需求。而搜索引擎所涉及和發展起來的各種技術,會更廣泛地應用到各種基它產品上,比如自然語言處理,推薦和廣告,數據挖掘,等等。總之,搜索引擎對互聯網技術和產品帶來的影響是巨大的,未來也仍將有很大的發展和應用空間。

㈣ 禁忌搜索的局部領域搜索

局部領域搜索是基於貪婪思想持續地在當前解的領域中進行搜索,雖然演算法通用易實現,且容易理解,但其搜索性能完全依賴於領域結構和初解,尤其窺陷入局部極小而無法保證全局優化性。針對局部領域搜索,為了實現全局優化,可嘗試的途徑有:以可控性概率接受劣解來逃逸局部極小,如模擬退火演算法;擴耐搏大領域搜索結構,如TSP的2opt擴展到k-opt;多點並行搜索,如進化計算;變結構領域搜索( Mladenovic et al,1997);另外,就是採用TS的禁忌策略盡量避免迂迴搜索,它是一種確定性的局部極小突跳策略。
禁忌搜索是人工智慧的一種體現,是局部領域搜索的一種擴展。禁忌搜索最重要的思想是標記對應已薯畝咐搜索的局部最優解的一些對象,並在進一步的迭代搜索中盡量避開這些對象(而數純不是絕對禁止循環),從而保證對不同的有效搜索途徑的探索。禁忌搜索涉及到鄰域(neighborhood)、禁忌表(tabu list)、禁忌長度(tabu length)、候選解(candidate)、藐視准則(aspiration criterion)等概念;

㈤ 大數據最常用的演算法有哪些

奧地利符號計算研究所(Research Institute for Symbolic Computation,簡稱RISC)的Christoph Koutschan博士在自己的頁面上發布了一篇文章,提到他做了一個調查,參與者大多數是計算機科學家,他請這些科學家投票選出最重要的演算法,以下是這次調查的結果,按照英文名稱字母順序排序。

大數據等最核心的關鍵技術:32個演算法

1、A* 搜索演算法——圖形搜索演算法,從給定起點到給定終點計算出路徑。其中使用了一種啟發式的估算,為每個節點估算通過該節點的最佳路徑,並以之為各個地點排定次序。演算法以得到的次序訪問這些節點。因此,A*搜索演算法是最佳優先搜索的範例。

2、集束搜索(又名定向搜索,Beam Search)——最佳優先搜索演算法的優化。使用啟發式函數評估它檢查的每個節點的能力。不過,集束搜索只能在每個深度中發現最前面的m個最符合條件的節點,m是固定數字——集束的寬度。

3、二分查找(Binary Search)——在線性數組中找特定值的演算法,每個步驟去掉一半不符合要求的數據。

4、分支界定演算法(Branch and Bound)——在多種最優化問題中尋找特定最優化解決方案的演算法,特別是針對離散、組合的最優化。

5、Buchberger演算法——一種數學演算法,可將其視為針對單變數最大公約數求解的歐幾里得演算法和線性系統中高斯消元法的泛化。

6、數據壓縮——採取特定編碼方案,使用更少的位元組數(或是其他信息承載單元)對信息編碼的過程,又叫來源編碼。

7、Diffie-Hellman密鑰交換演算法——一種加密協議,允許雙方在事先不了解對方的情況下,在不安全的通信信道中,共同建立共享密鑰。該密鑰以後可與一個對稱密碼一起,加密後續通訊。

8、Dijkstra演算法——針對沒有負值權重邊的有向圖,計算其中的單一起點最短演算法。

9、離散微分演算法(Discrete differentiation)。

10、動態規劃演算法(Dynamic Programming)——展示互相覆蓋的子問題和最優子架構演算法

11、歐幾里得演算法(Euclidean algorithm)——計算兩個整數的最大公約數。最古老的演算法之一,出現在公元前300前歐幾里得的《幾何原本》。

12、期望-最大演算法(Expectation-maximization algorithm,又名EM-Training)——在統計計算中,期望-最大演算法在概率模型中尋找可能性最大的參數估算值,其中模型依賴於未發現的潛在變數。EM在兩個步驟中交替計算,第一步是計算期望,利用對隱藏變數的現有估計值,計算其最大可能估計值;第二步是最大化,最大化在第一步上求得的最大可能值來計算參數的值。

13、快速傅里葉變換(Fast Fourier transform,FFT)——計算離散的傅里葉變換(DFT)及其反轉。該演算法應用范圍很廣,從數字信號處理到解決偏微分方程,到快速計算大整數乘積。

14、梯度下降(Gradient descent)——一種數學上的最優化演算法。

15、哈希演算法(Hashing)。

16、堆排序(Heaps)。

17、Karatsuba乘法——需要完成上千位整數的乘法的系統中使用,比如計算機代數系統和大數程序庫,如果使用長乘法,速度太慢。該演算法發現於1962年。

18、LLL演算法(Lenstra-Lenstra-Lovasz lattice rection)——以格規約(lattice)基數為輸入,輸出短正交向量基數。LLL演算法在以下公共密鑰加密方法中有大量使用:背包加密系統(knapsack)、有特定設置的RSA加密等等。

19、最大流量演算法(Maximum flow)——該演算法試圖從一個流量網路中找到最大的流。它優勢被定義為找到這樣一個流的值。最大流問題可以看作更復雜的網路流問題的特定情況。最大流與網路中的界面有關,這就是最大流-最小截定理(Max-flow min-cut theorem)。Ford-Fulkerson 能找到一個流網路中的最大流。

20、合並排序(Merge Sort)。

21、牛頓法(Newton』s method)——求非線性方程(組)零點的一種重要的迭代法。

22、Q-learning學習演算法——這是一種通過學習動作值函數(action-value function)完成的強化學習演算法,函數採取在給定狀態的給定動作,並計算出期望的效用價值,在此後遵循固定的策略。Q-leanring的優勢是,在不需要環境模型的情況下,可以對比可採納行動的期望效用。

23、兩次篩法(Quadratic Sieve)——現代整數因子分解演算法,在實踐中,是目前已知第二快的此類演算法(僅次於數域篩法Number Field Sieve)。對於110位以下的十位整數,它仍是最快的,而且都認為它比數域篩法更簡單。

24、RANSAC——是「RANdom SAmple Consensus」的縮寫。該演算法根據一系列觀察得到的數據,數據中包含異常值,估算一個數學模型的參數值。其基本假設是:數據包含非異化值,也就是能夠通過某些模型參數解釋的值,異化值就是那些不符合模型的數據點。

25、RSA——公鑰加密演算法。首個適用於以簽名作為加密的演算法。RSA在電商行業中仍大規模使用,大家也相信它有足夠安全長度的公鑰。

26、Sch?nhage-Strassen演算法——在數學中,Sch?nhage-Strassen演算法是用來完成大整數的乘法的快速漸近演算法。其演算法復雜度為:O(N log(N) log(log(N))),該演算法使用了傅里葉變換。

27、單純型演算法(Simplex Algorithm)——在數學的優化理論中,單純型演算法是常用的技術,用來找到線性規劃問題的數值解。線性規劃問題包括在一組實變數上的一系列線性不等式組,以及一個等待最大化(或最小化)的固定線性函數。

28、奇異值分解(Singular value decomposition,簡稱SVD)——在線性代數中,SVD是重要的實數或復數矩陣的分解方法,在信號處理和統計中有多種應用,比如計算矩陣的偽逆矩陣(以求解最小二乘法問題)、解決超定線性系統(overdetermined linear systems)、矩陣逼近、數值天氣預報等等。

29、求解線性方程組(Solving a system of linear equations)——線性方程組是數學中最古老的問題,它們有很多應用,比如在數字信號處理、線性規劃中的估算和預測、數值分析中的非線性問題逼近等等。求解線性方程組,可以使用高斯—約當消去法(Gauss-Jordan elimination),或是柯列斯基分解( Cholesky decomposition)。

30、Strukturtensor演算法——應用於模式識別領域,為所有像素找出一種計算方法,看看該像素是否處於同質區域( homogenous region),看看它是否屬於邊緣,還是是一個頂點。

31、合並查找演算法(Union-find)——給定一組元素,該演算法常常用來把這些元素分為多個分離的、彼此不重合的組。不相交集(disjoint-set)的數據結構可以跟蹤這樣的切分方法。合並查找演算法可以在此種數據結構上完成兩個有用的操作:

查找:判斷某特定元素屬於哪個組。

合並:聯合或合並兩個組為一個組。

32、維特比演算法(Viterbi algorithm)——尋找隱藏狀態最有可能序列的動態規劃演算法,這種序列被稱為維特比路徑,其結果是一系列可以觀察到的事件,特別是在隱藏的Markov模型中。

以上就是Christoph博士對於最重要的演算法的調查結果。你們熟悉哪些演算法?又有哪些演算法是你們經常使用的?

㈥ 選擇性搜索演算法 (Selective Search)

計算機視覺領域有幾個基本的任務:

object detection 的基礎是 object recognition,只不過要先將圖片進行分割,對每個分割之後的子圖區域 region (也稱為 patch) 進行 object recognition.

由於事先並不知道物體在圖片的哪個位置,為了避免漏檢,我們應該對圖片中盡量多的 region 進行搜索。理論上野帶態來說,可以有無窮多個 region。這里就需要一種 region proposal 的演算法,以比較高效的方式提出圖片劃分 region 的方式,從而加速整個 object detection 的過程並且提高准確率。

本文將要介紹的 selective search 演算法 ,是比較經典的,也是 R-CNN 中使用的 region proposal 演算法。

參考文獻:

為了避免蠻力搜索,selective search 演算法首先需要一個基於像素的圖像分割。這里用的是 Felzenszwalb and Huttenlocher 演算法 (因為是當時速度最快的演算法,而且是公開的),得到一個 oversegmented 的圖像分割。例如:

這里之所以用 oversegmented 圖像,是為了得到盡可能細分的區域,再以此為基礎逐步合並,形成更大的區域。

image segmentation 可以用作 region proposal 的基礎,每個分割的區域都可以看作一個潛在的頌源 region,但是一個 object 往往包含了多個分割的區域,例如盛有咖啡的杯子,咖啡和杯子應該作為一個整體來看待。因此,還要根據某種相似性原則進行分割區域的合並,得到更大范圍的 region。

Selective search 演算法考慮了 4 種相似性度量,取值都在 [0,1] 之間,越大越相似。

最終的相似性度量是上述四個度量的組合:

其中 取 0 或 1.

總結起來,selective search 的演算法步驟非常簡單:

環境配置:

具體程序:

最後效果行迅如下:

顯示的 100 個 region 已經包含了我們感興趣的待檢測區域,說明了 selective search 演算法的高效。

㈦ 禁忌搜索演算法淺析

姓名:劉家沐

學號:19011210553

網路來源,有刪減

【嵌牛導讀】:針對TSP問題等類似的NP-hard 問題,如果能在盡量少的計算量的情況下找到一個最優或者是較優的解成為當前一個熱門的討論話題,禁忌搜索演算法便是其中之一

【嵌牛鼻子】:禁忌搜索演算法   最優化問題    TSP問題

【嵌牛正文】:

背景:禁忌搜索演算法(Tabu Search)是由美國科羅拉多州大學的Fred Glover教授在1986年左右提出來的,是一個用來跳出局部最優的搜尋方法。在解決最優問題上,一般區分為兩種方式:一種是傳統的方法,另一種方法則是一些啟發式搜索演算法。

使用傳統的方法,我們必須對每一個問題都去設計一套演算法,相當不方便,缺乏廣泛性,優點在於我們可以證明演算法的正確性,我們可以保證找到的答案是最優的;而對於啟發式演算法,針對不同的問題,我們可以套用同一個架構來尋找答案,在這個過程中,我們只需要設計評價函數以及如何找到下一個可能解的函數等,所以啟發式演算法的廣泛性比較高,但相對在准確度上就不一定能夠達到最優,但是在實際問題中啟發式演算法那有著更廣泛的應用。 

禁忌搜索是一種亞啟發式隨機搜索演算法,它從一個初始可行解出發,選擇一系列的特定搜索方向(移動)作為試探,選擇實現讓特定的目標函數值變化最多的移動。為了避免陷入局部最優解,TS搜索中採用了一種靈活的「記憶」技術,對已經進行的優化過程進行記錄和選擇,指導下一步的搜索方向。 TS是人工智慧的一種體現,是局部領域搜索的一種擴展。禁忌搜索是在領域搜索的基礎上,通過設置禁忌表來禁忌一些已經歷的操作,並利用藐視准則來獎勵一些優良狀態,其中涉及鄰域 、禁忌表、禁忌長度、候選解、藐視准則等影響禁忌搜索演算法性能的關鍵因素。迄今為止,TS演算法在組合優化等計算機領域取得了很大的成功,近年來又在函數全局優化方面得到較多的研究,並大有發展的趨勢。

局域搜索:在一個小的搜索范圍里,進行搜索,或者根據結果逐步擴大搜索范圍,但是這樣會容易陷入局部最優

為了獲得好解,可以採用的策略有(1)擴大鄰域結構,(2)變鄰域結構    ,(3)多初始點。但這些策略依然無法保證演算法具備跳出局優的能力。

禁忌搜索:

為了找到「全局最優解」,就不應該執著於某一個特定的區域。局部搜索的缺點就是太貪婪地對某一個局部區域以及其鄰域搜索,導致一葉障目,不見泰山。 禁忌搜索 就是對於找到的一部分局部最優解,有意識地避開它(但不是完全隔絕),從而獲得更多的搜索區間。兔子們找到了泰山,它們之中的一隻就會留守在這里,其他的再去別的地方尋找。就這樣,一大圈後,把找到的幾個山峰一比較, 珠穆朗瑪峰 脫穎而出。

當兔子們再尋找的時候,一般地會有意識地避開泰山,因為他們知道,這里已經找過,並且有一隻兔子在那裡看著了。這就是禁忌搜索中「禁忌表(tabu list)」的含義。那隻留在泰山的兔子一般不會就安家在那裡了,它會在一定時間後重新回到找最高峰的大軍,因為這個時候已經有了許多新的消息,泰山畢竟也有一個不錯的高度,需要重新考慮,這個歸隊時間,在禁忌搜索裡面叫做「禁忌長度(tabu length)」;如果在搜索的過程中,留守泰山的兔子還沒有歸隊,但是找到的地方全是華北平原等比較低的地方,兔子們就不得不再次考慮選中泰山,也就是說,當一個有兔子留守的地方優越性太突出,超過了「best so far」的狀態,就可以不顧及有沒有兔子留守,都把這個地方考慮進來,這就叫「特赦准則(aspiration criterion)」。這三個概念是禁忌搜索和一般搜索准則最不同的地方,演算法的優化也關鍵在這里。

主要思路:

1、在搜索中,構造一個短期循環記憶表-禁忌表,禁忌表中存放剛剛進行過的 |T|(T稱為禁忌表)個鄰居的移動,這種移動即解的簡單變化。

2、禁忌表中的移動稱為禁忌移動。對於進入禁忌表中的移動, 在以後的 |T| 次循環內是禁止的,以避免回到原來的解,從而避免陷入循環。|T| 次循環後禁忌解除。

3、禁忌表是一個循環表,在搜索過程中被循環的修改,使禁忌表始終保持 |T| 個移動。

4、即使引入了禁忌表,禁忌搜索仍可能出現循環。因此,必須給定停止准則以避免出現循環。當迭代內所發現的最好解無法改進或無法離開它時,演算法停止。

總結:

與傳統的優化演算法相比,TS演算法的主要特點是:

 1.從移動規則看,每次只與最優點比較,而不與經過點比較,故可以爬出局部最優。

 2.選優規則始終保持曾經達到的最優點,所以即使離開了全局最優點也不會失去全局最優性。

 3.終止規則不以達到局部最優為終止規則,而以最大迭代次數、出現頻率限制或者目標值偏離成都為終止規則

禁忌搜索是對人類思維過程本身的一種模擬,它通過對一些局部最優解的禁忌(也可以說是記憶)達到接納一部分較差解,從而跳出局部搜索的目的。因而在計算搜索領域有著廣泛應用。

㈧ 演算法工程師 就業前景

一、演算法工程師簡介
(通常是月薪15k以上,年薪18萬以上,只是一個概數,具體薪資可以到招聘網站如拉鉤,獵聘網上看看)
演算法工程師目前是一個高端也是相對緊缺的職位;
演算法工程師包括
音/視頻演算法工程師(通常統稱為語音/視頻/圖形開發工程師)、圖像處理演算法工程師、計算機視覺演算法工程師、通信基帶演算法工程師、信號演算法工程師、射頻/通信演算法工程師、自然語言演算法工程師、數據挖掘演算法工程師、搜索演算法工程師、控制演算法工程師(雲台演算法工程師,飛控演算法工程師,機器人控制演算法)、導航演算法工程師(
@之介
感謝補充)、其他【其他一切需要復雜演算法的行業】
專業要求:計算機、電子、通信、數學等相關專業;
學歷要求:本科及其以上的學歷,大多數是碩士學歷及其以上;
語言要求:英語要求是熟練,基本上能閱讀國外專業書刊,做這一行經常要讀論文;
必須掌握計算機相關知識,熟練使用模擬工具MATLAB等,必須會一門編程語言。
演算法工程師的技能樹(不同方向差異較大,此處僅供參考)
1 機器學習
2 大數據處理:熟悉至少一個分布式計算框架Hadoop/Spark/Storm/ map-rece/MPI
3 數據挖掘
4 扎實的數學功底
5 至少熟悉C/C++或者Java,熟悉至少一門編程語言例如java/python/R
加分項:具有較為豐富的項目實踐經驗(不是水論文的哪種)
二、演算法工程師大致分類與技術要求
(一)圖像演算法/計算機視覺工程師類
包括
圖像演算法工程師,圖像處理工程師,音/視頻處理演算法工程師,計算機視覺工程師
要求
l
專業:計算機、數學、統計學相關專業;
l
技術領域:機器學習,模式識別
l
技術要求:
(1) 精通DirectX HLSL和OpenGL GLSL等shader語言,熟悉常見圖像處理演算法GPU實現及優化;
(2) 語言:精通C/C++;
(3) 工具:Matlab數學軟體,CUDA運算平台,VTK圖像圖形開源軟體【醫學領域:ITK,醫學圖像處理軟體包】
(4) 熟悉OpenCV/OpenGL/Caffe等常用開源庫;
(5) 有人臉識別,行人檢測,視頻分析,三維建模,動態跟蹤,車識別,目標檢測跟蹤識別經歷的人優先考慮;
(6) 熟悉基於GPU的演算法設計與優化和並行優化經驗者優先;
(7) 【音/視頻領域】熟悉H.264等視頻編解碼標准和FFMPEG,熟悉rtmp等流媒體傳輸協議,熟悉視頻和音頻解碼演算法,研究各種多媒體文件格式,GPU加速;
應用領域:
(1) 互聯網:如美顏app
(2) 醫學領域:如臨床醫學圖像
(3) 汽車領域
(4) 人工智慧
相關術語:
(1) OCR:OCR (Optical Character Recognition,光學字元識別)是指電子設備(例如掃描儀或數碼相機)檢查紙上列印的字元,通過檢測暗、亮的模式確定其形狀,然後用字元識別方法將形狀翻譯成計算機文字的過程
(2) Matlab:商業數學軟體;
(3) CUDA: (Compute Unified Device Architecture),是顯卡廠商NVIDIA推出的運算平台(由ISA和GPU構成)。 CUDA™是一種由NVIDIA推出的通用並行計算架構,該架構使GPU能夠解決復雜的計算問題
(4) OpenCL: OpenCL是一個為異構平台編寫程序的框架,此異構平台可由CPU,GPU或其他類型的處理器組成。
(5) OpenCV:開源計算機視覺庫;OpenGL:開源圖形庫;Caffe:是一個清晰,可讀性高,快速的深度學習框架。
(6) CNN:(深度學習)卷積神經網路(Convolutional Neural Network)CNN主要用來識別位移、縮放及其他形式扭曲不變性的二維圖形。
(7) 開源庫:指的是計算機行業中對所有人開發的代碼庫,所有人均可以使用並改進代碼演算法。
(二)機器學習工程師
包括
機器學習工程師
要求
l
專業:計算機、數學、統計學相關專業;
l
技術領域:人工智慧,機器學習
l
技術要求:
(1) 熟悉Hadoop/Hive以及Map-Rece計算模式,熟悉Spark、Shark等尤佳;
(2) 大數據挖掘;
(3) 高性能、高並發的機器學習、數據挖掘方法及架構的研發;
應用領域:
(1)人工智慧,比如各類模擬、擬人應用,如機器人
(2)醫療用於各類擬合預測
(3)金融高頻交易
(4)互聯網數據挖掘、關聯推薦
(5)無人汽車,無人機

相關術語:
(1) Map-Rece:MapRece是一種編程模型,用於大規模數據集(大於1TB)的並行運算。概念"Map(映射)"和"Rece(歸約)",是它們的主要思想,都是從函數式編程語言里借來的,還有從矢量編程語言里借來的特性。
(三)自然語言處理工程師
包括
自然語言處理工程師
要求
l
專業:計算機相關專業;
l
技術領域:文本資料庫
l
技術要求:
(1) 熟悉中文分詞標注、文本分類、語言模型、實體識別、知識圖譜抽取和推理、問答系統設計、深度問答等NLP 相關演算法;
(2) 應用NLP、機器學習等技術解決海量UGC的文本相關性;
(3) 分詞、詞性分析、實體識別、新詞發現、語義關聯等NLP基礎性研究與開發;
(4) 人工智慧,分布式處理Hadoop;
(5) 數據結構和演算法;
應用領域:
口語輸入、書面語輸入
、語言分析和理解、語言生成、口語輸出技術、話語分析與對話、文獻自動處理、多語問題的計算機處理、多模態的計算機處理、信息傳輸與信息存儲 、自然語言處理中的數學方法、語言資源、自然語言處理系統的評測。

相關術語:
(2) NLP:人工智慧的自然語言處理,NLP (Natural Language Processing) 是人工智慧(AI)的一個子領域。NLP涉及領域很多,最令我感興趣的是「中文自動分詞」(Chinese word segmentation):結婚的和尚未結婚的【計算機中卻有可能理解為結婚的「和尚「】

(四)射頻/通信/信號演算法工程師類
包括
3G/4G無線通信演算法工程師, 通信基帶演算法工程師,DSP開發工程師(數字信號處理),射頻通信工程師,信號演算法工程師
要求
l
專業:計算機、通信相關專業;
l
技術領域:2G、3G、4G,BlueTooth(藍牙),WLAN,無線移動通信, 網路通信基帶信號處理
l
技術要求:
(1) 了解2G,3G,4G,BlueTooth,WLAN等無線通信相關知識,熟悉現有的通信系統和標准協議,熟悉常用的無線測試設備;
(2) 信號處理技術,通信演算法;
(3) 熟悉同步、均衡、信道解碼等演算法的基本原理;
(4) 【射頻部分】熟悉射頻前端晶元,扎實的射頻微波理論和測試經驗,熟練使用射頻電路模擬工具(如ADS或MW或Ansoft);熟練使用cadence、altium designer PCB電路設計軟體;
(5) 有扎實的數學基礎,如復變函數、隨機過程、數值計算、矩陣論、離散數學
應用領域:
通信
VR【用於快速傳輸視頻圖像,例如樂客靈境VR公司招募的通信工程師(數據編碼、流數據)】
物聯網,車聯網
導航,軍事,衛星,雷達
相關術語:
(1) 基帶信號:指的是沒有經過調制(進行頻譜搬移和變換)的原始電信號。
(2) 基帶通信(又稱基帶傳輸):指傳輸基帶信號。進行基帶傳輸的系統稱為基帶傳輸系統。傳輸介質的整個信道被一個基帶信號佔用.基帶傳輸不需要數據機,設備化費小,具有速率高和誤碼率低等優點,.適合短距離的數據傳輸,傳輸距離在100米內,在音頻市話、計算機網路通信中被廣泛採用。如從計算機到監視器、列印機等外設的信號就是基帶傳輸的。大多數的區域網使用基帶傳輸,如乙太網、令牌環網。
(3) 射頻:射頻(RF)是Radio Frequency的縮寫,表示可以輻射到空間的電磁頻率(電磁波),頻率范圍從300KHz~300GHz之間(因為其較高的頻率使其具有遠距離傳輸能力)。射頻簡稱RF射頻就是射頻電流,它是一種高頻交流變化電磁波的簡稱。每秒變化小於1000次的交流電稱為低頻電流,大於10000次的稱為高頻電流,而射頻就是這樣一種高頻電流。高頻(大於10K);射頻(300K-300G)是高頻的較高頻段;微波頻段(300M-300G)又是射頻的較高頻段。【有線電視就是用射頻傳輸方式】
(4) DSP:數字信號處理,也指數字信號處理晶元
(五)數據挖掘演算法工程師類
包括
推薦演算法工程師,數據挖掘演算法工程師
要求
l
專業:計算機、通信、應用數學、金融數學、模式識別、人工智慧;
l
技術領域:機器學習,數據挖掘
l
技術要求:
(1) 熟悉常用機器學習和數據挖掘演算法,包括但不限於決策樹、Kmeans、SVM、線性回歸、邏輯回歸以及神經網路等演算法;
(2) 熟練使用SQL、Matlab、Python等工具優先;
(3) 對Hadoop、Spark、Storm等大規模數據存儲與運算平台有實踐經驗【均為分布式計算框架】
(4) 數學基礎要好,如高數,統計學,數據結構
l
加分項:數據挖掘建模大賽;
應用領域
(1) 個性化推薦
(2) 廣告投放
(3) 大數據分析
相關術語
Map-Rece:MapRece是一種編程模型,用於大規模數據集(大於1TB)的並行運算。概念"Map(映射)"和"Rece(歸約)",是它們的主要思想,都是從函數式編程語言里借來的,還有從矢量編程語言里借來的特性。
(六)搜索演算法工程師
要求
l
技術領域:自然語言
l
技術要求:
(1) 數據結構,海量數據處理、高性能計算、大規模分布式系統開發
(2) hadoop、lucene
(3) 精通Lucene/Solr/Elastic Search等技術,並有二次開發經驗
(4) 精通Lucene/Solr/Elastic Search等技術,並有二次開發經驗;
(5) 精通倒排索引、全文檢索、分詞、排序等相關技術;
(6) 熟悉Java,熟悉Spring、MyBatis、Netty等主流框架;
(7) 優秀的資料庫設計和優化能力,精通MySQL資料庫應用 ;
(8) 了解推薦引擎和數據挖掘和機器學習的理論知識,有大型搜索應用的開發經驗者優先。
(七)控制演算法工程師類
包括了雲台控制演算法,飛控控制演算法,機器人控制演算法
要求
l
專業:計算機,電子信息工程,航天航空,自動化
l
技術要求:
(1) 精通自動控制原理(如PID)、現代控制理論,精通組合導航原理,姿態融合演算法,電機驅動,電機驅動
(2) 卡爾曼濾波,熟悉狀態空間分析法對控制系統進行數學模型建模、分析調試;
l
加分項:有電子設計大賽,機器人比賽,robocon等比賽經驗,有硬體設計的基礎;
應用領域
(1)醫療/工業機械設備
(2)工業機器人
(3)機器人
(4)無人機飛控、雲台控制等

(八)導航演算法工程師
要求
l 專業:計算機,電子信息工程,航天航空,自動化
l 技術要求(以公司職位JD為例)
公司一(1)精通慣性導航、激光導航、雷達導航等工作原理;
(2)精通組合導航演算法設計、精通卡爾曼濾波演算法、精通路徑規劃演算法;
(3)具備導航方案設計和實現的工程經驗;
(4)熟悉C/C++語言、熟悉至少一種嵌入式系統開發、熟悉Matlab工具;
公司二(1)熟悉基於視覺信息的SLAM、定位、導航演算法,有1年以上相關的科研或項目經歷;
(2)熟悉慣性導航演算法,熟悉IMU與視覺信息的融合;
應用領域
無人機、機器人等。

㈨ 麻雀搜索演算法為什麼這么火

1 麻雀搜索演算法因其高效性和實用性而廣受歡迎。

2 麻雀搜索演算法採用了啟發式演算法,通過模擬麻雀覓食的行為來搜索最優解。
該演算法具有較高的搜索效率和優化的能力,並且在解租腔決一些NP難問題時表現出色。

3 麻雀搜索演算法還具有一定的適應性,可以應用於多種領域,如圖像處理、機器學習、優化問題岩型陸粗頃等,因此備受關注和推崇。

㈩ 圖遍歷演算法之DFS/BFS

在計算機科學, 圖遍歷(Tree Traversal,也稱圖搜索)是一系列圖搜索的演算法, 是單次訪問樹結構類型數據(tree data structure)中每個節點以便檢查或更新的一系列機制。圖遍歷演算法可以按照節點訪問順序進行分類,根據訪問目的或使用場景的不同,演算法大致可分為28種:

圖遍歷即以特定方式訪問圖中所有節點,給定節點下有多種可能的搜索路徑。假定以順序方式進行(非並行),還未訪問的節點就需通過堆棧(LIFO)或隊列(FIFO)規則來確定訪問先後。由於樹結構是一種遞歸的數據結構,在清晰的定義下,未訪問節點可存儲在調用堆棧中。本文介紹了圖遍歷領域最流行的廣度優先搜索演算法BFS和深度優先搜索演算法DFS,對其原理、應用及實現進行了闡述。通常意義上而言,深度優先搜索(DFS)通過遞歸調用堆棧比較容易實現,廣義優先搜索通過隊列實現。

深度優先搜索(DFS)是用於遍歷或搜索圖數據結構的演算法,該演算法從根節點開始(圖搜索時可選擇任意節點作為根節點)沿著每個分支進行搜索,分支搜索結束後在進行回溯。在進入下一節點之前,樹的搜索盡可能的加深。
DFS的搜索演算法如下(以二叉樹為例):假定根節點(圖的任意節點可作為根節點)標記為 ,
(L) : 遞歸遍歷左子樹,並在節點 結束。
(R): 遞歸遍歷右子樹,並在節點 結束。
(N): 訪問節點 。
這些步驟可以以任意次序排列。如果(L)在(R)之前,則該過程稱為從左到右的遍歷;反之,則稱為從右到左的遍歷。根據訪問次序的不同,深度優先搜索可分為 pre-order、in-order、out-order以及post-order遍歷方式。

(a)檢查當前節點是否為空;
(b)展示根節點或當前節點數據;
(c)遞歸調用pre-order函數遍歷左子樹;
(d)遞歸調用pre-order函數遍歷右子樹。
pre-order遍歷屬於拓撲排序後的遍歷,父節點總是在任何子節點之前被訪問。該遍歷方式的圖示如下:

遍歷次序依次為:F -B -A-D- C-E-G- I-H.

(a)檢查當前節點是否為空;
(b)遞歸調用in-order函數遍歷左子樹;
(c)展示根節點或當前節點數據;
(d)遞歸調用in-order函數遍歷右子樹。
在二叉樹搜索中,in-order遍歷以排序順序訪問節點數據。該遍歷方式的圖示如下:

遍歷次序依次為:A -B - C - D - E - F - G -H-I

(a)檢查當前節點是否為空;
(b)遞歸調用out-order函數遍歷右子樹;
(c)展示根節點或當前節點數據;
(d)遞歸調用out-order函數遍歷左子樹。
該遍歷方式與LNR類似,但先遍歷右子樹後遍歷左子樹。仍然以圖2為例,遍歷次序依次為:H- I-G- F- B- E- D- C- A.

(a)檢查當前節點是否為空;
(b)遞歸調用post-order函數遍歷左子樹;
(c)遞歸調用post-order函數遍歷右子樹;
(d)展示根節點或當前節點數據。
post-order遍歷圖示如下:

遍歷次序依次為:A-C-E-D-B-H-I-G-F.

pre-order遍歷方式使用場景:用於創建樹或圖的副本;
in-order遍歷使用場景:二叉樹遍歷;
post-order遍歷使用場景:刪除樹

遍歷追蹤也稱樹的序列化,是所訪問根節點列表。無論是pre-order,in-order或是post-order都無法完整的描述樹特性。給定含有不同元素的樹結構,pre-order或post-order與in-order遍歷方式結合起來使用才可以描述樹的獨特性。

樹或圖形的訪問也可以按照節點所處的級別進行遍歷。在每次訪問下一層級節點之前,遍歷所在高層級的所有節點。BFS從根節點(圖的任意節點可作為根節點)出發,在移動到下一節點之前訪問所有相同深度水平的相鄰節點。

BFS的遍歷方法圖示如下:

遍歷次序依次為: F-B-G-A-D-I-C-E-H.

圖演算法相關的R包為igraph,主要包括圖的生成、圖計算等一系列演算法的實現。

使用方法:

參數說明:

示例:

結果展示:

DFS R輸出節點排序:

使用方法:

參數含義同dfs
示例:

結果展示:

BFS R輸出節點排序:

以尋找兩點之間的路徑為例,分別展示BFS及DFS的實現。圖示例如下:

示例:

輸出結果:

示例:

輸出結果:

[1] 維基網路: https://en.wikipedia.org/wiki/Tree_traversal
[2] GeeksforGeeks: https://www.geeksforgeeks.org/tree-traversals-inorder-preorder-and-postorder/
[3] http://webdocs.cs.ualberta.ca/~holte/T26/tree-traversal.html
[4]Martin Broadhurst, Graph Algorithm: http://www.martinbroadhurst.com/Graph-algorithms.html#section_1_1
[5]igraph: https://igraph.org/r/doc/dfs.html
[6]igraph: https://igraph.org/r/doc/bfs.html
[7] Depth-First Search and Breadth-First Search in Python: https://eddmann.com/posts/depth-first-search-and-breadth-first-search-in-python/

閱讀全文

與搜索演算法領域相關的資料

熱點內容
android平滑滾動效果 瀏覽:841
什麼是編譯器指令 瀏覽:219
微控制器邏輯命令使用什麼匯流排 瀏覽:885
程序員在學校里是學什麼的 瀏覽:601
oraclejava數據類型 瀏覽:890
程序員考注冊會計師 瀏覽:957
怎麼使用access的命令按鈕 瀏覽:899
有點錢app在哪裡下載 瀏覽:832
博途v15解壓後無法安裝 瀏覽:205
什麼是根伺服器主機 瀏覽:438
安卓手游怎麼申請退款 瀏覽:555
安卓系統如何分享網頁 瀏覽:278
ad如何編譯pcb工程 瀏覽:414
除了滴滴app哪裡還能用滴滴 瀏覽:399
截圖怎麼保存文件夾然後壓縮 瀏覽:8
幻影伺服器怎麼樣 瀏覽:28
具體哪些廣東公司招程序員 瀏覽:871
嵌入式編譯器教程 瀏覽:307
ssl數據加密傳輸 瀏覽:87
51單片機定時器方式2 瀏覽:332