夏令營提高班hash與位運算_第1頁
夏令營提高班hash與位運算_第2頁
夏令營提高班hash與位運算_第3頁
夏令營提高班hash與位運算_第4頁
夏令營提高班hash與位運算_第5頁
免費預覽已結束,剩余27頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、Hash與位運算山東師大附中陳鍵飛位運算對二進制數的一些操作優化時間常數優化代碼長度核心思想將一個二進制串(集合)用一個數表示集合1,2,3,5 (10111)2位運算符and(&)or(|)xor()not()and的應用清零 eg. A and (00011)2取位 eg. A and (00100)2=0?求交集 AB=A and BMod : A Mod 2n = A and (2n-1)滿足交換律、結合律or的應用清零 eg. A or (00011)2求并集 AB=A or B滿足交換律、結合律xor的應用把某些位反轉 eg. A xor (01110)2求補集CuA=A xor

2、U哈希函數滿足交換律、結合律,xor是自己的逆運算A xor B=B xor AA xor (B xor C)=A xor B xor CA xor B xor A=Bshl的應用乘2k :A shl k青蛙過河:readln(m,n);writeln(m+1)shl n);shr的應用Div 2k :A shr kmid:=(lb+rb)shr 1;if (leftmid) then search(t shl 1+1,mid+1,rb);小例題縮短代碼:集合a是不是集合b的子集?function a( a,b : array1.30of boolean):boolean;var i:long

3、int;beginfor i:=1 to 30 do if ai and not bi then exit(false);exit(true);end;a and b = a例題判斷一個01串中有沒有兩個1相鄰?function b( a:array1.30of boolean):boolean;var i:longint;beginfor i:=1 to 29 do if ai and ai+1 then exit(true);exit(false);end;如果是判斷是不是有兩個0相鄰呢?a and (a shr 1) 0 a or (a shr 1) 0 do begininc( pop

4、count , x and 1) ;x := x shr 1 ;end ;end ;O(log x)例題function popcount2( x : longint ) : longint ;begin x := ( x and $55555555 ) + ( (x1) and $55555555 ) ; x := ( x and $33333333 ) + ( (x2) and $33333333 ) ; x := ( x and $0F0F0F0F ) + ( (x4) and $0F0F0F0F ) ; x := ( x and $00FF00FF ) + ( (x8) and $00

5、FF00FF ) ; x := ( x and $0000FFFF ) + ( (x16) and $0000FFFF ) ; exit( x ) ;end ;例題狀態壓縮的動態規劃A包含于B:A and B = AHash狀態對一個事物的一個完整的描述比如說集訓班有三個人,其中李其樂是神牛,李其剛是神犇,羊駝是李振那么(李其樂=神牛,李其剛=神犇,羊駝=李振)就是一個狀態Hash再比如說,昨天所有同學的考試成績,也是一個狀態如果有N個同學,這個狀態的大小就是O(N)HashHash函數與Hash表Hash函數:一個狀態到一個正整數的映射F(Status)Hash表:將Hash函數按值的大小索

6、引HashHash的應用是多種多樣的應用方法上:僅Hash函數,僅Hash表,兩者都用應用領域上:廣搜的判重,字符串的索引僅用Hash函數在下載時經常用到的MD5:將一個文件映射到一個Hash函數,通過比較MD5校驗碼判斷文件的完整性。僅用Hash函數一個信息學競賽中的應用實例:Rabin-Karp算法Hash表利用Hash函數值的特殊性,實現高效的插入、刪除、查找。典型的空間換時間Hash表若Hash表大小是L,共S個狀態插入復雜度O(1),刪除和查找O(S/L)對比二叉查找樹插入,刪除和查找O(log n)Hash表的應用POI2000,Promotion值域縮小版Hash函數和Hash表的綜合應用廣搜的判重:先將狀態映射成Hash函數,再用Hash表插入,查找。廣搜+Hash已經成為一種套路,兩者是密不可分的Hash函數和Hash表的綜合應用字符串的索引生物基元問題:給定字符串S和基元串A1An,求最大的k,使S1.k由基元串組成Hash函數和Hash表的綜合應用Fi=Or(Fj) (當且僅當j=i且Sj+1.i是一個基元串)Hash優化決策時間:判斷Sj+1.i是不是基元串O(1)一個應用給定n

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論