導航:首頁 > 源碼編譯 > 查詢演算法

查詢演算法

發布時間:2022-02-27 20:02:27

1. 幾種常見的查找演算法之比較

二分法平均查找效率是O(logn),但是需要數組是排序的。如果沒有排過序,就只好先用O(nlogn)的預處理為它排個序了。而且它的插入比較困難,經常需要移動整個數組,所以動態的情況下比較慢。

哈希查找理想的插入和查找效率是O(1),但條件是需要找到一個良好的散列函數,使得分配較為平均。另外,哈希表需要較大的空間,至少要比O(n)大幾倍,否則產生沖突的概率很高。

二叉排序樹查找也是O(logn)的,關鍵是插入值時需要做一些處理使得它較為平衡(否則容易出現輕重的不平衡,查找效率最壞會降到O(n)),而且寫起來稍微麻煩一些,具體的演算法你可以隨便找一本介紹數據結構的書看看。當然,如果你用的是c語言,直接利用它的庫類型map、multimap就可以了,它是用紅黑樹實現的,理論上插入、查找時間都是O(logn),很方便,不過一般會比自己實現的二叉平衡樹稍微慢一些。

2. 二分法查找演算法

哪裡查不到?我復制你的程序,輸入字元c,結果顯示「要查找的字元是第2個」,可以找到

3. 順序查找演算法

#include <stdio.h>
#include <stdlib.h>

#define MAX_LENGTH 100
typedef int KeyType;

typedef struct {
KeyType *elem;
int length;
}SSTable; //順序表的存儲結構

/*
此演算法比第二個演算法多了一個判定i是否出界的流程,對於查找數目較少的情況,
二者查找時間相差不大,對於存在大量數據時,該演算法的主要查找時間消耗再判
定是否出界上,所以第二個演算法明顯比第一個演算法好,唯一增加的就是一個「哨兵」
數據。
int Search_Seq(SSTable ST, KeyType key){
int i;
for(i=1; i<=ST.length && ST.elem[i] != key; i++ )
;
if(i<=ST.length)
return i;
else
return 0;
}
*/

int Search_Seq(SSTable ST, KeyType key){
int i;
ST.elem[0] = key; //「哨兵」,如果順序表中不存在要查找的數據的話,則查找指針必定指向該哨兵
for(i = ST.length; ST.elem[i] != key; i--)
;
return i; //找到的話,則i != 0,否則i = 0
}

void main()
{
int i, key;
SSTable T;
T.elem = (KeyType *)malloc(sizeof(KeyType));
printf("How Many Entries Do You Want input\n");
scanf("%d", &T.length);
for(i=1; i<=T.length; i++){
printf("Please input the %dth entries \n", i);
scanf("%d", &T.elem[i]);
}
for (i=1; i<=T.length; i++)
printf("%5d",T.elem[i]); //顯示已經輸入的所有數據
printf("\nPlease input the data you want to search\n");
scanf("%d", &key);
i = Search_Seq(T,key);
printf("the search data is locate the %dth(0 indicate can not find)\n",i);
}

4. 查找演算法有幾種,怎麼編程

大概有順序查找,二分查找,堆查找,二叉樹查找,散列查找等,老兄自己上網看看行嗎?我實在沒時間給你寫代碼,找本數據結構看看吧

5. java中哪種查找演算法最有效率

這個問題不能一概而論


如果有一種演算法優於其他演算法,那麼其他演算法就不存在了不是?


所以,要看在什麼情況下,那麼有這么幾個方面

  1. 背景數量級和匹配數量級,就是說你要在多少數據中查找多少數據。

  2. 背景數據差異度,背景數據如果包羅萬象,或者都是數字,那麼選擇的演算法區別就大了

  3. 背景數據整理程度。很多人在選擇查找演算法時不考慮這個,但是這在實際應用中很有異議,比如數據都排序過和沒有排序過,可想而知演算法的選擇有很大的不同。

  4. 匹配方式,是用「等於」 這種方式匹配,還是用like這種方式匹配,也對演算法有很大影響。

6. 最好的查找演算法是什麼

沒有最好只有更好
對不同特徵的數據也有不同的查找演算法,所有的查找演算法都是針對某一特徵的數據進行優化的,比如用散列表查找很快的數據用二分發就不一定快,散列表用不同的哈希演算法查找性能也大不相同。

7. 查找演算法的作用

查找就是在一個數據集合里查找到你需要的數據,查找演算法就是在查找過程中使用的演算法。查找演算法有好多,最基礎的就是線性表查找。
因為提到了演算法,所以需要注意的是時間復雜度跟空間復雜度,進而涉及到數據的存儲方式,比如數組,鏈表,矩陣,樹,圖等等數據結構,這些數據結構可以幫助你降低演算法的復雜度。
如果有興趣,隨便找本數據結構書翻翻,裡面或多或少都會有講解。用關鍵字標識一個數據元素,查找時根據給定的某個值,在表中確定一個關鍵字的值等於給定值的記錄或數據元素。在計算機中進行查找的方法是根據表中的記錄的組織結構確定的。順序查找也稱為線形查找,從數據結構線形表的一端開始,順序掃描,依次將掃描到的結點關鍵字與給定值k相比較,若相等則表示查找成功;若掃描結束仍沒有找到關鍵字等於k的結點,表示查找失敗。二分查找要求線形表中的結點按關鍵字值升序或降序排列,用給定值k先與中間結點的關鍵字比較,中間結點把線形表分成兩個子表,若相等則查找成功;若不相等,再根據k與該中間結點關鍵字的比較結果確定下一步查找哪個子表,這樣遞歸進行,直到查找到或查找結束發現表中沒有這樣的結點。分塊查找也稱為索引查找,把線形分成若干塊,在每一塊中的數據元素的存儲順序是任意的,但要求塊與塊之間須按關鍵字值的大小有序排列,還要建立一個按關鍵字值遞增順序排列的索引表,索引表中的一項對應線形表中的一塊,

8. 高效率排序查找演算法

(1) 若n較小(n <= 50),則可以採用直接插入排序或直接選擇排序。由於直接插入排序所需的記錄移動操作較直接選擇排序多,因而當記錄本身信息量較大時,用直接選擇排序較好。
(2) 若文件的初始狀態已按關鍵字基本有序,則選用直接插入或冒泡排序為宜。
(3) 若n較大,則應採用時間復雜度為O(nlog2n)的排序方法:快速排序、堆排序或歸並排序。
快速排序是目前基於比較的內部排序法中被認為是最好的方法。

9. 數據結構中有哪些查找演算法

和二分查找性能接近的:既然可以二分查找,那麼關鍵字肯定可以滿足全序關系。那麼可以用二叉查找樹,一般的就是平攤O(logn),最壞O(n)。如果用平衡樹,如AVL,Treap,Splay等等,可以做到保持O(logn)的界。
比二分查找性能更優的:大概只有Hash了吧。如果Hash函數設計的好,基本可以認為是O(1)的。這個你最好系統學習一下,尤其是字元串的Hash函數。

閱讀全文

與查詢演算法相關的資料

熱點內容
關於加密貨幣使用分布的圖表 瀏覽:329
王的命令哪個app好看 瀏覽:765
快樂大本營比臉app叫什麼 瀏覽:681
wt是什麼伺服器 瀏覽:127
首頁indexphp模板 瀏覽:343
java7並發編程實戰手冊pdf 瀏覽:342
windows列印機編程 瀏覽:236
怎麼用紙做解壓小方塊 瀏覽:264
8253的編程方式 瀏覽:140
雲伺服器無法連接到當前網路 瀏覽:469
香港伺服器什麼時候租用 瀏覽:600
福州高精密三坐標測量儀編程 瀏覽:711
變數的作用域編譯預處理 瀏覽:179
程序員買台式機好還是筆記本 瀏覽:812
安卓叮當貓年卡怎麼樣 瀏覽:428
自學旅遊英語用什麼app 瀏覽:155
linux埠開放命令 瀏覽:681
單片機小汽車 瀏覽:953
思考與決策pdf 瀏覽:624
ted加密貨幣 瀏覽:721