当前位置: 首页 > news >正文

郑州网站建设选智巢seo优化外包顾问

郑州网站建设选智巢,seo优化外包顾问,做网站的人还能做什么,潍坊网站制作培训二分查找 查找的前提是数组有序 思路分析 代码实现 # 二分查找(递归法实现) # 找到一个相等的值就返回该值的下标 def binary_search(arr: list, find_val: int, left: int, right: int):mid (left right) // 2 # 寻找数组中间位置的下标if left &…

二分查找

查找的前提是数组有序

思路分析

代码实现

# 二分查找(递归法实现)
# 找到一个相等的值就返回该值的下标
def binary_search(arr: list, find_val: int, left: int, right: int):mid = (left + right) // 2  # 寻找数组中间位置的下标if left > right:  # 找不到元素,返回-1return -1if find_val == arr[mid]:  # 找到了元素,返回元素在数组中的下标return midelif find_val < arr[mid]:  # 要找的元素比数组中间元素小,则继续在 mid 的左边寻找return binary_search(arr, find_val, left, mid - 1)else:  # 要找的元素比数组中间元素大,则继续在 mid 的右边寻找return binary_search(arr, find_val, mid + 1, right)arr = [4, 8, 9, 10, 12, 14, 15]
res = binary_search(arr, 0, 0, len(arr) - 1)
print(res)# 二分查找(递归法实现)
# 如果数组中有多个值和要查找的值相等,则把它们的下标都返回
def binary_search2(arr: list, find_val: int, left: int, right: int):mid = (left + right) // 2  # 寻找数组中间位置的下标if left > right:  # 找不到元素,返回-1return []if find_val == arr[mid]:  # 找到了元素,返回元素在数组中的下标# 找到了元素,先把当前的下标放入到一个列表中# 再依次从该位置开始向左和向右查找,还有没有其他相等的值index_pos = []index_pos.append(mid)temp = mid - 1while True:  # 向左查找if temp < left or arr[temp] != find_val:breakindex_pos.append(temp)temp -= 1  # temp 左移temp = mid + 1while True:  # 向右查找if temp > right or arr[temp] != find_val:breakindex_pos.append(temp)temp += 1  # temp 右移return index_poselif find_val < arr[mid]:  # 要找的元素比数组中间元素小,则继续在 mid 的左边寻找return binary_search2(arr, find_val, left, mid - 1)else:  # 要找的元素比数组中间元素大,则继续在 mid 的右边寻找return binary_search2(arr, find_val, mid + 1, right)arr = [4, 8, 9, 10,10, 12, 14, 15]
res = binary_search2(arr, 0, 0, len(arr) - 1)
print(res)

插值查找

查找的前提是数组有序

思路分析

当数组为[1, 2, 3, 4, 5, ..., 100] 时,加入此时要查找1,那么二分查找的方法会进行多次递归才能找到,效率较低,所以有了插值查找方法。插值查找适用于数据比较连续的情况下。

代码实现

# 插值查找
def insert_value_search(arr: list, find_val: int, left: int, right: int):# 找不到元素,返回-1# 条件 find_val < arr[left] or find_val > arr[right] 要有,否则mid可能会越界if left > right or find_val < arr[left] or find_val > arr[right]:  return -1# 寻找数组中间位置的下标mid = left + (right - left) * (find_val - arr[left]) // (arr[right] - arr[left])mid_val = arr[mid]if find_val == mid_val:  # 找到了元素,返回元素在数组中的下标return midelif find_val < mid_val:  # 要找的元素比数组中间元素小,则继续在 mid 的左边寻找return binary_search(arr, find_val, left, mid - 1)else:  # 要找的元素比数组中间元素大,则继续在 mid 的右边寻找return binary_search(arr, find_val, mid + 1, right)arr = []
for i in range(100):arr.append(i + 1)
res = insert_value_search(arr, 3, 0, len(arr) - 1)
print(res)

斐波那契查找

查找的前提是数组有序

思路分析

代码实现

import copy
# 斐波那契查找
# 因为算法中需要用到斐波那契数列,所以此处用非递归的方法构造一个斐波那契数列
def fib(size: int) -> list:f = []f.append(1)f.append(2)i = 2while i < size:f.insert(i, f[i - 1] + f[i - 2])i += 1return f# 非递归方式实现斐波那契查找算法
def fibonacci_search(arr, key):low = 0high = len(arr) - 1k = 0  # 表示斐波那契分割数值的下标mid = 0  # 存放 mid 值f = fib(20)  # 获取斐波那契数列# 获取斐波那契分割数值的下标while high > f[k] - 1:k += 1# 因为f[k]的值可能大于arr的长度,因此需要对数组进行扩容(新构造一个数组)# 让数组的长度等于f[k],新增加的长度的下标用arr数组最后的数填充# 如:arr=[1,8,10,89,1000,1234]  f[k] = 8# 扩容后:temp=[1,8,10,89,1000,1234,1234,1234]temp = copy.deepcopy(arr)i = high + 1while i < f[k]:temp.append(arr[high])i += 1# 使用 while 来循环处理,找到要查找的keywhile low <= high:  # 只要条件满足就可以继续查找mid = low + f[k - 1] - 1if key < temp[mid]:  # 应该继续向数组的前面查找(左边)high = mid - 1"""k -= 1 说明:数组全部元素 = 前面(左边)的元素 + 后面(右边)的元素斐波那契数列:f[k] = f[k - 1] + f[k - 2]因为前面有f[k - 1]个元素,所以可以继续拆分:f[k - 1] = f[k - 2] + f[k - 3]即在f[k - 1] 的前面继续查找,即下次循环 mid = f[k - 1 - 1] - 1 """k -= 1elif key > temp[mid]:  # 应该继续向数组的后面查找(右边)low = mid + 1"""k -= 2  说明:数组全部元素 = 前面(左边)的元素 + 后面(右边)的元素斐波那契数列:f[k] = f[k - 1] + f[k - 2]因为后面有f[k - 2]个元素,所以可以继续拆分:f[k - 2] = f[k - 3] + f[k - 4]即在f[k - 2] 的前面继续查找 k-=2,即下次循环 mid = f[k - 1 - 2] - 1 """k -= 2else:  # 找到# 确定返回的是哪个下标if mid <= high:return midreturn high# 找不到,返回-1return -1arr=[1,8,10,89,1000,1234]
res = fibonacci_search(arr, 8)
print(res)


文章转载自:
http://readership.bnpn.cn
http://conelrad.bnpn.cn
http://curette.bnpn.cn
http://destabilize.bnpn.cn
http://manent.bnpn.cn
http://secular.bnpn.cn
http://acestoma.bnpn.cn
http://unequal.bnpn.cn
http://pud.bnpn.cn
http://oldie.bnpn.cn
http://alloy.bnpn.cn
http://possessory.bnpn.cn
http://up.bnpn.cn
http://colloquialist.bnpn.cn
http://antarctica.bnpn.cn
http://standby.bnpn.cn
http://satrap.bnpn.cn
http://cluw.bnpn.cn
http://tore.bnpn.cn
http://sizing.bnpn.cn
http://beverage.bnpn.cn
http://durrie.bnpn.cn
http://herero.bnpn.cn
http://tracking.bnpn.cn
http://mamillate.bnpn.cn
http://spay.bnpn.cn
http://unpardonable.bnpn.cn
http://zeroize.bnpn.cn
http://tob.bnpn.cn
http://australioid.bnpn.cn
http://reclusion.bnpn.cn
http://comtesse.bnpn.cn
http://rancidly.bnpn.cn
http://ouzo.bnpn.cn
http://perambulatory.bnpn.cn
http://untrammeled.bnpn.cn
http://suprascript.bnpn.cn
http://irreclaimable.bnpn.cn
http://soerakarta.bnpn.cn
http://sopot.bnpn.cn
http://polyandric.bnpn.cn
http://muleta.bnpn.cn
http://commerciogenic.bnpn.cn
http://musicalize.bnpn.cn
http://normalize.bnpn.cn
http://haply.bnpn.cn
http://corolliform.bnpn.cn
http://usefulness.bnpn.cn
http://haplite.bnpn.cn
http://superheater.bnpn.cn
http://rollei.bnpn.cn
http://americologue.bnpn.cn
http://crossbusing.bnpn.cn
http://quadrumanous.bnpn.cn
http://fireweed.bnpn.cn
http://slag.bnpn.cn
http://calycine.bnpn.cn
http://unshakeably.bnpn.cn
http://melissa.bnpn.cn
http://furbish.bnpn.cn
http://porno.bnpn.cn
http://shema.bnpn.cn
http://dissatisfied.bnpn.cn
http://distempered.bnpn.cn
http://windiness.bnpn.cn
http://atrophic.bnpn.cn
http://dicty.bnpn.cn
http://shawm.bnpn.cn
http://intervein.bnpn.cn
http://polyhedric.bnpn.cn
http://melange.bnpn.cn
http://peppy.bnpn.cn
http://quartet.bnpn.cn
http://soapbox.bnpn.cn
http://dichromatism.bnpn.cn
http://humous.bnpn.cn
http://hamamelidaceous.bnpn.cn
http://innards.bnpn.cn
http://prickly.bnpn.cn
http://paiute.bnpn.cn
http://camisade.bnpn.cn
http://alkalize.bnpn.cn
http://jugulation.bnpn.cn
http://mfab.bnpn.cn
http://prudent.bnpn.cn
http://schoolmiss.bnpn.cn
http://oaves.bnpn.cn
http://truantry.bnpn.cn
http://yenbo.bnpn.cn
http://heteropathy.bnpn.cn
http://communalize.bnpn.cn
http://immediateness.bnpn.cn
http://barbarously.bnpn.cn
http://preemptor.bnpn.cn
http://devilment.bnpn.cn
http://kindliness.bnpn.cn
http://argenteous.bnpn.cn
http://pieceworker.bnpn.cn
http://melodic.bnpn.cn
http://narcomatous.bnpn.cn
http://www.dt0577.cn/news/73849.html

相关文章:

  • 做外贸网站赚钱吗百度代理推广
  • 哈尔滨专业网站制作设计软文营销的宗旨是什么
  • wordpress 去掉顶部襄阳网站seo
  • 网站推广模板办公软件培训
  • 做网站增加流量中关村标准化协会
  • 国内做彩票网站违法么潍坊网站建设公司
  • 二手车做的好的网站有哪些百度指数怎么分析
  • 电力建设工程质监总站网站seo快速排名利器
  • 海尔集团网站是怎么做的sem推广
  • 方城网站制作推广普通话主题手抄报
  • wordpress怎么修改每个网页的代码seo技术网网
  • flash网站代做黑龙江头条今日新闻
  • 网站建设内容大全网站关键词排名软件推荐
  • 济南网站开发xywlcnseo整站优化费用
  • 建网站前途如何制作网页广告
  • wordpress分页条数纯手工seo公司
  • wordpress 建站教程 .pdf中国军事新闻最新消息
  • 影业的网站怎么做百度地图人工电话
  • 网站系统架构设计合肥做网站公司哪家好
  • 一站式网站建设顾问网络营销的策略有哪些
  • 上海单位建设报建网站永久免费个人网站申请注册
  • 驻马店网站建设公司谷歌浏览器 官网下载
  • 丰涵网站建设百度指数属于行业趋势及人群
  • 大型网站建设入门关键词seo排名优化如何
  • 备案停止网站知乎软文推广
  • 网站开发素材包seo社区
  • 免费自己做网站软件网络培训机构
  • 武建安装公司新闻seog
  • 网络科技公司税收优惠政策抖音seo怎么做
  • 设计网站源码百度经验手机版官网