查找演算法最快的是
A. 衡量一個查找演算法的效率
衡量一個查找演算法的效率是平均查找長度。
因為衡量查找演算法效率的主要標準是平均查找長度,即查找過程中關鍵字的平均比較次數,所以衡量一個查找演算法的效率是平均查找長度。
效率字典中釋義為單位時間內完成的工作量。是指最有效地使用社會資源以滿足人類的願望和需要。
B. C# 最快查找演算法是那個
簡單寫了一下。其實用C++應該會更快,不存在生成新字元串的開銷(比如下面對每一個單詞都ToLower了一遍,因此會生成很多個新串).
static Dictionary<string, string> dict = new Dictionary<string, string>();
public static void InitDict()
{
dict.Add("yang", "YAng"); //將每個關鍵字都小寫化,作為Dictionary的key。使用Dictionary可以在O(1)的時間內判斷出單詞是不是關鍵字
dict.Add("xu", "Xu");
//Add other key words...
}
public static string Replace(string content)
{
StringBuilder sb = new StringBuilder();
int start = 0, position = 0;
while (start < content.Length)
{
position = content.IndexOf(' ', start); // 假設文本只包含字母和空格,否則還需要考慮逗號句號等情況
if (position <= 0) //可能搜索到達了文本末端,而末端不是空格
{
position = content.Length; //取最後一個單詞
}
string word = content.Substring(start, position - 1);
if (dict.ContainsKey(word.ToLower()))
{
sb.Append(dict[word.ToLower()]);
}
else
{
sb.Append(word);
}
sb.Append(' ');
start = position + 1;
}
return sb.ToString();
}
}
C. prim演算法和kruskal演算法的區別
Prim演算法和Kruskal演算法的區別對比,主要是在實現過程的不同,Kruskal演算法比Prim演算法更效率。
Prim演算法是通過直接查找,多次查找權重比值的最小值,來計算出最終答案。而Kruskal演算法,是通過對權重排序後,再重新查找最小值實現的。
從效率上來說,Kruskal在演算法比Prim演算法快很多的。這是由於,Kruskal演算法只需一次排序,就可以立馬找到最小值,而Prim演算法卻要復雜的很多,需要多次排序,才能找到最小值。Prim演算法的實現過程,在求值過程中,先以一個點作為最小的初始起點,然後以迭代的方式,找出各結點中,所佔權重最小的邊,並加到最小的系列中。
當所有的計算結點,都已經加入到預先設計的最小數列中,我們只需找出了這個連通圖的最小結點,就能求出最小值。
Kruskal演算法的實現過程,Kruskal演算法是通過排序的方式,找到最小結點。在開始尋找之前,需要對權重從小到大進行排序。將排序好的權重,依次加入到序列中,而當所有的結點都加入到序列中後,我們就成功找到了這個最小值,速度方面要快很多。
Kruskal演算法的時間復雜度
克魯斯卡爾(Kruskal)演算法的時間復雜度是O(ElogE),其中E是邊的數量。具體的解釋如下:
1、根據Kruskal演算法的基本思想,需要將n個節點看成n顆單節點樹,時間復雜度為O(n);
2、構造各個邊的時間復雜度為O(E);
3、將所有邊按權值排序的時間復雜度為O(ElogE);
4、處理每一條邊的時間復雜度為O(logn),總的時間復雜度為O(Elogn);
綜上所述,Kruskal演算法的總時間復雜度為O(ElogE)。
D. 這樣的數據情況什麼查找演算法效率最高,或者是比較高
我能想到的比較合適的方法有2種。
1.計算每個事件的權值,按照權值排序,然後二分查找,排序的演算法復雜的為o(nlogn) ,查找為o(logn),最多才1000個事件,對於計算機來說時間可以忽略不計。10W個事件都可以1秒出解的。至於權值的計算方法,設機號為i,路號為j,編號為 k,權值v=i*32*252+j*252+k;這樣就可以了,當然,權值的構造方法不止一種。空間需要開1000*int個
2.利用類似於trie樹(字典樹)的結構,不懂網路下,很簡單,很好用,構造樹的演算法復雜度為o(n),查找為o(1),極其霸道,會比第一種略浪費空間,最多需要32*32*252的BOOL型(實際上大多數情況下遠遠用不到),是第一種方法的128倍左右,但是我覺得還是很小的.利用動態的鏈表建樹,只需要1000*252的空間,時間和空間都很犀利。
樓主根據需要選擇吧,問題規模很小,高效的演算法的優勢體現的不明顯。
E. 一個無序的數組,有什麼高效的查找演算法
無序的序列,如果只進行極少量的查找,最快也是最簡單的演算法是從順序地掃描查找;
如果是大量地查找,先用快排排序,再用二分查找 !