這個問題有幾個點要先確認
如果知道下標的話就方便了,查詢的複雜度為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 刪除分為三種情...