抗沖突演算法
1. 沖突演算法是什麼
沖突演算法(或者碰撞演算法)是指當多個對象爭奪有限資源產生發生「撞車」現象時,快速決定把現有資源分配給哪個對象。比如說:
1、計算機科學中常見的Hash(哈希)演算法,要把多個數據分散放到有限空間去,由於空間限制(如空間數量少於數據的個數)以及分配演算法設計(如採用簡單的取模演算法)問題等,很容易導致兩個數據被分到同一個空間地址,這時就會發生沖突,稱為Hash沖突。哈希沖突解決演算法,一般是採用「拉鏈法」,即將沖突的數據順序排放在沖突空間的下一個位置,如果該位置也有數據,就再下一個,以此類推。
2、RFID應用中的碰撞最典型的情況是:當一輛貨車中滿載多個貼有RFID標簽的木箱通過RFID讀寫器時,RFID讀寫器會同時收到多個標簽的響應,此時稱為RFID讀寫沖突,如何防止讀寫過程中的重復讀取和漏讀是RFID沖突演算法需要解決的問題。RFID沖突演算法,往往需要分群避讓、檢測、仲裁等多種處理。
3、其他的如醫院中的多個緊急呼叫器同時呼叫服務台,以及通訊中的一台電話同時有多個人呼叫,都會發生「沖突」。一般遵循「先來先服務」、按緊急劃分優先順序、隨機抉擇等方法
2. hash函數強抗碰撞性和弱碰撞性的區別
假如有兩個不同的數據(或字元串)生成的散列值相同,這就說明哈希值碰撞了,這時候就需要單獨開一個表,用另一種哈希演算法重新提取這兩個數據(或字元串)的散列值放入其中,這個新散列表中的數據還可以用相同的方法再開新表,開出的新表越多抗碰撞性就越強
3. 乙太網中採用什麼機制來盡量避免沖突的發生
答案為d,二進制指數退避演算法的核心是隨機進行監聽,這個退避時間片的大小范圍和沖突的次數有關,比如沖突次數n=2,避讓的時間片的取值范圍是r={0,1,2,3}。該問題的沖突是12次,因此最大的值是
2^12-1。你要注意的是在這種演算法中要預先設定一個可以選擇的最大時間片數k,也就是說當你採用避讓演算法時最終取值是min(k,r)。(超出了預設的時間片數時隨機避讓的時間片大小就只能是k)
4. 沖突檢測的二進制指數退避演算法
在CSMA/CD協議中,一旦檢測到沖突,為降低再沖突的概率,需要等待一個隨機時間,然後再使用CSMA方法試圖傳輸。為了保證這種退避維持穩定,採用了二進制指數退避演算法的技術,其演算法過程如下:
1. 將沖突發生後的時間劃分為長度為2t的時隙
2. 發生第一次沖突後,各個站點等待0或1個時隙在開始重傳
3. 發生第二次沖突後,各個站點隨機地選擇等待0,1,2或3個時隙在開始重傳
4. 第i次沖突後,在0至2的i次方減一間隨機地選擇一個等待的時隙數,在開始重傳
5. 10次沖突後,選擇等待的時隙數固定在0至1023(2的10次方減一)間
6. 16次沖突後,發送失敗,報告上層。
5. redis使用什麼演算法來解決hash沖突
因為Memcached的哈希策略是在其客戶端實現的,因此不同的客戶端實現也有區別,以Spymemcache、Xmemcache為例,都是使用了KETAMA作為其實現。
因此,我們也可以使用一致性hash演算法來解決Redis分布式這個問題。在介紹一致性hash演算法之前,先介紹一下我之前想的一個方法,怎麼把Key均勻的映射到多台Redis Server上。
6. 射頻識別時,aloha演算法是怎樣解決沖突的
目前的防沖突演算法分兩大類【一是基於曼徹斯特編碼的二進制搜索演算法及其改進演算法, 二是基於隨機數產生器的時隙演算法及其改進演算法下面分別介紹。二進制搜索演算法及其改進演算法在二進制搜索演算法中電子標簽的舊號必須採用曼徹斯特編碼。曼徹斯特碼可在多個射頻卡同時響應時, 譯出錯誤位置,以按位定出發生沖突的位置。根據沖突的位置搜索標簽。二進制搜索演算法只能識別舊號唯一的情況。改進的演算法有動態二進制搜索演算法演算法改進的地方是對沒有發生沖突的舊位只傳送一次。這樣就減少了重傳的數據提高了效率。圖二所提的基於動態二進制的二叉樹搜索結構舊反沖突演算法是對二進制搜索演算法的改進。它的思想是對每次識別的沖突位進行分類, 分成、兩部分從而形成一棵二叉樹,