首页 > 编程知识 正文

常用的算法表示形式有,搜索引擎常用的两种搜索法

时间:2023-05-06 00:26:43 阅读:141754 作者:2353

搜索算法序贯搜索快速搜索二分搜索插值搜索跳跃搜索散列搜索

o(n ) intorder_search(vectorintdata,int target ) intn=(int ) data.size ); for(intI=0; i n; I ) target==data [ I ] ) return i; }快速搜索平均o(n ),最坏o ) n^2),数组为第k 1大元素(下标k-1 ) intquick_search ) vectorintdata,int l,int r,int key ) ) int l int temp=data[l]; while(Ij ) ) while(Ijdata[j]=temp )--j; data[i]=data[j]; wile(Ijdata[I]=temp ) I; data[j]=data[i]; }data[i]=temp; if(Ikey ) quick_search(data,i 1,r,key ); ELSEif(Ikey ) quick _ search (data,l,i-1,key ); else return data[i]; )二分搜索序列有序,用于确定时间复杂度o(logn )、int binary _ search (vectorintdata,int target ) {int l=0; intr=(int ) data.size ) )-1; wile(L=R ) intmid=L ) R-L )/2; 数据[ mid ]目标(if ) l=mid 1; ELSEif(data[mid]target ) r=mid - 1; else return l; }return -1; }内插搜索序列是有序的,其中时间复杂度o(Loglogn ) intintelpolation _ search (vectorintdata,int target ) {int l=0; intr=(int ) data.size ) )-1; while(L=R ) (intpos=L ) target-data [ l ]/(data [ r ]-data [ l ] ) ) (R-L ); 数据[ mid ]目标(if ) l=mid 1; ELSEif(data[mid]target ) r=mid - 1; else return l; }return -1; }跳查探索在n个要素排序要素中,按n/m的步骤进行探索。 0、n/m、2n/m…如果发现大于第一个目标,遍历m-1次时间复杂度o (根编号n ),n/m-1在m=sqrt(n ) n时为最小值intjump_seert int i=step; while(In ) if ) data[I]target ) break; i =step; (I=min(I,n ); for(intj=I-1; i=i - step; -I () if ) data[j]==target ) return j; } return -1; ) } hash搜索无序无重复因素,时间复杂度o(1) inthash_search ) vectorintv,int target ) { mapint,int mp; for(intI=0; i v.size (; I ) MP.insert(pairint,int ) v[I],I ); (if ) MP.find(target )!=mp.end () return mp[target]; else return -1; }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。