Java 查詢演算法

2021-07-03 16:28:05 字數 2027 閱讀 2271

這個問題有幾個點要先確認

如果知道下標的話就方便了,查詢的複雜度為1.

如果是針對值的查詢,那麼順序遍歷是o(n),

二分查詢

使用二分查詢的話可以減少時間複雜度為:o(logn)

/**

* 二分查詢又稱折半查詢,它是一種效率較高的查詢方法。

【二分查詢要求】:1.必須採用順序儲存結構 2.必須按關鍵字大小有序排列。

*@author wzj

* */

public

class

binarysearch ;

system.out.println(binarysearch(src, 3));

system.out.println(binarysearch(src,3,0,src.length-1));

}/**

* * 二分查詢演算法 * *

* *@param srcarray

* 有序陣列 *

*@param des

* 查詢元素 *

*@return des的陣列下標,沒找到返回-1

*/public

static

intbinarysearch(int srcarray, int des)else

if(des 1;

}else

}return -1;

}/**

*二分查詢特定整數在整型陣列中的位置(遞迴)

*@paramdataset

*@paramdata

*@parambeginindex

*@paramendindex

*@returnindex

*/public

static

intbinarysearch(int dataset,int data,int beginindex,int endindex)

if(data return binarysearch(dataset,data,beginindex,midindex-1);

}else

if(data>dataset[midindex])else

} }

但是插入因為會涉及當前節點後的所有值得移動,一次,其時間複雜度為o(n) + o(log n)

只能從頭節點遍歷, 查詢的複雜度是o(n)

插入或者是刪除,因為只需要移動指標,時間複雜度為o(1) + o(n)

樹的查詢,主要是先序遍歷,中序等遍歷方式。

插入和刪除,還是比較快

常用的會有如下的衍生方式:

二叉樹二叉樹的構建:

class binarynode

public

void

add(int

value)else

}elseelse}}

// 中序查詢

public binarynode get(int

value)

if(this.value > value)

if(this.value

< value)

return

null;

}}

插入的複雜度本身並不高,只是簡單的節點新增。但是因為尋找插入位置的查詢操作的複雜度跟樹的高度相關為logn,極差的情況下可能接近於線性查詢。

平衡二叉樹

平衡二叉樹是儘量減少數高的二叉樹,其演算法中增加了左旋和右旋的操作。插入複雜度會高一些,但是會得到不錯的查詢效能。

b+tree

學習自這裡

這個就要說一下上面說的跟磁碟i/o相關的,因此為了減少磁碟i/o。可以利用磁碟的預讀特性,一次提取大概相當於一頁大小的節點到記憶體中。

先要說一下b-tree.

乙個平衡的m-way查詢數,其要滿足如下的條件:

b+tree

與上面的差別是:

查詢跟二叉樹比較像,因為插入的時候已經是相當於二分演算法了,所以只需要,遞迴找到就可以了。

Java查詢演算法

1 線性查詢演算法 這個就是典型的線性查詢,從頭到尾 查詢資料 我們是根據什麼來查詢呢?我們是根據值來查詢,返回她的所有值 public int search long value 2 二分法查詢演算法 二分法查詢前提是你這個陣列是有序的 比如說一組陣列是 1,3,4,5,7,9,10 二分法查詢是...

查詢演算法Java版

順序查詢演算法 1.演算法描述 順序比較即可。2.平均查詢長度 n 1 2,其中n為表長。3.演算法實現 省略4.優化思想 根據經驗,目前被查到越多的元素,將來可能被查到的可能性也越大。所以可以考慮,每次查詢到乙個元素後,將它和直接前驅交換位置。如果上述的經驗從概率上來講是成立的,則可以加快順序查詢...

Java 常用查詢演算法

二叉樹 左子樹上的所有節點值均小於根節點值,右子樹上的所有節點值均不小於根節點值,左右子樹也滿足上述兩個條件。插入過程如下圖 比較4與7,4 7,再比較4與7的左子樹6,4 6,比較4與6的左子樹3,4 3,比較4與3的右子樹,為空,插入4。字串作為key比較可以用compareto 刪除分為三種情...