1. 自組織表:
定義兩種操作
l n個元素的列表l,訪問(可能是查詢,也可以是其他操作)元素x的代價與元素在列表中的位置有關(從表頭到x的距離)。
l 元素在l中的位置可以通過交換相鄰的元素來改變,而這個操作的代價為o(1)。
如果考慮使用者的訪問可能是一系列的,而且乙個元素被訪問後,再次被訪問的概率會增大,因此考慮對乙個元素訪問後將該元素和其前驅的元素交換(代價為o(1)),從而減少其下次訪問的代價。
1.1. 乙個操作序列,每次只傳送一次操作請求。
離線演算法(offline):離線演算法可以假設可以預讀整個序列,從而可以對整個操作序列做優化。
1.2. 複雜度分析
最壞情況分析。
平均情況分析。最壞情況無法避免,因此考慮平均情況。
元素x被訪問的概率為p(x)(這相當於離線演算法)。則對於操作序列,期望的代價為:
每個元素被訪問的概率與其位置乘積的和。
因此最小期望為:把元素按訪問的概率從大到小排序。因此記錄元素被訪問的次數,並按訪問次數遞減的方式排序元素(訪問次數大於前驅的訪問次數時,進行交換)。因此對於元素x的操作,代價最多為2*rank(x),因為訪問需要rank(x),交換可能需要rank(x)。
思想:前移思想。
1.3. 應用:
這樣處理,對於搜尋的「流行詞」可能會有比較好的反應,因為在乙個時期,流行詞被搜尋的次數會增加,而一旦過了流行期間,其位置可能就被新的流行詞替代了。這對於操作序列s的區域性反映非常好。
對於快取記憶體等其他情況下也可能用到。
2. 競爭分析
ca(s)<=a*copt(s) + k
即,演算法a對s的操作代價不大於其最優的離線演算法乘上a,再加k。
copt(s),也即是如果知道所有操作序列,可以做到的最好的代價。
對a的限定不依賴於任何輸入,也不依賴於任何概率假設。
2.1. 對於自組織表mtf(move to front,移前啟發式演算法:訪問乙個元素後,就把元素移動到開頭)定理是4競爭的。(即便對手總是訪問最後乙個元素。)
證明:l 定義
li為mtf演算法中第i次操作後的表狀態。
li*為最優演算法(最好的離線演算法)第i次操作後的表狀態。
ci為mtf演算法中第i次操作的代價,即x在l(i-1)中位置的2倍。
ci*為最優演算法的第i次操作的代價,即x在l(i-1)*中位置加上ti(最優表需要交換的次數)。
對於兩個不同的代價,使用平攤分析的勢能法來確定這兩種代價的差距。
l思路:
定義勢能函式f為li到實數r的對映
f(li)=2*|乙個集合|,即為乙個集合元素個數的2倍。
這個集合為。
由於li*中為最優的,因此li*為有序的。這個集合相當於li相對於li*元素定義的順序的逆序對的數量。
因此f(li)=2*(li的逆序對)。
l f的性質:
f(li)>=0;
f(l0)=0,如果l0,即初始狀態和最優序列l0*相同。
l 一次修改操作,f的值怎麼變化,也即一次相鄰對換逆序對怎麼變化,由排列性質,逆序對增加或減少1,因此勢能函式的值的變化為+2或-2。
2.2. 當第i次操作要訪問的元素為x時,會發生什麼?
根據x在li和li*中的位置,將li中的元素分為四個集合。
a=b=
c=d=
直觀上:
a與b並集表示li中小於x的元素集合,c與d的並集表示li中大於x的元素集合;
a與c並集表示li*中小於x的元素集合,b與d的並集表示li*中大於x的元素集合。
定義:r=rankli(x),即x在li中的位置。
r*=rankli*(x),即x在li*中的位置。
由此可得
a,b,c,d的關係還可得
r=|a|+|b|+1,即a,b元素的個數和加1。
r*=|a|+|c|+1,即a,c元素的個數和加1。
2.2.1. 當mif方式訪問後,將x移動到最開頭,增加的逆序數為a集合的勢(由f(li)定義的函式),但是會減少b集合勢那麼多個逆序數。
最優演算法方式,則只最多和前驅的元素交換,因此最多增加乙個逆序,或減少乙個逆序。
從而勢能函式的變化量
f(li)-f(li-1)<=2(|a|-|b|+ti) (ti為最優表在第i次操作時,交換次數)
由勢能方法分析
平攤代價與實際代價之間的關係:第i次操作
ci^=ci+f(li)-f(li-1)<=2*r+2*(|a|-|b|+ti)
=2*r+2*(|a|-r+|a|+1+ti)-------------------------------------(由r定義替換|b|)
=4|a|+2+2*ti
<=4*(r*-1)+2-2*ti=4*(r*+ti)-2(1+ti)--------------------(由r*定義,則r*>=|a|+1)
<=4*(r*+1)--------------------------(由ti為正負1則1+ti>=0)
=4*ci*----------------------------------------(由c*定義)
從而mtf第i次的平攤代價最多為相應的最優代價的4倍。
從而mtf總的代價為各次代價的和。
cmtf(s)=c1+…+cn
=c1^+f(l0)-f(l1)+….+cn^+f(ln-1)-f(ln)
=c1^+…+cn^ + f(l0)-f(ln)
<=4*(c1*+…+cn*)----------------------(由剛才的結論,第i次的平攤代價上限,以及l0的勢為0,且f(ln)>=0).
=4*copt(s)。
從而mtf為4競爭的。
2.3. 對於競爭分析
l 如果資料用鍊錶表示,則從x位置移動到表頭的操作只需要常數,因此可以忽略其代價,這時可以證明相應的mtf則為2競爭的。
l 如果表的開始的勢不為0,即l0和l0*不想等,比如有可能已經執行過一段時間了。這時候l0的最差情況為和l0*比是反序的,這樣逆序為n個元素的逆序,為o(n^2).
這時候cmtf(s)<=4*copt(s)+o(n^2)。
如果n的規模相對於s的次數變化不是太大,因此如果操作序列s中的操作為很大時,上式中的o(n^2)也是常量級別的,因此也是4競爭的。
2.4. 如果不是忽略置換的代價,而是乙個常數級別的,如3,則相應的結果將改變競爭的常數,常數將不再是4倍。
自組織對映
自組織對映的主要目的是將任意維數的輸入訊號模式轉變為一維或二維的離散對映,並且以拓撲有序的方式自適應實現這個變換。合作 獲勝神經元決定興奮神經元的拓撲領域的空間位置,從而提供這樣的相鄰神經元之間的合作。競爭 對每個輸入模式,網路中的神經元計算它們各自的判別函式的值,這個判別函式為神經元之間的競爭提供...
自組織鍊錶
引入跳躍鍊錶的目的是為了加速查詢過程。而加速策略其中乙個非常重要的觀點就是並非所有的元素使用的頻率都相同。我們自然希望高頻使用的元素在鍊錶的頭部,而低頻的在鍊錶尾部。單向鍊錶和雙向鍊錶需要進行順序查詢以定位某個元素,還可以用某種方法動態地組織鍊錶,從而提高查詢效率。有許多不同的方法可以組織鍊錶,比較...
競爭性對手分析 難題
其實很多競爭性對手的資訊,都是來自網際網路,也就是他們的選擇資料。哪麼就會有這麼一種情況 如果競爭對手完全是仿照你們工作做的產品,哪麼如何做競爭性分析呢?我的看法是 如果是100 抄襲,那就沒啥說的了,直接說那是模仿者,別的只能看具體的做法了 有句話叫,是騾子是馬,要拉出來遛遛 如果對方只是掛哪麼乙...