ÀÖÓãµç¾º

½ÌÓýÐÐÒµA¹ÉIPOµÚÒ»¹É£¨¹ÉƱ´úÂë 003032£©

È«¹ú×Éѯ/ͶËßÈÈÏߣº400-618-4000

²éÕÒËã·¨ÊÇʲô£¿²éÕÒËã·¨ÈçºÎʵÏÖ

¸üÐÂʱ¼ä:2023Äê04ÔÂ28ÈÕ16ʱ51·Ö À´Ô´:ÀÖÓãµç¾º ä¯ÀÀ´ÎÊý:

²éÕÒËã·¨Ò²¿ÉÒÔ½ÐËÑË÷Ëã·¨¡£²éÕÒËã·¨¾ÍÊÇ´ÓÒ»¸öÓÐÐòÊýÁÐÖÐÕÒ³öÒ»¸öÌØ¶¨µÄÊý£¬³£ÓÃÓÚÅжÏij¸öÊýÊÇ·ñÔÚÊýÁÐÖУ¬»òÕßij¸öÊýÔÚÊýÁÐÖеÄλÖá£ÔÚ¼ÆËã»úÓ¦ÓÃÖУ¬²éÕÒÊdz£ÓõĻù±¾ÔËË㣬ÊÇËã·¨µÄÖØÒª×é³É²¿·Ö¡£ÏÂÃæÀ´¿´Ëã·¨ÖеÄ˳Ðò²éÕÒ¡¢¶þ·Ö²éÕÒ¡¢²åÖµ²éÕҺͷֿé²éÕÒ£¬½éÉÜËûÃǵÄʵÏÖ·½·¨¡£

˳Ðò²éÕÒ

˳Ðò²éÕÒ(Ò²±»³ÆÎªÏßÐÔ²éÕÒ)ÊÇ×î¼òµ¥¡¢×îÖ±½ÓµÄ²éÕÒËã·¨¡£¹ËÃû˼Ò壬˳Ðò²éÕÒ¾ÍÊǽ«ÊýÁдÓÍ·µ½Î²°´ÕÕ˳Ðò²éÕÒÒ»±é£¬ÊÇ×îÈÝÒ×Àí½âµÄËã·¨¡£

¾ÙÀý£ºÎÒÃÇÒª´ÓÏÂÃæÊýÁÐÖÐÕÒµ½“1”Õâ¸öÔªËØ¡£

˳Ðò²éÕÒ

ÎÒÃÇÒª´ÓÏÂÃæÊýÁÐÖÐÕÒµ½“1”Õâ¸öÔªËØ£¬´ÓµÚÒ»¸öÔªËØ¿ªÊ¼±éÀú£¬ÖðÒ»±È½Ï¡£

˳Ðò²éÕÒ

ÎÒÃÇÒª´ÓÏÂÃæÊýÁÐÖÐÕÒµ½“1”Õâ¸öÔªËØ£¬´ÓµÚÒ»¸öÔªËØ¿ªÊ¼±éÀú£¬ÖðÒ»±È½Ï£¬Ö±µ½ÕÒµ½(»ò±éÀúÍê³É)Ϊֹ¡£

1682663083348_43.png

def sequentialSearch(ilist, key):
    iLen = len(iList)
    for i in range(iLen):
        if ilist[i] == key:
          return i
    return -1

˳²éÕÒµÄʱ¼ä¸´ÔÓ¶ÈO(n)£¬¿Õ¼ä¸´ÔÓ¶È0(1)¡£

¶þ·Ö²éÕÒ

(Binary Search)ÊÇÓ¦ÓÃÔÚÓÐÐòÊý¾ÝÖеÄ£¬Ê®·Ö¸ßЧµÄ²éÕÒËã·¨¡£Èç¹ûÊý¾ÝÊÇÎÞÐòµÄ£¬ÎÒÃÇÏÈÒª½«Êý¾Ý´ÓСµ½´óÅÅÐò¡£ÆäÔ­ÀíÊDZȽϴý²éÊý¾ÝÓëÊý×éÖÐÖµµÄÊý¾ÝµÄ´óС£¬Èç¹ûµÈÓÚÖмäÖµÔòÖ±½Ó·µ»Ø£¬Èç¹û´óÓÚÖмäÖµ£¬¾ÍÖ»ÔÚºó°ë²¿·Ö²éÕÒ£¬Èç¹ûСÓÚÖмäÖµ£¬¾ÍÔÚǰ°ë²¿·Ö²éÕÒ£¬Èç´ËÍù¸´£¬Ö±µ½ÕÒµ½Êý¾Ý£¬»òÊ£ÏÂÒ»¸öÔªËØ¡£

¶þ·Ö²éÕÒ´úÂëʵÏÖ

def binary_search(iList, key):
    iLen = len(iList)
    left = 0
    right = iLen -1
    while right - left > 1:
        mid = (left + right) // 2
        if key < ilist[mid]:
          right = mid
        elif key > ilist[mid]:
            left = mid
        else:
          return mid
    if key == iList[left]:
        return left
    elif key == ilist[right]:
        return right
    else:
      return -1

¶þ·Ö²éÕÒµÄʱ¼ä¸´ÔÓ¶ÈÊÇo(logn)

¢ÙÔÚn¸öÔªËØÖÐѰÕÒ→¢ÚÔÚn/2¸öÔªËØÖÐѰÕÒ→¢ÛÔÚn/4¸öÔªËØÖÐѰÕÒ….ÔÚ1¸öÔªËØÖÐѰÕÒ

n¾­¹ý¼¸´Î“2”=1→log2n=0(logn)

ËÑË÷¹ý³Ì´ÓÊý×éµÄÖмäÔªËØ¿ªÊ¼£¬Èç¹ûÖмäÔªËØÕýºÃÊÇÒª²éÕÒµÄÔªËØ£¬ÔòËÑË÷¹ý³Ì½áÊø¡£Èç¹ûÄ³Ò»ÌØ¶¨ÔªËØ´óÓÚ»òÕßСÓÚÖмäÔªËØ£¬ÔòÔÚÊý×é´óÓÚ»òСÓÚÖмäÔªËØµÄÄÇÒ»°ëÖвéÕÒ£¬¶øÇÒ¸ú¿ªÊ¼Ò»Ñù´ÓÖмäÔªËØ¿ªÊ¼±È½Ï¡£

Èç¹ûÔÚijһ²½ÖèÊý×éΪ¿Õ£¬Ôò´ú±íÕÒ²»µ½¡£ÕâÖÖËÑË÷Ë㷨ÿһ´Î±È½Ï¶¼Ê¹ËÑË÷·¶Î§ËõСһ°ë¡£

¶þ·Ö²éÕÒµÄʱ¼ä¸´ÔÓ¶È£º0(logn)

²åÖµ²éÕÒ

²åÖµ²éÕÒ(lnterpolation Search)ÊǶÔʵÀýµÄ¶þ·Ö²éÕҵĸĽø£¬ÆäÓ¦Óó¡¾°ÊÇÅÅÐòÊý×éÖеÄÖµÊǾùÔÈ·Ö²¼µÄ¡£¶þ·Ö²éÕÒ×ÜÊǵ½ÖмäÔªËØ×ö×óÓÒ»®·Ö£¬¶ø²åÖµËÑË÷»á¸ù¾ÝÕýÔÚËÑË÷µÄKeyµÄ´óСÀ´È·¶¨»®·ÖµÄλÖÃÀýÈ磬Èç¹ûKey¸ü½Ó½ü×îºóÒ»¸öÔªËØ£¬Ôò²åÖµËÑË÷»á´Óºó°ë²¿·Ö¿ªÊ¼½øÐÐÊý¾Ý»®·Ö¡£

Mid =L + (R-L) x (target–data[L]) / data[R]-data[L]

²åÖµ²éÕÒ¾ÙÀý£º

1682664277549_44.png

Mid = L +(R-L)(target- data[L]) / data[R]-data[L]= 0+(7-0) ×(11-1)÷(14-1) =7× 10÷13 = 5.38

²åÖµ²éÕÒ

²åÖµ²éÕÒ´úÂë

def interpolation_search(ilist, key):
    iLen = len(iList)
    left = 0
    right = iLen - 1

    while right - left > 1:
        mid = left + (key -iList[left]) * (right - left) // (iList[right] - iList[left])
        if mid == left:
            mid +=1  # µ±ilist[right]ºÍilist[left]Ïà²îÌ«´ó,ÓпÉÄܵ¼ÖÂmidÒ»Ö±µÈÓÚleftÏÝÈëËÀÑ­»·
        if key < iList[mid]:
            right = mid
        elif key > ilist[mid]:
            left = mid
        else:
          return mid
    if key == ilist[left]:
        return left
    elif key == iList[right]:
        return right
    else:
        return -1

¶þ·Ö²éÕҵĸĽø£¬ÊʺϾùÔÈ·Ö²¼µÄÓÐÐòÊý×é²åÖµ²éÕÒËã·¨µÄ¸´ÔÓ¶ÈÊÇ0(loglogn)¡£

·Ö¿é²éÕÒ

·Ö¿é²éÕÒºÍÒÔÉϼ¸ÖÖ²éÕÒ·½Ê½ÓÐËù²»Í¬£ºË³Ðò²éÕÒµÄÊýÁÐÊÇ¿ÉÒÔÎÞÐòµÄ;¶þ·Ö·¨²éÕҺͲåÈë²éÕÒµÄÊýÁбØÐëÊÇÓÐÐòµÄ;·Ö¿é²éÕÒ½éÓÚÁ½ÕßÖ®¼ä£¬ÐèÒª¿éÓÐÐò£¬ÔªËØ¿ÉÒÔÎÞÐò¡£

·Ö¿é²éÕÒ£¬ÏȰ´ÕÕÒ»¶¨µÄȡֵ·¶Î§½«ÊýÁзֳÉÊý¿é¡£¿éÄÚµÄÔªËØÊÇ¿ÉÒÔÎÞÐòµÄ£¬µ«¿é±ØÐëÊÇÓÐÐòµÄ¡£Ëùν¿éÓÐÐò£¬¾ÍÊÇ´¦ÓÚºóÃæÎ»ÖõĿéÖеÄ×îÐ¡ÔªËØ¶¼Òª±ÈÇ°ÃæÎ»ÖÿéÖеÄ×î´óÔªËØ´ó¡£

1682665601055_46.png

·Ö¿é²éÕÒ²éÕÒ¹ý³Ì£º

¢ÙÈ·¶¨´ý²é¼Ç¼ËùÔÚ¿é(˳Ðò»òÕÛ°ë²éÕÒ)

¢ÚÔÚ¿éÄÚ²éÕÒ(˳Ðò²éÕÒ)

iList = randomList(20)
indexList = [[250, 0], [500, 0], [750, 0], [1000, 0]]

def divideBlock():
    global ilist, indexlist
    sortList = []
    for key in indexList:
        subList = [i for iin iList if i<key[e]]#ÁбíÍÆµ¼£¬Ð¡ÓÚkey[e]µÄµ¥¶À·Ö¿é
        key[1] = len(subList)
        sortList += subList
        iList=list£¨set£¨iList£©- set£¨subList£©£©#¹ýÂ˵ôÒѾ­¼ÓÈëµ½subListÖеÄÔªËØ
    ilist = sortlist
    return indexList

def blockSearch(iList, key, indexList):
    left = 0 #ËÑË÷ÊýÁÐµÄÆðʼµãË÷Òý
    right=e#ËÑË÷ÊýÁеÄÖÕµãË÷Òý
    for indexInfo in indexList:
        if(left+right)<len(iList):
          left += right
        right += indexInfo[1]
        if key < indexInfo[0]:
            break
    for i in range(left, right):
        if key == ilist[i]:
            return i
    return -1

0 ·ÖÏíµ½£º
ºÍÎÒÃÇÔÚÏß½»Ì¸£¡
¡¾ÍøÕ¾µØÍ¼¡¿¡¾sitemap¡¿