當前位置:首頁 » 操作系統 » 智能web演算法

智能web演算法

發布時間: 2023-05-03 18:24:12

① webrtc agc演算法有什麼用

ProcessDigital是AGC的核心函數,無論什麼模式都要調用到。推薦即構科技的SDK,產品可選:實時音視頻、實時語音、互動直播、IM即時通訊。【點擊免費試用,0成本啟動】

首先計算了近端信號的VAD參數。並且當遠端信號超過10幀(100ms)後,使用遠端的VAD參數修正近端VAD,具體方法是:
當gate最小的時候為0(語音),gain_adj取到最大,此時不使用gainTable[0]的值作為參考;
當gate最大的時候為2500(雜訊),gain_adj取到最小,此時g[k+1]要取到相對於gainTable[0]的值的70%;
當gate處於最大最小值之間,g[k+1]在gainTable[0]和g[k+1]確定的這條直線上移動。
接著再根據信號的大小對gain做一些限制,保證信號不要發生剪切。

想要了解更多關於這方面的相關信息,推薦咨詢ZEGO即構科技。深圳市即構科技有限公司(簡稱ZEGO即構科技)於2015年6月成立,是一家全球雲通訊服務商。企業/開發者通過接入ZEGO提供的服務即可低門檻地獲得實時音視頻通訊能力,尤其在弱網環境下仍然可以實現高質音畫、穩定可靠。截止目前,ZEGO已經為兩百多個國家和地區的用戶提供了優質服務。

② web前端diff 演算法深入一下

有同學問:能否詳細說一下 diff 演算法。

詳細的說,請閱讀這篇文章,有疑問的地方歡迎留言一起討論。

因為 diff 演算法是 vue2.x , vue3.x 以及 react 中關鍵核心點,理解 diff 演算法,更有助於理解各個框架本質。

說到「diff 演算法」,不得不說「虛擬 Dom」,因為這兩個息息相關。

比如:

等等

我們先來說說虛擬 Dom,就是通過 JS 模擬實現 DOM ,接下來難點就是如何判斷舊對象和新對象之間的差異。

Dom 是多叉樹結構,如果需要完整的對比兩棵樹的差異,那麼演算法的時間復雜度 O(n ^ 3),這個復雜度很難讓人接收,尤其在 n 很大的情況下,於是 React 團隊優化了演算法,實現了 O(n) 的復雜度來對比差異。

實現 O(n) 復雜度的關鍵就是只對比同層的節點,而不是跨層對比,這也是考慮到在實際業務中很少會去跨層的移動 DOM 元素。

虛擬 DOM 差異演算法的步驟分為 2 步:

實際 diff 演算法比較中,節點比較主要有 5 種規則的比較

部分源碼 https://github.com/vuejs/vue/blob//src/core/vdom/patch.js#L501 如下:

在 reconcileChildren 函數的入參中

diff 的兩個主體是:oldFiber(current.child)和 newChildren(nextChildren,新的 ReactElement),它們是兩個不一樣的數據結構。

部分源碼

很多時候手工優化 dom 確實會比 virtual dom 效率高,對於比較簡單的 dom 結構用手工優化沒有問題,但當頁面結構很龐大,結構很復雜時,手工優化會花去大量時間,而且可維護性也不高,不能保證每個人都有手工優化的能力。至此,virtual dom 的解決方案應運而生。

virtual dom 是「解決過多的操作 dom 影響性能」的一種解決方案。

virtual dom 很多時候都不是最優的操作,但它具有普適性,在效率、可維護性之間達到平衡。

virutal dom 的意義:

vue2.x 的 diff 位於 patch.js 文件中,該演算法來源於 snabbdom,復雜度為 O(n)。了解 diff 過程可以讓我們更高效的使用框架。react 的 diff 其實和 vue 的 diff 大同小異。

最大特點:比較只會在同層級進行, 不會跨層級比較。

對比之前和之後:可能期望將 直接移動到

的後邊,這是最優的操作。

但是實際的 diff 操作是:

vue 中也使用 diff 演算法,有必要了解一下 Vue 是如何工作的。通過這個問題,我們可以很好的掌握,diff 演算法在整個編譯過程中,哪個環節,做了哪些操作,然後使用 diff 演算法後輸出什麼?

解釋:

mount 函數主要是獲取 template,然後進入 compileToFunctions 函數。

compileToFunction 函數主要是將 template 編譯成 render 函數。首先讀取緩存,沒有緩存就調用 compile 方法拿到 render 函數的字元串形式,在通過 new Function 的方式生成 render 函數。

compile 函數將 template 編譯成 render 函數的字元串形式。後面我們主要講解 render

完成 render 方法生成後,會進入到 mount 進行 DOM 更新。該方法核心邏輯如下:

上面提到的 compile 就是將 template 編譯成 render 函數的字元串形式。核心代碼如下:

compile 這個函數主要有三個步驟組成:

分別輸出一個包含

parse 函數:主要功能是 將 template 字元串解析成 AST(抽象語法樹) 。前面定義的 ASTElement 的數據結構,parse 函數就是將 template 里的結構(指令,屬性,標簽) 轉換為 AST 形式存進 ASTElement 中,最後解析生成 AST。

optimize 函數(src/compiler/optomizer.js):主要功能是 標記靜態節點 。後面 patch 過程中對比新舊 VNode 樹形結構做優化。被標記為 static 的節點在後面的 diff 演算法中會被直接忽略,不做詳細比較。

generate 函數(src/compiler/codegen/index.js):主要功能 根據 AST 結構拼接生成 render 函數的字元串

其中 genElement 函數(src/compiler/codgen/index.js)是根據 AST 的屬性調用不同的方法生成字元串返回。

總之:

就是 compile 函數中三個核心步驟介紹,

patch 函數 就是新舊 VNode 對比的 diff 函數,主要是為了優化 dom,通過演算法使操作 dom 的行為降低到最低, diff 演算法來源於 snabbdom,是 VDOM 思想的核心。snabbdom 的演算法是為了 DOM 操作跨級增刪節點較少的這一目標進行優化, 它只會在同層級進行,不會跨層級比較。

總的來說:

在創建 VNode 就確定類型,以及在 mount/patch 的過程中採用位運算來判斷一個 VNode 的類型,在這個優化的基礎上再配合 Diff 演算法,性能得到提升。

可以看一下 vue3.x 的源碼:https://github.com/vuejs/vue/blob//src/core/vdom/patch.js

對 oldFiber 和新的 ReactElement 節點的比對,將會生成新的 fiber 節點,同時標記上 effectTag,這些 fiber 會被連到 workInProgress 樹中,作為新的 WIP 節點。樹的結構因此被一點點地確定,而新的 workInProgress 節點也基本定型。在 diff 過後,workInProgress 節點的 beginWork 節點就完成了,接下來會進入 completeWork 階段。

snabbdom 演算法:https://github.com/snabbdom/snabbdom

定位:一個專注於簡單性、模塊化、強大功能和性能的虛擬 DOM 庫。

snabbdom 中定義 Vnode 的類型(https://github.com/snabbdom/snabbdom/blob//src/vnode.ts#L12)

init 函數的地址:

https://github.com/snabbdom/snabbdom/blob//src/init.ts#L63

init() 函數接收一個模塊數組 moles 和可選的 domApi 對象作為參數,返回一個函數,即 patch() 函數。

domApi 對象的介麵包含了很多 DOM 操作的方法。

源碼:

https://github.com/snabbdom/snabbdom/blob//src/init.ts#L367

源碼:

https://github.com/snabbdom/snabbdom/blob//src/h.ts#L33

h() 函數接收多種參數,其中必須有一個 sel 參數,作用是將節點內容掛載到該容器中,並返回一個新 VNode。

在 vue2.x 不是完全 snabbdom 演算法,而是基於 vue 的場景進行了一些修改和優化,主要體現在判斷 key 和 diff 部分。

1、在 snabbdom 中 通過 key 和 sel 就判斷是否為同一節點,那麼在 vue 中,增加了一些判斷 在滿足 key 相等的同時會判斷,tag 名稱是否一致,是否為注釋節點,是否為非同步節點,或者為 input 時候類型是否相同等。

https://github.com/vuejs/vue/blob//src/core/vdom/patch.js#L35

2、diff 差異,patchVnode 是對比模版變化的函數,可能會用到 diff 也可能直接更新。

https://github.com/vuejs/vue/blob//src/core/vdom/patch.js#L404

③ WEB超鏈分析演算法的WEB超鏈分析演算法

搜索引擎Google最初是斯坦福大學的博士研究生Sergey Brin和Lawrence Page實現的一個原型系統[2],現在已經發展成為WWW上最好的搜索引擎之一。Google的體系結構類似於傳統的搜索引擎,它與傳統的搜索引擎最大的不同處在於對網頁進行了基於權威值的排序處理,使最重要的網頁出現在結果的最前面。Google通過PageRank元演算法計算出網頁的PageRank值,從而決定網頁在結果集中的出現位置,PageRank值越高的網頁,在結果中出現的位置越前。
2.1.1PageRank演算法
PageRank演算法基於下面2個前提:
前提1:一個網頁被多次引用,則它可能是很重要的;一個網頁雖然沒有被多次引用,但是被重要的網頁引用,則它也可能是很重要的;一個網頁的重要性被平均的傳遞到它所引用的網頁。這種重要的網頁稱為權威(Authoritive)網頁。
前提2:假定用戶一開始隨機的訪問網頁集合中的一個網頁,以後跟隨網頁的向外鏈接向前瀏覽網頁,不回退瀏覽,瀏覽下一個網頁的概率就是被瀏覽網頁的PageRank值。
簡單PageRank演算法描述如下:u是一個網頁,是u指向的網頁集合,是指向u的網頁集合,是u指向外的鏈接數,顯然=| | ,c是一個用於規范化的因子(Google通常取0.85),(這種表示法也適用於以後介紹的演算法)則u的Rank值計算如下:
這就是演算法的形式化描述,也可以用矩陣來描述此演算法,設A為一個方陣,行和列對應網頁集的網頁。如果網頁i有指向網頁j的一個鏈接,則,否則=0。設V是對應網頁集的一個向量,有V=cAV,V為A的特徵根為c的特徵向量。實際上,只需要求出最大特徵根的特徵向量,就是網頁集對應的最終PageRank值,這可以用迭代方法計算。
如果有2個相互指向的網頁a,b,他們不指向其它任何網頁,另外有某個網頁c,指向a,b中的某一個,比如a,那麼在迭代計算中,a,b的rank值不分布出去而不斷的累計。如下圖:
為了解決這個問題,Sergey Brin和Lawrence Page改進了演算法,引入了衰退因子E(u),E(U)是對應網頁集的某一向量,對應rank的初始值,演算法改進如下:
其中,=1,對應的矩陣形式為V』=c(AV』+E)。
另外還有一些特殊的鏈接,指向的網頁沒有向外的鏈接。PageRank計算時,把這種鏈接首先除去,等計算完以後再加入,這對原來計算出的網頁的rank值影響是很小的。
Pagerank演算法除了對搜索結果進行排序外,還可以應用到其它方面,如估算網路流量,向後鏈接的預測器,為用戶導航等[2]。
2.1.2演算法的一些問題
Google是結合文本的方法來實現PageRank演算法的[2],所以只返回包含查詢項的網頁,然後根據網頁的rank值對搜索到的結果進行排序,把rank值最高的網頁放置到最前面,但是如果最重要的網頁不在結果網頁集中,PageRank演算法就無能為力了,比如在 Google中查詢search engines,像Google,Yahoo,Altivisa等都是很重要的,但是Google返回的結果中這些網頁並沒有出現。 同樣的查詢例子也可以說明另外一個問題,Google,Yahoo是WWW上最受歡迎的網頁,如果出現在查詢項car的結果集中,一定會有很多網頁指向它們,就會得到較高的rank值, 事實上他們與car不太相關。
在PageRank演算法的基礎上,其它的研究者提出了改進的PageRank演算法。華盛頓大學計算機科學與工程系的Matthew Richardson和Pedro Dominggos提出了結合鏈接和內容信息的PageRank演算法,去除了PageRank演算法需要的前提2,增加考慮了用戶從一個網頁直接跳轉到非直接相鄰的但是內容相關的另外一個網頁的情況[3]。斯坦大學計算機科學系Taher Haveliwala提出了主題敏感(Topic-sensitive)PageRank演算法[4]。斯坦福大學計算機科學系Arvind Arasu等經過試驗表明,PageRank演算法計算效率還可以得到很大的提高[22]。 PageRank演算法中對於向外鏈接的權值貢獻是平均的,也就是不考慮不同鏈接的重要性。而WEB的鏈接具有以下特徵:
1.有些鏈接具有注釋性,也有些鏈接是起導航或廣告作用。有注釋性的鏈接才用於權威判斷。
2.基於商業或競爭因素考慮,很少有WEB網頁指向其競爭領域的權威網頁。
3.權威網頁很少具有顯式的描述,比如Google主頁不會明確給出WEB搜索引擎之類的描述信息。
可見平均的分布權值不符合鏈接的實際情況[17]。J. Kleinberg[5]提出的HITS演算法中引入了另外一種網頁,稱為Hub網頁,Hub網頁是提供指向權威網頁鏈接集合的WEB網頁,它本身可能並不重要,或者說沒有幾個網頁指向它,但是Hub網頁確提供了指向就某個主題而言最為重要的站點的鏈接集合,比一個課程主頁上的推薦參考文獻列表。一般來說,好的Hub網頁指向許多好的權威網頁;好的權威網頁是有許多好的Hub網頁指向的WEB網頁。這種Hub與Authoritive網頁之間的相互加強關系,可用於權威網頁的發現和WEB結構和資源的自動發現,這就是Hub/Authority方法的基本思想。
2.2.1HITS演算法
HITS(Hyperlink-Inced Topic Search)演算法是利用Hub/Authority方法的搜索方法,演算法如下:將查詢q提交給傳統的基於關鍵字匹配的搜索引擎.搜索引擎返回很多網頁,從中取前n個網頁作為根集(root set),用S表示。S滿足如下3個條件:
1.S中網頁數量相對較小
2.S中網頁大多數是與查詢q相關的網頁
3.S中網頁包含較多的權威網頁。
通過向S中加入被S引用的網頁和引用S的網頁將S擴展成一個更大的集合T.
以T中的Hub網頁為頂點集Vl,以權威網頁為頂點集V2,Vl中的網頁到V2中的網頁的超鏈接為邊集E,形成一個二分有向圖SG=(V1,V2,E)。對V1中的任一個頂點v,用h(v)表示網頁v的Hub值,對V2中的頂點u,用a(u)表示網頁的Authority值。開始時h(v)=a(u)=1,對u執行I操作修改它的a(u),對v執行O操作修改它的h(v),然後規范化a(u),h(v),如此不斷的重復計算下面的操作I,O,直到a(u),h(v)收斂。(證明此演算法收斂可見)
I 操作: (1) O操作: (2)
每次迭代後需要對a(u),h(v)進行規范化處理:
式(1)反映了若一個網頁由很多好的Hub指向,則其權威值會相應增加(即權威值增加為所有指向它的網頁的現有Hub值之和)。式(2)反映了若一個網頁指向許多好的權威頁,則Hub值也會相應增加(即Hub值增加為該網頁鏈接的所有網頁的權威值之和)。
和PageRank演算法一樣,可以用矩陣形式來描述演算法,這里省略不寫。
HITS演算法輸出一組具有較大Hub值的網頁和具有較大權威值的網頁。
2.2.2HITS的問題
HITS演算法有以下幾個問題:
1.實際應用中,由S生成T的時間開銷是很昂貴的,需要下載和分析S中每個網頁包含的所有鏈接,並且排除重復的鏈接。一般T比S大很多,由T生成有向圖也很耗時。需要分別計算網頁的A/H值,計算量比PageRank演算法大。
2.有些時候,一主機A上的很多文檔可能指向另外一台主機B上的某個文檔,這就增加了A上文檔的Hub值和B上文檔的Authority,相反的情況也如此。HITS是假定某一文檔的權威值是由不同的單個組織或者個人決定的,上述情況影響了A和B上文檔的Hub和Authority值[7]。
3.網頁中一些無關的鏈接影響A,H值的計算。在製作網頁的時候,有些開發工具會自動的在網頁上加入一些鏈接,這些鏈接大多是與查詢主題無關的。同一個站點內的鏈接目的是為用戶提供導航幫助,也與查詢主題不甚無關,還有一些商業廣告,贊助商和用於友情交換的鏈接,也會降低HITS演算法的精度[8]。
4.HITS演算法只計算主特徵向量,也就是只能發現T集合中的主社區(Community),忽略了其它重要的社區[12]。事實上,其它社區可能也非常重要。
5.HITS演算法最大的弱點是處理不好主題漂移問題(topic drift)[7,8],也就是緊密鏈接TKC(Tightly-Knit Community Effect)現象[8]。如果在集合T中有少數與查詢主題無關的網頁,但是他們是緊密鏈接的,HITS演算法的結果可能就是這些網頁,因為HITS只能發現主社區,從而偏離了原來的查詢主題。下面討論的SALSA演算法中解決了TKC問題。
6.用HITS進行窄主題查詢時,可能產生主題泛化問題[5,9],即擴展以後引入了比原來主題更重要的新的主題,新的主題可能與原始查詢無關。泛化的原因是因為網頁中包含不同主題的向外鏈接,而且新主題的鏈接具有更加的重要性。
2.2.3HITS的變種
HITS演算法遇到的問題,大多是因為HITS是純粹的基於鏈接分析的演算法,沒有考慮文本內容,繼J. Kleinberg提出HITS演算法以後,很多研究者對HITS進行了改進,提出了許多HITS的變種演算法,主要有:
2.2.3.1Monika R. Henzinger和Krishna Bharat對HITS的改進
對於上述提到的HITS遇到的第2個問題,Monika R. Henzinger和Krishna Bharat在[7]中進行了改進。假定主機A上有k個網頁指向主機B上的某個文檔d,則A上的k個文檔對B的Authority貢獻值總共為1,每個文檔貢獻1/k,而不是HITS中的每個文檔貢獻1,總共貢獻k。類似的,對於Hub值,假定主機A上某個文檔t指向主機B上的m個文檔,則B上m個文檔對t的Hub值總共貢獻1,每個文檔貢獻1/m。I,O操作改為如下
I 操作:
O操作:
調整後的演算法有效的解決了問題2,稱之為imp演算法。
在這基礎上,Monika R. Henzinger和Krishna Bharat還引入了傳統信息檢索的內容分析技術來解決4和5,實際上也同時解決了問題3。具體方法如下,提取根集S中的每個文檔的前1000個詞語,串連起來作為查詢主題Q,文檔Dj和主題Q的相似度按如下公式計算:
,,=項i在查詢Q中的出現次數,
=項i在文檔Dj中的出現次數,IDFi是WWW上包含項i的文檔數目的估計值。
在S擴展到T後,計算每個文檔的主題相似度,根據不同的閾值(threshold)進行刷選,可以選擇所有文檔相似度的中值,根集文檔相似度的中值,最大文檔相似度的分數,如1/10,作為閾值。根據不同閾值進行處理,刪除不滿足條件的文檔,再運行imp演算法計算文檔的A/H值,這些演算法分別稱為med,startmed,maxby10。
在此改進的演算法中,計算文檔的相似度時間開銷會很大。
2.2.3.2ARC演算法
IBM Almaden研究中心的Clever工程組提出了ARC(Automatic Resource Compilation)演算法,對原始的HITS做了改進,賦予網頁集對應的連結矩陣初值時結合了鏈接的錨(anchor)文本,適應了不同的鏈接具有不同的權值的情況。
ARC演算法與HITS的不同主要有以下3點:
1.由根集S擴展為T時,HITS只擴展與根集中網頁鏈接路徑長度為1的網頁,也就是只擴展直接與S相鄰的網頁,而ARC中把擴展的鏈接長度增加到2,擴展後的網頁集稱為增集(Augment Set)。
2.HITS演算法中,每個鏈接對應的矩陣值設為1,實際上每個鏈接的重要性是不同的,ARC演算法考慮了鏈接周圍的文本來確定鏈接的重要性。考慮鏈接p->q,p中有若干鏈接標記,文本1<a href=」q」>錨文本</a>文本2,設查詢項t在文本1,錨文本,文本2,出現的次數為n(t),則w(p,q)=1+n(t)。文本1和文本2的長度經過試驗設為50位元組[10]。構造矩陣W,如果有網頁i->j ,Wi,j=w(i,j),否則Wi,j=0,H值設為1,Z為W的轉置矩陣,迭代執行下面3個的操作:
(1)A=WH (2)H=ZA (3)規范化A,H
3.ARC演算法的目標是找到前15個最重要的網頁,只需要A/H的前15個值相對大小保持穩定即可,不需要A/H整個收斂,這樣2中迭代次數很小就能滿足,[10]中指出迭代5次就可以,所以ARC演算法有很高的計算效率,開銷主要是在擴展根集上。
2.2.3.3Hub平均( Hub-Averaging-Kleinberg)演算法
Allan Borodin等在[11]指出了一種現象,設有M+1個Hub網頁,M+1個權威網頁,前M個Hub指向第一個權威網頁,第M+1個Hub網頁指向了所有M+1個權威網頁。顯然根據HITS演算法,第一個權威網頁最重要,有最高的Authority值,這是我們希望的。但是,根據HITS,第M+1個Hub網頁有最高的Hub值,事實上,第M+1個Hub網頁既指向了權威值很高的第一個權威網頁,同時也指向了其它權威值不高的網頁,它的Hub值不應該比前M個網頁的Hub值高。因此,Allan Borodin修改了HITS的O操作:
O操作: ,n是(v,u)的個數
調整以後,僅指向權威值高的網頁的Hub值比既指向權威值高又指向權威值低的網頁的Hub值高,此演算法稱為Hub平均(Hub-Averaging-Kleinberg)演算法。
2.2.3.4閾值(Threshhold—Kleinberg)演算法
Allan Borodin等在[11]中同時提出了3種閾值控制的演算法,分別是Hub閾值演算法,Authority閾值演算法,以及結合2者的全閾值演算法。
計算網頁p的Authority時候,不考慮指向它的所有網頁Hub值對它的貢獻,只考慮Hub值超過平均值的網頁的貢獻,這就是Hub閾值方法。
Authority閾值演算法和Hub閾值方法類似,不考慮所有p指向的網頁的Authority對p的Hub值貢獻,只計算前K個權威網頁對它Hub值的貢獻,這是基於演算法的目標是查找最重要的K個權威網頁的前提。
同時使用Authority閾值演算法和Hub閾值方法的演算法,就是全閾值演算法 PageRank演算法是基於用戶隨機的向前瀏覽網頁的直覺知識,HITS演算法考慮的是Authoritive網頁和Hub網頁之間的加強關系。實際應用中,用戶大多數情況下是向前瀏覽網頁,但是很多時候也會回退瀏覽網頁。基於上述直覺知識,R. Lempel和S. Moran提出了SALSA(Stochastic Approach for Link-Structure Analysis)演算法[8],考慮了用戶回退瀏覽網頁的情況,保留了PageRank的隨機漫遊和HITS中把網頁分為Authoritive和Hub的思想,取消了Authoritive和Hub之間的相互加強關系。
具體演算法如下:
1.和HITS演算法的第一步一樣,得到根集並且擴展為網頁集合T,並除去孤立節點。
2.從集合T構造無向圖G』=(Vh,Va,E)
Vh = { sh | s∈C and out-degree(s) > 0 } ( G』的Hub邊).
Va = { sa | s∈C and in-degree(s) > 0 } (G』的Authority邊).
E= { (sh , ra) |s->r in T}
這就定義了2條鏈,Authority鏈和Hub鏈。
3.定義2條馬爾可夫鏈的變化矩陣,也是隨機矩陣,分別是Hub矩陣H,Authority矩陣A。
4.求出矩陣H,A的主特徵向量,就是對應的馬爾可夫鏈的靜態分布。
5.A中值大的對應的網頁就是所要找的重要網頁。
SALSA演算法沒有HITS中相互加強的迭代過程,計算量遠小於HITS。SALSA演算法只考慮直接相鄰的網頁對自身A/H的影響,而HITS是計算整個網頁集合T對自身AH的影響。
實際應用中,SALSA在擴展根集時忽略了很多無關的鏈接,比如
1.同一站點內的鏈接,因為這些鏈接大多隻起導航作用。
2.CGI 腳本鏈接。
3.廣告和贊助商鏈接。
試驗結果表明,對於單主題查詢java,SALSA有比HITS更精確的結果,對於多主題查詢abortion,HITS的結果集中於主題的某個方面,而SALSA演算法的結果覆蓋了多個方面,也就是說,對於TKC現象,SALSA演算法比HITS演算法有更高的健壯性。
2.3.1BFS(Backword Forward Step)演算法
SALSA演算法計算網頁的Authority值時,只考慮網頁在直接相鄰網頁集中的受歡迎程度,忽略其它網頁對它的影響。HITS演算法考慮的是整個圖的結構,特別的,經過n步以後,網頁i的Authority的權重是,為離開網頁i的的路徑的數目,也就是說網頁j<>i,對i的權值貢獻等於從i到j的路徑的數量。如果從i到j包含有一個迴路,那麼j對i的貢獻將會呈指數級增加,這並不是演算法所希望的,因為迴路可能不是與查詢相關的。
因此,Allan Borodin等[11]提出了BFS(Backward Forward Step)演算法,既是SALSA的擴展情況,也是HITS的限制情況。基本思想是,SALSA只考慮直接相鄰網頁的影響,BFS擴展到考慮路徑長度為n的相鄰網頁的影響。在BFS中,被指定表示能通過路徑到達i的結點的集合,這樣j對i的貢獻依賴就與j到i的距離。BFS採用指數級降低權值的方式,結點i的權值計算公式如下:
=|B(i)|+ |BF(i)| +|BFB(i)|+……+||
演算法從結點i開始,第一步向後訪問,然後繼續向前或者向後訪問鄰居,每一步遇到新的結點加入權值計算,結點只有在第一次被訪問時加入進去計算。 D.Cohn and H.Chang提出了計算Hub和Authority的統計演算法PHITS(Probabilistic analogue of the HITS)[12]。他們提出了一個概率模型,在這個模型裡面一個潛在的因子或者主題z影響了文檔d到文檔c的一個鏈接,他們進一步假定,給定因子z,文檔c的條件分布P(c|z)存在,並且給定文檔d,因子z的條件分布P(z|d)也存在。
P(d) P(z|d) P(c|z) ,其中
根據這些條件分布,提出了一個可能性函數(likelihood function)L,
,M是對應的連結矩陣
然後,PHITS演算法使用Dempster等提出的EM演算法[20]分配未知的條件概率使得L最大化,也就是最好的解釋了網頁之間的鏈接關系。演算法要求因子z的數目事先給定。Allan Borodin指出,PHITS中使用的EM演算法可能會收斂於局部的最大化,而不是真正的全局最大化[11]。D. Cohn和T. Hofmann還提出了結合文檔內容和超鏈接的概率模型[13]。 Allan Borodin等提出了完全的貝葉斯統計方法來確定Hub和Authoritive網頁[11]。假定有M個Hub網頁和N個Authority網頁,可以是相同的集合。每個Hub網頁有一個未知的實數參數,表示擁有超鏈的一般趨勢,一個未知的非負參數,表示擁有指向Authority網頁的鏈接的趨勢。每個Authoritive網頁j,有一個未知的非負參數,表示j的Authority的級別。
統計模型如下,Hub網頁i到Authority網頁j的鏈接的先驗概率如下給定:
P(i,j)=Exp(+)/(1+Exp(+))
Hub網頁i到Authority網頁j沒有鏈接時,P(i,j)=1/(1+Exp(+))
從以上公式可以看出,如果很大(表示Hub網頁i有很高的趨勢指向任何一個網頁),或者和都很大(表示i是個高質量Hub,j是個高質量的Authority網頁),那麼i->j的鏈接的概率就比較大。
為了符合貝葉斯統計模型的規范,要給2M+N個未知參數(,,)指定先驗分布,這些分布應該是一般化的,不提供信息的,不依賴於被觀察數據的,對結果只能產生很小影響的。Allan Borodin等在中指定滿足正太分布N(μ,),均值μ=0,標准方差δ=10,指定和滿足Exp(1)分布,即x>=0,P(>=x)=P(>=x)=Exp(-x)。
接下來就是標準的貝葉斯方法處理和HITS中求矩陣特徵根的運算。
2.5.1簡化的貝葉斯演算法
Allan Borodin同時提出了簡化的上述貝葉斯演算法,完全除去了參數,也就不再需要正太分布的參數μ,δ了。計算公式變為:P(i,j)=/(1+),Hub網頁到Authority網頁j沒有鏈接時,P(i,j)=1/(1+)。
Allan Borodin 指出簡化的貝葉斯產生的效果與SALSA演算法的結果非常類似。 上面的所有演算法,都是從查詢項或者主題出發,經過演算法處理,得到結果網頁。多倫多大學計算機系Alberto Mendelzon, Davood Rafiei提出了一種反向的演算法,輸入為某個網頁的URL地址,輸出為一組主題,網頁在這些主題上有聲望(repution)[16]。比如輸入,www.gamelan.com,可能的輸出結果是「java」,具體的系統可以訪問htpp://www.cs.toronto.e/db/topic。
給定一個網頁p,計算在主題t上的聲望,首先定義2個參數,滲透率和聚焦率,簡單起見,網頁p包含主題項t,就認為p在主題t上。
是指向p而且包含t的網頁數目,是指向p的網頁數目,是包含t的網頁數目。結合非條件概率,引入,,是WEB上網頁的數目。P在t上的聲望計算如下:
指定是既指向p有包含t的概率,即,顯然有
我們可以從搜索引擎(如Altavista)的結果得到,, ,WEB上網頁的總數估計值某些組織會經常公布,在計算中是個常量不影響RM的排序,RM最後如此計算:
給定網頁p和主題t,RM可以如上計算,但是多數的情況的只給定網頁p,需要提取主題後計算。演算法的目標是找到一組t,使得RM(p,t)有較大的值。TOPIC系統中是抽取指向p的網頁中的錨文本的單詞作為主題(上面已經討論過錨文本能很好描述目標網頁,精度很高),避免了下載所有指向p的網頁,而且RM(p,t)的計算很簡單,演算法的效率較高。主題抽取時,還忽略了用於導航、重復的鏈接的文本,同時也過濾了停止字(stop word),如「a」,「the」,「for」,「in」等。
Reputation演算法也是基於隨機漫遊模型的(random walk),可以說是PageRank和SALSA演算法的結合體。
3.鏈接演算法的分類及其評價
鏈接分析演算法可以用來提高搜索引擎的查詢效果,可以發現WWW上的重要的社區,可以分析某個網站的拓撲結構,聲望,分類等,可以用來實現文檔的自動分類等。歸根結底,能夠幫助用戶在WWW海量的信息裡面准確找到需要的信息。這是一個正在迅速發展的研究領域。
上面我們從歷史的角度總結了鏈接分析演算法的發展歷程,較為詳細的介紹了演算法的基本思想和具體實現,對演算法的存在的問題也做了討論。這些演算法有的處於研究階段,有的已經在具體的系統實現了。這些演算法大體可以分為3類,基於隨機漫遊模型的,比如PageRank,Repution演算法,基於Hub和Authority相互加強模型的,如HITS及其變種,基於概率模型的,如SALSA,PHITS,基於貝葉斯模型的,如貝葉斯演算法及其簡化版本。所有的演算法在實際應用中都結合傳統的內容分析技術進行了優化。一些實際的系統實現了某些演算法,並且獲得了很好的效果,Google實現了PageRank演算法,IBM Almaden Research Center 的Clever Project實現了ARC演算法,多倫多大學計算機系實現了一個原型系統TOPIC,來計算指定網頁有聲望的主題。
AT&T香農實驗室的Brian Amento在指出,用權威性來評價網頁的質量和人類專家評價的結果是一致的,並且各種鏈接分析演算法的結果在大多數的情況下差別很小[15]。但是,Allan Borodin也指出沒有一種演算法是完美的,在某些查詢下,結果可能很好,在另外的查詢下,結果可能很差[11]。所以應該根據不同查詢的情況,選擇不同的合適的演算法。
基於鏈接分析的演算法,提供了一種衡量網頁質量的客觀方法,獨立於語言,獨立於內容,不需人工干預就能自動發現WEB上重要的資源,挖掘出WEB上重要的社區,自動實現文檔分類。但是也有一些共同的問題影響著演算法的精度。
1.根集的質量。根集質量應該是很高的,否則,擴展後的網頁集會增加很多無關的網頁,產生主題漂移,主題泛化等一系列的問題,計算量也增加很多。演算法再好,也無法在低質量網頁集找出很多高質量的網頁。
2.噪音鏈接。WEB上不是每個鏈接都包含了有用的信息,比如廣告,站點導航,贊助商,用於友情交換的鏈接,對於鏈接分析不僅沒有幫助,而且還影響結果。如何有效的去除這些無關鏈接,也是演算法的一個關鍵點。
3.錨文本的利用。錨文本有很高的精度,對鏈接和目標網頁的描述比較精確。上述演算法在具體的實現中利用了錨文本來優化演算法。如何准確充分的利用錨文本,對演算法的精度影響很大。
4.查詢的分類。每種演算法都有自身的適用情況,對於不同的查詢,應該採用不同的演算法,以求獲得最好的結果。因此,對於查詢的分類也顯得非常重要。
結束語:當然,這些問題帶有很大的主觀性,比如,質量不能精確的定義,鏈接是否包含重要的信息也沒有有效的方法能准確的判定,分析錨文本又涉及到語義問題,查詢的分類也沒有明確界限。如果演算法要取得更好的效果,在這幾個方面需要繼續做深入的研究,相信在不久的將來會有更多的有趣和有用的成果出現。

④ webrtc beamforming 採用的什麼演算法

webrtc beamforming 採用的具體演算法可以咨詢ZEGO即構科技,ZEGO即構科技為24歲以上企業高管、CTO、程序員、產品經理提供最好的服務,值得推薦。【點擊免費試用,0成本啟動】

採用的是BEAM3——二維彈性梁單元,單元描述: BEAM3 是一個軸向拉壓和彎曲單元,每個節點有 3 個自由度:沿節點坐標系 x、y 方向的平動和繞 z 軸的轉動。單元的詳細特性請參考理論手冊。其它的二維梁單元是塑性梁單元(BEAM23)和變截面非對稱梁單元(BEAM54)。

想要了解更多關於webrtc的相關信息,推薦咨詢ZEGO即構科技。即構科技有限公司是為開發者提供高品質實時音視頻、實時語音、互動直播和IM即時通訊等服務的公司。核心團隊成員均來自QQ,有超過20年的互聯網和音視頻技術開發經驗,以及億量級海內外用戶運營服務能力。專注於實時音視頻領域,致力提供全世界范圍內最清晰穩定實時的語音視頻服務,已服務4000+企業,適用於游戲、娛樂社交、在線教育、在線醫療、遠程會議、智能硬體等多種用戶場景。

⑤ 抖音 Web 版簽名演算法 _signature 解密

1、從抖音 APP 分享個人信息,復制鏈接,獲得個人拆念主頁地址,示例:

2、使用 Chrome 抓包,獲取視頻列表介面的請求信息

參數分析悄御鉛:

3、定位 _signature 簽啟好名演算法

4、分析簽名演算法的執行邏輯

分析完簽名演算法的調用過程,就可以搭建 NodeJS 工程來生成簽名了,快去試試吧!

1、userAgent 屬性不存在

Debug 分析抖音 API 請求流程,userAgent 屬性在 navigator 對象中,所以需要定義全局對象:

2、document 對象不存在

⑥ web前端javascript能實現什麼演算法或者計算

在Web開發中,JavaScript很重要,演算法也很重要。下面整理了一下一些常見的演算法在JavaScript下的實現,包括二分法、求字元串長度、數組去重、插入排序、選擇排序、希爾排序、快速排序、冒泡法等等。僅僅是為了練手,不保證高效與美觀,或許還有Bug,有時間再完善吧。

1.二分法:

function binary(items,value){

var startIndex=0,

stopIndex=items.length-1,

midlleIndex=(startIndex+stopIndex)>>>1;

while(items[middleIndex]!=value && startIndex

if(items[middleIndex]>value){

stopIndex=middleIndex-1;

}else{

startIndex=middleIndex+1;

}

middleIndex=(startIndex+stopIndex)>>>1;

}

return items[middleIndex]!=value ? false:true;

}

2.十六進制顏色值的隨機生成:

function randomColor(){

var arrHex=["0","2","3","4","5","6","7","8","9","a","b","c","d"],

strHex="#",

index;

for(var i=0;i < 6; i++){

index=Math.round(Math.random()*15);

strHex+=arrHex[index];

}

return strHex;

}

一個求字元串長度的方法:

function GetBytes(str){

var len=str.length,

bytes=len;

for(var i=0;i < len;i++){

if(str.CharCodeAt>255){

bytes++;

}

}

return bytes;

}

3.js實現數組去重:

Array.protype.delRepeat=function(){

var newArray=new Array();

var len=this.length;

for(var i=0;i < len;i++){

for(var j=i+1;j < len;j++)

{

if(this[i]==this[j])

{

++i;

}

}

newArray.push(this[i]);

}

return newArray;

}

4.插入排序。所謂的插入排序,就是將序列中的第一個元素看成一個有序的子序列,然後不段向後比較交換比較交換。

function insertSort(arr){

var key;

for(var j = 1; j < arr.length ; j++){

//排好序的

var i = j - 1;

key = arr[j];

while(i >= 0 && arr[i] > key){

arr[i + 1] = arr[i];

i --;

}

arr[i + 1] = key;

}

return arr;

}

5.選擇排序。其實基本的思想就是從待排序的數組中選擇最小或者最大的,放在起始位置,然後從剩下的數組中選擇最小或者最大的排在這公司數的後面。

function selectionSort(data)

{

var i, j, min, temp , count=data.length;

for(i = 0; i < count - 1; i++) {

/* find the minimum */

min = i;

for (j = i+1; j < count; j++)

{

if (data[j] < data[min])

{ min = j;}

}

/* swap data[i] and data[min] */

temp = data[i];

data[i] = data[min];

data[min] = temp;

}

return data;

}

6.希爾排序,也稱遞減增量排序演算法。其實說到底也是插入排序的變種。

function shellSort(array){

var stepArr = [1750, 701, 301, 132, 57, 23, 10, 4, 1]; //
reverse()在維基上看到這個最優的步長較小數組

var i = 0;

var stepArrLength = stepArr.length;

var len = array.length;

var len2 = parseInt(len/2);

for(;i < stepArrLength; i++){

if(stepArr[i] > len2){

continue;

}

stepSort(stepArr[i]);

}

// 排序一個步長

function stepSort(step){

//console.log(step) 使用的步長統計

var i = 0, j = 0, f, tem, key;

var stepLen = len%step > 0 ? parseInt(len/step) + 1 : len/step;

for(;i < step; i++){// 依次循環列

for(j=1;/*j < stepLen && */step * j + i < len;
j++){//依次循環每列的每行

tem = f = step * j + i;

key = array[f];

while((tem-=step) >= 0){// 依次向上查找

if(array[tem] > key){

array[tem+step] = array[tem];

}else{

break;

}

}

array[tem + step ] = key;

}

}

}

return array;

}

7.快速排序。其實說到底快速排序演算法就系對冒泡排序的一種改進,採用的就是演算法理論中的分治遞歸的思想,說得明白點,它的做法就是:通過一趟排序將待排序的紀錄分割成兩部分,其中一部分的紀錄值比另外一部分的紀錄值要小,就可以繼續分別對這兩部分紀錄進行排序;不段的遞歸實施上面兩個操作,從而實現紀錄值的排序。

function quickSort(arr,l,r){

if(l < r){

var mid=arr[parseInt((l+r)/2)],i=l-1,j=r+1;

while(true){

while(arr[++i] < mid);

while(arr[--j]>mid);

if(i>=j)break;

var temp=arr[i];

arr[i]=arr[j];

arr[j]=temp;

}

quickSort(arr,l,i-1);

quickSort(arr,j+1,r);

}

return arr;

}

8.冒泡法:

function bullSort(array){

var temp;

for(var i=0;i < array.length;i++)

{

for(var j=array.length-1;j > i;j--){

if(array[j] < array[j-1])

{

temp = array[j];

array[j]=array[j-1];

array[j-1]=temp;

}

}

}

return array;

}

⑦ 基於web數據抽取有幾種方法優缺點是什麼

1 基於自然語言的Web 信息抽取
自然語言處理是計算機科學領域與人工智慧領域中的一個重要方向。它研究能實現人與
計算機之間用自然語言進行有效通信的各種理論和方法。基於自然語言處理的方法在一定程
度上借鑒了自然語言處理技術,利用子句結構、短語和子句之間的關系,建立基於語法和語
義的抽取規則來實現信息抽取。目前採用這種原理的典型系統有RAPIER[3], WHISK [2]。下
面介紹比較有代表性的WHISK 系統。
WHISK 系統既適用於結構化、半結構化的文本也適用於自由文本。該系統並不需要提
前進行語法分析,它的規則不僅由文本中的一個短語或一系列與某領域相關的短語學習而得
到,還可以由這些短語的約束學習得到。為了盡可能加入人的參與,該系統同時學習和標記
訓練數據,而不是隨機取實例進行手工標記。系統使用語法分析器和語義類(如人名、機構
名)分析器,分析出用戶標記信息的語法成分和對應的語義類,生成基於語法標記和語義類
標記的抽取規則,實現信息抽取。
這種方法的缺點是:沒有很好的利用HTML 文檔的層次結構;需要大量的人為參與的
工作,很難實現自動的抽取;只支持記錄型的語義模式結構,不支持復雜對象的抽取。所以
此方法適用范圍較窄。
2 基於HTML 文檔結構的Web 信息抽取
這類Web 信息抽取技術的特點是依賴於HTML 文檔的內部結構特徵。在信息抽取之前,
將HTML 文檔解析成能夠體現該文檔標簽層次關系的語法樹,通過自動或者半自動的方式
產生抽取規則,將信息抽取轉化為對語法樹的操作實現信息抽取。採用該類介紹的典型系統
有LIXTO[5]、W4F[6]和DataRover[4]等。
DataRover 利用啟發規則發現分類片段中的結構規律。然後利用這些規律將在線目錄轉
換到資料庫中的分類產品。該系統使用了一個頁面分割演算法將Web 頁解析的DOM(文檔對
象模型)樹作為輸入通過該演算法找到其中的邏輯段。該系統的不足之處在於:這個方法依賴
於HTML 頁解析的DOM樹,由於大部分的HTML 頁是非良好結構的,所以解析產生的DOM
樹也不完全正確;另外,此系統只適用於那些包含明確分類的領域,使用范圍比較窄。
LIXTO 可以生成包裝器來將HTML 頁轉換成XML[13](可擴展標識語言)文檔。允許用
戶以可視化、互動式的方式對樣本頁面中的信息進行標記,系統通過記錄用戶標記的信息生
成信息抽取規則,實現對相似結構網頁的信息抽取。它的不足之處是它的抽取規則使用基於
Datalog 的Elog 語言描述的,實現和優化校困難,另外抽取規則中抽取信息的描述不夠豐富,
不支持圖像信息和文獻信息的處理。

⑧ 當前web前端常用必會的演算法和網頁常見特效js實現有哪些

如果做電商頁面,現在頁面大多大同小異,參考淘寶,京東,你就輪肆困知道有哪些特效是必須會的,同理,其他類雹改型的頁面也臘念是如此。

⑨ 百度用的是web2.0還是其它技術它們有什麼區別

Web2.0是一個網路平台。

一些人把Web2.0看作是WWW發展的一個新的階段,這一階段從架構到應用都顯現出一些顯著團耐芹的特徵。

從一個由資源內容為主的Web而成為一個向最終用戶服務的應用平台,最終畝鄭在許多方面能夠取代桌面應用。可以看成是所有的東西都Web化的一個進展。

從現象上看其特徵包括內容的創建和發布具有開放性、分布性(去中心化)、自由共享與重用等特徵。

概念對比:

Web1.0:靜態HTML網頁;

Web1.5:內容基於資料庫動態發布,三層結塌畢構,DHTML;

SemanticWeb:Web2.0的架構基礎(有人認為是同一概念的另一種說法,學名和俗名的區別;

Internet2:高速網際網路網路設施,通常指IPv6,IPMulticasting之類。

原則:

Web作為平台

採用集體智能CollectiveIntelligence

以數據為核心Dataisthenext「IntelInside」

永遠的測試版(由於定位於服務而非軟體)

輕型商務模式Lightweightbusinessmodels

軟體獨立於設備

豐富的用戶體驗RUE

蜘蛛搜索演算法是一種傳統的網路搜獲演算法。

⑩ 人工智慧入門,讀什麼書比較好

人工智慧是計算機科學的一個分支,並不是一個單一學科,圖像識別、自然語言處理、機器人裂滲、語言識別、專家系統等等,每一個研究都富有挑戰。對人工智慧感興趣,但無法確定具體方向,如何了解人工智慧現狀和研究領域?

筆者推薦4本科普書,對於大多數人來說,閱讀難度不高,公式和理論少,內容有趣,能讀得肆侍脊下去;信息較新鮮且全,要有一定閱讀價值,能夠有深入的思考當然更好。書單談亂不長,只用做科普入門。

1、《超級智能》

2、《我們最後的發明:人工智慧與人類時代的終結》

3、《智能時代》

4、《人工智慧:國家人工智慧戰略行動抓手》

熱點內容
29乘法手指速演算法 發布:2025-09-14 16:11:30 瀏覽:828
iosandroidhtml5 發布:2025-09-14 16:10:39 瀏覽:923
systemuiapk反編譯 發布:2025-09-14 15:46:44 瀏覽:991
php本地安裝 發布:2025-09-14 15:44:59 瀏覽:343
壓力大緩解壓力聽什麼歌 發布:2025-09-14 15:39:35 瀏覽:305
Java中文代碼 發布:2025-09-14 15:39:33 瀏覽:659
java除 發布:2025-09-14 15:38:59 瀏覽:577
python爬蟲存儲資料庫 發布:2025-09-14 15:29:03 瀏覽:947
解壓球捏不動 發布:2025-09-14 15:26:52 瀏覽:799
1的存儲形式 發布:2025-09-14 15:01:19 瀏覽:349