資料結構和演算法 2 基礎查詢演算法

2022-03-28 13:37:57 字數 3009 閱讀 2074

有兩種對列表內資料進行查詢的方法:順序查詢和二叉查詢。當資料項在列表內隨機排列的時候可以使用順序查詢,而當資料項在列表內有序排列的時候則會用到二叉查詢。

順序查詢

二叉查詢

using

system;

using

system.collections.generic;

using

system.linq;

using

system.text;

using

system.threading.tasks;

namespace

資料結構和演算法

;

static

void

main()

intsearchnumber;

console.writeline(

"輸入乙個數字:");

當要查詢的資料元素就在資料集合的開始處時就會產生最快速的成功查詢。通過找到資料項後把它移動到資料集合開始處的方法可以確保成功定位資料項。

這種策略的含義就是通過把頻繁查詢的資料項放在資料集合開始處的方法來最小化查詢的次數。最終的結果就是所有最頻繁查詢的資料項都會被放置在資料集合的開始部分。這是自組織的乙個例項,這是因為資料集合不是在程式執行之前由程式設計師組織的,而是在程式執行期間由程式自身組織的。

既然要查詢的資料大概會遵循「 80–20」規則,這使得允許資料進行組織變得有意義了。其中,「 80-20」原則意味著在資料集合上 80%的查詢操作都是為了查詢到資料集合內 20%的資料。自組織將最終把 20%的資料放在資料集合的開始部分,這樣順序查詢就可以快速地找到它們了。

像這樣的概率分布被稱為是帕累託分布,它是以 19 世紀後期通過研究收入和財富的擴散而發現這類概率分布的科學家 vilfredo pareto 的名字命名的。

static

int seqsearch(int

svalue)

return -1

; }

static

void swap(ref

int item1, ref

intitem2)

陣列必須為順序的

using

system;

using

system.collections.generic;

using

system.linq;

using

system.text;

using

system.threading.tasks;

namespace

資料結構和演算法

;

public

static

int binsearch(int

value)

,upperbound:,mid:

", lowerbound, upperbound, mid));

//intarr[mid]中間值

同迭代演算法相比,遞迴二叉查詢演算法的主要問題是它的效率。當用這兩種演算法對含有 1000 個元素的陣列進行排序的時候,遞迴演算法始終比迭代演算法慢了 10 倍。

當然,選擇遞迴演算法常常是由於效率以外的其他原因,但是應該記住在任何實現遞迴演算法的時候還應該尋找一種迭代的解決方案,這樣便於比較兩種演算法的效率。

array 類所擁有的內建的二叉查詢方法

當內建的二叉查詢方法與使用者定製的方法進行比較的時候,內建方法始終比使用者定製方法執行速度快 10 倍。

這沒什麼好驚訝的。如果按照完全相同的方式使用上述兩種方法,那麼應該始終優先選擇內建的資料結構或演算法而非使用者定製的。

public

readonly

static

int intarr = new

int ;

///

///遞迴二叉(二分)查詢

/// ///

查詢的值

///最小的索引

///最大的索引

資料結構和演算法 2 基礎查詢演算法

有兩種對列表內資料進行查詢的方法 順序查詢和二叉查詢。當資料項在列表內隨機排列的時候可以使用順序查詢,而當資料項在列表內有序排列的時候則會用到二叉查詢。順序查詢 二叉查詢 using system using system.collections.generic using system.linq ...

資料結構和演算法基礎

最近在學習王爭老師的資料結構和演算法之美課程,課程的很多知識之前並未了解。在此做簡單記錄。廣義上,資料結構是一組資料的儲存結構,演算法是操作這組資料的方法。狹義上,是指某些著名的資料結構和演算法,比如堆 棧 佇列 二分查詢等。資料結構和演算法是相輔相成的。資料結構是為演算法服務的,演算法要作用在特定...

資料結構(2) 演算法和演算法分析

資料結構與演算法之間存在著本質聯絡。演算法的定義及特性 演算法是為了解決某類為而規定的乙個有限長的操作序列。乙個演算法必須滿足一下五個重要特性。演算法的時間複雜度 一般情況下,演算法中基本語句重複執行的次數是問題規模n的某個函式f n 演算法的時間量度記作t n o f n 它表示雖問題規模n的增大...