例如:把10個位元組的資料存入到只分配了8個位元組的空間緩衝區
簡單地說,緩衝區溢位就是向乙個有限空間的緩衝區拷貝了過長的字串,覆蓋相鄰的儲存單元,這將會引起程式執行失敗。
因為變數儲存在堆疊當中,當發生緩衝區溢位的時候,儲存在堆疊中的函式返回位址也會被覆蓋,造成緩衝區的溢位,從而破壞程式的堆疊,使程式轉而執行其它指令,以達到攻擊的目的。
乙個程式在記憶體中通常分為程式段,資料段和堆疊段3部分。動態資料則通過堆疊來存放。
當程式中發生函式呼叫時,計算機做如下操作:
bp ret被多餘的str覆蓋,而覆蓋之處恰好就是想要執行程式的入口!
利用空指標加快猜中的可能性
最原始的比較演算法,乙個乙個的比
kmp(d.e. knuth, j.h.morris, and v.r.pratt )主要是基於對bf演算法的改進:bf演算法只是簡單的每次移動乙個字元位置,並沒有考慮已匹配成功部分的資訊。其實這些資訊是可以利用的,此即所謂的「字首模式」----模式中不同部分存在的相同子串。根據字首模式可以使模式向前推進若干字元位置(依字首模式長度而定),而不只是乙個字元,避免了重複比較,同時也實現了無回朔。
假定試探第j個位置時,匹配失敗發生在模式字元x[i]=a ,文字字元 y[i+j]=b;
當轉移的時候,模式集的v能夠與文字中的u的一些字尾相匹配,最長的v我們定義為u的邊界標記(tagged border )。kmpnext[i] 定義為x[0 .. i-1] 的最長邊界, kmpnext[0] 定義為-1 。
構建kmpnext表:
移動:i - kmpnext[i] 的位移
i代表模式串匹配失敗的下標,從0開始
bm演算法的關鍵是找出不必要的比較。進行比較時從字串的右端而不是左端開始比較,當比較不匹配時,可直接向右移若干個位置;當被比較的字元相等時,則繼續比較其前面的字元。如果成功次數等於模式串長度,則匹配成功。
轉向函式
比較好建立,直接畫樹
失效函式+輸出函式
在同時根據f也會輸出新的輸出集合
比如: f(5) = 2. 把2的輸出集合同樣也輸出到5的輸出集合中了。
普通轉向函式占用記憶體太大。用三個陣列解決。
一層一層走
base: 一點一點偏移。。相對前乙個狀態的偏移-現在的ascii碼=現在狀態的base值
後序按照字典排列
kd樹kd樹是做多維資料索引時候用到的一種資料結構:k-d樹是二叉檢索樹的擴充套件,k-d樹的每一層將空間分成兩個。樹的頂層結點按某一維進行劃分,遞迴,每次劃分均選擇合適的維進行劃分,各個維迴圈往復。劃分要使得在每次劃分後,大約一半的點落入一側,而另一半落入另一側。當乙個結點中的點數少於給定的最大點數時,劃分結束。
分散開的劃分,方差。或者其他更加科學的做法。
檢索效率o(lgn)
高度不超過log2n
在該演算法中,每個簇用該簇中物件的平均值來表示
給定簇個數,隨便找簇個數個值(一般最小原則),然後其他點,和簇中的值比較,最近的,歸類。取平均值得到新簇。
直到不變
在該演算法中,每個簇用接近聚類中心的乙個物件來表示。
中心點的選取:從當前分類中選取這樣乙個點——它到其他所有(當前分類中的)點的距離之和最小——作為中心點。
再用這個點分別與所有點(最近)
dbscan是一種利用樣本密度進行測量比較的聚類演算法。演算法認為若樣本點在以它為圓心eps距離為半徑的區域內的少數類樣本數大於閾值minpts,那麼該樣本點即為核心點。核心點與其eps範圍內的鄰居形成簇。如果簇間存在重合,則這些簇需要合併。
給定半徑,給定距離
Manacher演算法 學習總結
求乙個序列的最大回文子串,我們需要需要用到manacher演算法。其作用在於能夠在o n 的時間內求出最長回文子串,同時也能夠求出回文子串的個數。且時間效率高,十分簡潔。我們知道,回文子串分為奇數回文子串和偶數回文子串。由於兩種情況的處理較為麻煩,我們可以考慮在期間插入字元在簡化問題。例如例子 ab...
排序演算法學習總結
一.氣泡排序 簡單來說就是兩兩比較,把大的數換到後面,小的數換到前面,一輪比較後,最大的數就排到了最後面,總共要比較n 1輪,氣泡排序是一種穩定排序演算法,即使兩個數相等,也不會破壞它們原有位置。二.快速排序 簡單來說就是選定乙個基準值,一般選取最後乙個數為基準值,然後定義兩個引數start,end...
SOM演算法學習總結
som kohonen學習演算法 演算法的步驟 1.初始化,對輸出層的各個神經元賦予隨機的小的初始值,並進行歸一化處理,得到w j,j 1,2,m,建立優勝領域nj 0 學習率learn rate初始化 2.對輸入的資料進行歸一化處理,得到x p,j 1,2,p,總共由p個資料 3.尋找獲勝的神經元...