zoukankan      html  css  js  c++  java
  • 每天一个算法

    二分法分析

    目的:在一个有序的列表nums,判断x是否在这个列表里

    一、问题分析(研究需要解决的问题)

    1.怎么样最快的判断出x是否在列表里

    二、程序规格说明说:确定程序做什么

    1.利用中间值比较x,逐步比较,缩小空间

    2.x代表要判断的值,nuns代表列表

    3.low象限代表最低值,high象限代表最高值

    三、设计:用伪代码编写算法(写成方法)

    1、创建search方法,可输入x,nums

    2、创建区域最低值low=0,创建区域高值high

    3、创建条件循环,当low小于high时,进入循环

    4、利用low+high//2获取中间值

    5、判断x与中间值(nums[mid])是否相等,相等则返回min,中间值大于x,low则取min+1,中间值小于x,high则取中间值,再进入循环判断

    6、如果low取到最大值且等于x时返回x(可能x取的值就是最大的值,循环不会判断到)

    7、如果都没有,则返回-1表示列表里没有x

    四、将设计语言翻译成编译语言

    1.def search(x,nums):

    2.low=0,high=len(nums)-1

    3.while low<high:

    4.mid=(low+high)//2 

    5.if x ==nums(mid):   return mid;     elif x>mid: low=low+1;    else: high=mid

    6.if nums(low)==x: return low

    7.return -1

    (递归思想)反转字符串:

    目的:反转输入的字符串

    一、问题分析

    1.利用切片的方法分割字符串

    2.利用递归不断切字符串

    3.注意死循环

    二、规格说明说

    s:字符串

    reverse:方法名称

    三、设计伪代码

    1.创建方法

    2.判断字符串是否为空,如为空返回字符串

    3.递归切字符串并返回

    四、编程语言翻译代码 

    def reverse(s):

      if s=="":

        return s

      else:

        return reverse(s[1:])+s[0]

    (递归思想)二分法:

    目的:利用递归思想简化二分法算法

    规格说明说:

    1.二分法算法 :利用中间值与查找数比较,并逐渐缩小范围,判断数是否存在

    2.递归:找出中间值mid对比x,相等返回mid, 如果小于以中间值为点向下切片min_nums=nums[0:mid],大于max_nums=nums[mid+1:high]

    3.当low+high//2==0和nums[low+high]==x时,返回1,否则返回-1

    伪代码:

    创建函数search,可输入值x,nums

    得到最低数值low,得到最高数值high,算出中间数值mid,

    找出中间值mid对比x,相等返回mid, 如果小于以中间值为点向下切片min_nums=nums[0:mid],大于max_nums=nums[mid:high]

    """利用递归思想,简化二分法"""
    def Seach(x,nums):
    low=0
    high=len(nums)-1
    mid = (low + high) // 2
    if mid ==0:
    return -1
    item=nums[mid]
    if x==item:
    return 1
    elif x<item:
    num=nums[0:mid]
    return Seach(x,num)
    elif x>item:
    num=nums[mid+1:high]
    return Seach(x,num)

    证明这个想法时错误的

    正确的如下:

    def recBinSearch(x, nums, low, high):

    if low > high: return -1

    mid = (low + high) // 2 item = nums[mid]
    if item == x:

    return mid elif x < item:

    # No place left to look, return -1

    # Found it! Return the index

    # Look in lower half return recBinSearch(x, nums, low, mid-1)

    else: # Look in upper half return recBinSearch(x, nums, mid+1, high)

     

  • 相关阅读:
    淘淘商城之商城简介
    TCP输出和UDP输出
    缓冲区大小及限制
    mysql创建数据库指定编码格式
    20191128 Spring Boot官方文档学习(10)
    20191128 Spring Boot官方文档学习(9.11-9.17)
    20191128 Spring Boot官方文档学习(9.10)
    20191128 Spring Boot官方文档学习(9.9)
    20191128 Spring Boot官方文档学习(9.4-9.8)
    20191127 Spring Boot官方文档学习(9.1-9.3)
  • 原文地址:https://www.cnblogs.com/zhifeiji822/p/11866609.html
Copyright © 2011-2022 走看看