Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 二进制搜索算法-项目理念_Python_Python 3.x_Binary Search - Fatal编程技术网

Python 二进制搜索算法-项目理念

Python 二进制搜索算法-项目理念,python,python-3.x,binary-search,Python,Python 3.x,Binary Search,我正在写一个关于二进制搜索的python项目,但是我希望能够为这个算法实现一个图形界面。 你知道我如何使用这个算法来实现这个接口吗? 我指的是项目理念,而不是实施本身 多谢各位 这是我的代码: # It returns index of x in given array arr if present, # else returns -1 def binary_search(arr, x): low = 0 high = len(arr) - 1 mid = 0

我正在写一个关于二进制搜索的python项目,但是我希望能够为这个算法实现一个图形界面。 你知道我如何使用这个算法来实现这个接口吗? 我指的是项目理念,而不是实施本身

多谢各位

这是我的代码:

# It returns index of x in given array arr if present,
# else returns -1
def binary_search(arr, x):
    low = 0
    high = len(arr) - 1
    mid = 0
 
    while low <= high:
 
        mid = (high + low) // 2
 
        # If x is greater, ignore left half
        if arr[mid] < x:
            low = mid + 1
 
        # If x is smaller, ignore right half
        elif arr[mid] > x:
            high = mid - 1
 
        # means x is present at mid
        else:
            return mid
 
    # If we reach here, then the element was not present
    return -1
 
 
# Test array
arr = [ 2, 3, 4, 10, 40 ]
x = 10
 
# Function call
result = binary_search(arr, x)
 
if result != -1:
    print("Element is present at index", str(result))
else:
    print("Element is not present in array")```
#如果存在,则返回给定数组arr中x的索引,
#否则返回-1
def二进制搜索(arr,x):
低=0
高=透镜(arr)-1
mid=0
而低x:
高=中-1
#表示x在中间出现
其他:
中途返回
#如果我们到达这里,元素就不存在了
返回-1
#测试阵列
arr=[2,3,4,10,40]
x=10
#函数调用
结果=二进制搜索(arr,x)
如果有结果!=-1:
打印(“索引中存在元素”,str(结果))
其他:
打印(“数组中不存在元素”)```

虽然您要求使用图形界面,但仍然只是为了好玩,我决定为您的二进制搜索任务实现以下简单的ASCII艺术可视化,它可能会对您有所帮助

我在控制台中绘制图形时使用了一些。Windows上的此转义码需要一次性安装
colorama
module
python-m pip安装colorama
。在Linux上,它不需要安装任何东西

可以将代码转换为不同的随机种子值、数字数量或数字大小(最多100、最多1000等)。使用固定种子值随机选择值(更改
random.seed(…)
行中的值)

首先,我显示在Linux()上录制的ASCII视频屏幕广播,然后是代码:

代码


此外,我还创建了我的代码(下载代码或or)的稍加修改的无限ASCII屏幕广播版本,该版本将生成下一个快速播放视频(asciinema):


还有一个版本使用Unicode字符绘制漂亮的箭头和线条,它还显示了更密集的树,使用更多的数字进行搜索(下载代码,或者),您可以获得下一个视频(asciinema),在浏览器的新选项卡/窗口中打开下一个视频图像,可以看到更漂亮、更大的图像:


另一个尝试是制作更高级的代码和可视化。现在是两级可视化,前半个步骤垂直绘制,其余步骤水平绘制。这样做是为了获得更高的图像密度,以便在控制台屏幕上显示mor编号

像往常一样,下载代码和/或。生成的视频如下(加上):


虽然您要求使用图形界面,但仍然只是为了好玩,我决定为您的二进制搜索任务实现以下简单的ASCII艺术可视化,它可能会对您有所帮助

我在控制台中绘制图形时使用了一些。Windows上的此转义码需要一次性安装
colorama
module
python-m pip安装colorama
。在Linux上,它不需要安装任何东西

可以将代码转换为不同的随机种子值、数字数量或数字大小(最多100、最多1000等)。使用固定种子值随机选择值(更改
random.seed(…)
行中的值)

首先,我显示在Linux()上录制的ASCII视频屏幕广播,然后是代码:

代码


此外,我还创建了我的代码(下载代码或or)的稍加修改的无限ASCII屏幕广播版本,该版本将生成下一个快速播放视频(asciinema):


还有一个版本使用Unicode字符绘制漂亮的箭头和线条,它还显示了更密集的树,使用更多的数字进行搜索(下载代码,或者),您可以获得下一个视频(asciinema),在浏览器的新选项卡/窗口中打开下一个视频图像,可以看到更漂亮、更大的图像:


另一个尝试是制作更高级的代码和可视化。现在是两级可视化,前半个步骤垂直绘制,其余步骤水平绘制。这样做是为了获得更高的图像密度,以便在控制台屏幕上显示mor编号

像往常一样,下载代码和/或。生成的视频如下(加上):


您可以在项目中使用django框架

  • 在前端提供一个包含两个字段的表单
  • 数组本身
  • 要在数组中搜索的值
  • 在提交表单时获取值,并对输入值应用二进制搜索算法
  • 在UI上显示结果

  • 您可以对项目使用django框架

  • 在前端提供一个包含两个字段的表单
  • 数组本身
  • 要在数组中搜索的值
  • 在提交表单时获取值,并对输入值应用二进制搜索算法
  • 在UI上显示结果

  • 您可以动态(及时)绘制搜索树,类似于可视化。您是在绘制ASCII艺术还是打算实现一个真正的UI框架?关键是这是一个大学项目,我的教授要求为此提供一个图形界面。。所以,是的,我要实现一个带有按钮和其他东西的真正的UI框架。只是为了好玩,我在控制台中实现了ASCII艺术图形,请看一下,也许它会给你一些有用的想法。你可以动态(及时)绘制搜索树,类似于可视化。你是在画ASCII艺术,还是打算实现一个真正的UI框架?关键是这是一个大学项目,我的教授要求为此提供一个图形界面。。所以,是的,我要用按钮和其他东西实现一个真正的UI框架。只是为了好玩,我在控制台中实现了ASCII艺术图形,请看一看,也许它会给你一些有用的想法。从我的观点来看,看起来很棒,所以我投了赞成票。@ArtiomKozyrev非常感谢!:)@通常12秒前,我刚刚添加了
    import platform, time, sys
    if platform.system() == 'Windows':
        import colorama
        colorama.init()
    
    def vis(data, steps):
        def str_set(s, i, c):
            return s[:i] + c + s[i + 1:]
        def astr_set(a, j, i, c):
            a[j] = str_set(a[j], i, c)
        dlen = max(len(str(e)) for e in data) + 1
        loline = ''.join(str(e).zfill(dlen - 1) + '|' for e in data)
        ll = len(loline)
        N = len(steps)
        h1 = 3
        lines = [' ' * ll for e in range(h1 * N)] + [loline]
        def emit_frame():
            sys.stdout.write("\033[F" * len(lines) + '\n'.join(lines) + '\n')
            time.sleep(1)
        emit_frame()
        for i in range(N - 1):
            lpcur, lpnext = [dlen * steps[i + e] + (dlen - 2) // 2 for e in (0, 1)]
            for j in range(h1 - 1):
                astr_set(lines, i * h1 + j, lpcur, '|')
            dir_ = -1 if steps[i + 1] < steps[i] else +1 if steps[i + 1] > steps[i] else 0
            for j in range((i + 1) * h1, len(lines) - 1):
                astr_set(lines, j, lpcur, '.' if j < len(lines) - 2 else '?')
            for j in range(lpcur, lpnext + dir_, dir_):
                astr_set(lines, (i + 1) * h1 - 1, j, ('/' if dir_ < 0 else '\\') if j in (lpcur, lpnext) else '-')
                if j == lpcur:
                    emit_frame()
            if i == N - 2:
                for j in range((i + 1) * h1, len(lines) - 1):
                    astr_set(lines, j, lpnext, '|' if j < len(lines) - 2 else 'V')
                emit_frame()
    
    def binary_search(f, l, r, target):
        steps = []
        while l <= r:
            m = (l + r) // 2
            steps.append(m)
            fm = f(m)
            if fm < target:
                l = m + 1
            elif fm > target:
                r = m - 1
            else:
                break
        return steps
    
    def main():
        import random
        random.seed(3)
        data = sorted(random.randrange(100) for i in range(30))
        target = data[random.randrange(len(data))]
        steps = binary_search(lambda x: data[x], 0, len(data) - 1, target)
        vis(data, steps)
    
    if __name__ == '__main__':
        main()
    
                                              |                                               
                                              |                                               
                                              \-----------------------\                       
                                              .                       |                       
                                              .                       |                       
                                              .                       \-----------\           
                                              .                       .           |           
                                              .                       .           |           
                                              .                       .     /-----/           
                                              .                       .     |     .           
                                              .                       .     |     .           
                                              .                       .  /--/     .           
                                              .                       .  |  .     .           
                                              .                       .  |  .     .           
                                              ?                       ?  V  ?     ?           
    01|08|16|19|19|24|29|29|30|33|47|49|50|60|60|60|60|66|69|69|70|70|74|75|77|77|80|81|81|91|