文心一言 VS chatgpt (8)-- 算法导论2.3 5~6题

news2025/4/11 19:29:15

五、回顾查找问题(参见练习 2.1-3),注意到,如果序列 A 已排好序,就可以将该序列的中点与v进行比较。根据比较的结果,原序列中有一半就可以不用再做进一步的考虑了。二分查找算法重复这个过程,每次都将序列剩余部分的规模减半。为二分查找写出迭代或递归的伪代码。证明:二分查找的最坏情况运行时间为 O(lgn)。

文心一言:

二分查找算法的伪代码如下:

function binary_search(A, v):  
    if A is empty:  
        return -1  
    mid = (A.length - 1) / 2  
    if A[mid] == v:  
        return mid  
    else:  
        left = binary_search(A, A[mid])  
        if left == -1:  
            return mid  
        else:  
            right = binary_search(A, v)  
            if right == -1:  
                return mid - 1  
            else:  
                return mid + 1

其中,A 是待查找的有序序列,v 是要查找的元素。在每次迭代中,我们首先检查序列的中点是否等于要查找的元素,如果是,则返回中点的下标。否则,我们将序列剩余部分的规模减半,并递归地查找左半部分和右半部分。如果左半部分的下标小于要查找的元素的下标,则返回左半部分的下标;否则,返回右半部分的下标。

证明:

二分查找的最坏情况运行时间为 O(lgn)。

证明:

二分查找的最坏情况运行时间为 O(lgn)。

证明:

二分查找的最坏情况运行时间为 O(lgn)。

在这里插入图片描述
在这里插入图片描述

chatgpt:

以下是二分查找的迭代和递归实现的伪代码:

迭代实现:

BINARY-SEARCH(A, v):
    low = 1
    high = length[A]
    while low <= high:
        mid = floor((low + high) / 2)
        if A[mid] == v:
            return mid
        else if A[mid] > v:
            high = mid - 1
        else:
            low = mid + 1
    return NIL

递归实现:

BINARY-SEARCH(A, v, low, high):
    if low > high:
        return NIL
    mid = floor((low + high) / 2)
    if A[mid] == v:
        return mid
    else if A[mid] > v:
        return BINARY-SEARCH(A, v, low, mid - 1)
    else:
        return BINARY-SEARCH(A, v, mid + 1, high)

证明二分查找的最坏情况运行时间为 O(lgn) 的方法如下:

假设序列 A 有 n 个元素,每次比较后都将序列规模减半,直到找到目标元素或者剩余部分为空。则在最坏情况下,需要进行 k 次比较才能确定目标元素的位置,即剩余部分的规模为 1,此时有 n / 2 k = 1 n/2^k = 1 n/2k=1,解得 k = log ⁡ 2 n k = \log_2 n k=log2n。因此,二分查找的最坏情况运行时间为 O(lgn)。

在这里插入图片描述

六、注意到2.1节中的过程INSERTION-SORT的第5~7行的 while 循环采用一种线性查找来(反向)扫描已排好序的子数组 A[1…j-1]。我们可以使用二分查找(参见练习2.3-5)来把插人排序的最坏情况总运行时间改进到 O(nlgn)吗?

文心一言:

是的,可以使用二分查找来把插入排序的最坏情况总运行时间改进到 O(nlgn)。

在二分查找中,我们需要检查序列的中点是否等于要查找的元素,如果是,则返回中点的下标。否则,我们将序列剩余部分的规模减半,并递归地查找左半部分和右半部分。如果左半部分的下标小于要查找的元素的下标,则返回左半部分的下标;否则,返回右半部分的下标。

在插入排序中,我们需要将序列的中点与要查找的元素进行比较,如果中点等于要查找的元素,则返回中点的下标。否则,我们将序列剩余部分的规模减半,并递归地查找左半部分和右半部分。如果左半部分的下标小于要查找的元素的下标,则返回左半部分的下标;否则,返回右半部分的下标。

因此,二分查找的最坏情况运行时间为 O(nlgn)。

在这里插入图片描述

chatgpt:

是的,我们可以使用二分查找来将插入排序的最坏情况总运行时间改进到 O(nlgn)。

在插入排序算法中,第 i 次循环前,前 i-1 个元素已经排序完成。当处理第 i 个元素时,我们需要在已经排好序的前 i-1 个元素中,找到一个位置 j,使得 A[j]<=A[i]<A[j+1],然后将第 i 个元素插入到 A[j+1] 处。

如果我们使用线性查找的方式,那么在最坏情况下,就需要扫描整个已排好序的子数组 A[1…j-1],因此最坏情况下的比较次数为 1+2+…+(n-1),即 O(n^2)。

但如果我们使用二分查找,在已经排好序的子数组 A[1…j-1] 中查找插入位置,我们只需要每次比较当前元素与子数组中间位置的元素,根据比较结果将查找范围缩小一半,这样就可以将查找的时间复杂度降低到 O(lgn)。因此,使用二分查找的插入排序算法的最坏情况总运行时间为 O(nlgn)。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/422785.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构之七大排序

数据结构之七大排序&#x1f506;排序的概念及其运用排序的概念常见的排序算法&#x1f506;插入排序直接插入排序希尔排序&#x1f506;选择排序直接选择排序堆排序&#x1f506;交换排序冒泡排序快排&#x1f506;归并排序&#x1f506;非比较排序&#x1f506;结语&#x1f…

深度探索list

1.list的基本组成 list是一个双向链表&#xff0c;它的基本组成就是 成员作用prev指针指向上一个元素next指针指向下一个元素data用来保存数据2.list的迭代器 由于人们一般习惯于&#xff1a;迭代器是找到下一个元素&#xff0c;迭代器–是找到上一个元素。在双向链表list中…

C++的命名空间

C和C语言是有一些相似的地方的&#xff0c;而且C就是C语言的改进版本&#xff0c;所以学习C也得学习C语言&#xff0c;但是他们又是有很多不同的地方 下面我们就看一下C的命名空间 我们首先看一下 如果是这一段代码&#xff0c;那么这里输出的是多少呢&#xff1f; 很好这里输…

Nacos服务端服务注册源码分析 - 篇四

Nacos服务端服务注册源码分析 - 篇四 服务端调用接口 嗨 ~~~ 上班除了无聊的摸鱼&#xff0c;我还学了一个新技能&#xff0c;偷偷写博客。。。。 我们先回忆一下之前的三篇文章 &#x1f550;Nacos 客户端服务注册源码分析-篇一 &#x1f551;Nacos 客户端服务注册源码分析…

路由器的两种工作模式及快速通过express搭建微型服务器流程,解决刷新页面服务端404的问题

history模式与hash模式 首先这个#叫做hash&#xff0c;最大的特点就是不会随的http请求&#xff0c;发给服务器。 默认的模式是hash模式&#xff0c;如果想要修改&#xff0c;可以在router里面的index.js中配置mode属性&#xff0c; 它们俩直接的区别最明面上的有没有#和hist…

Python第三方库安装

看见更大的Python世界 Python社区PyPI The Python Package Index PyPI: Python Package Index PSF维护的展示全球Python计算生态的主站 学会检索并利用PyPI&#xff0c;找到合适的第三方库开发程序 实例&#xff1a;开发与区块链相关的程序 第1步&#xff1a;在pypi.org…

【服务器数据恢复】EVA存储数据硬盘掉线导致LUN不可用的数据恢复

服务器数据恢复环境&#xff1a; HP-EVA存储环境&#xff1a;EVA某型号控制器EVA扩展柜FC硬盘。 服务器故障&#xff1a; EVA存储中两块磁盘掉线导致存储中某些LUN丢失不可用。 服务器数据恢复过程&#xff1a; 1、首先对故障存储中所有磁盘做物理故障检测&#xff0c;经过…

在Spring Boot微服务使用RedisTemplate操作Redis

记录&#xff1a;400 场景&#xff1a;在Spring Boot微服务使用RedisTemplate操作Redis缓存和队列。 使用ValueOperations操作Redis String字符串&#xff1b;使用ListOperations操作Redis List列表&#xff0c;使用HashOperations操作Redis Hash哈希散列&#xff0c;使用SetO…

基于LNMP架构搭建网站

一、编译安装Nginx 服务 1、编译安装Nginx 服务的操作步骤 systemctl stop firewalld systemctl disable firewalld setenforce 01.1 安装依赖包 yum -y install pcre-devel zlib-devel gcc gcc-c make1.2 创建运行用户 useradd -M -s /sbin/nologin nginx1.3 编译安装 cd…

Claude注册安装教程【403 Forbidden】

Claude注册安装教程 尝试注册Claude的兄弟需要注意&#xff0c;最后一步需要科学上网 本来打算看看csdn&#xff0c;结果可能是时效性&#xff0c;和我情况不一样 按照他们的意思&#xff0c;点击add a stack 就进去了&#xff0c;我却被403 这个时候我就搜索stack&#xff0c;…

钢网是SMT生产使用的一种工具,如何制作?

钢网是SMT生产使用的一种工具&#xff0c;其主要功能是将锡膏准确地涂敷在有需要焊接的PCB焊盘上。 钢网的好坏&#xff0c;直接影响印刷工作的质量&#xff0c;目前一般使用的金属钢网&#xff0c;是由薄薄的、带有小孔的金属板制作成的&#xff0c;在开孔处&#xff0c;锡膏…

React中Context的使用,跨组件传值

目录Context 是什么&#xff1f;使用ContextXxx.Provider正式使用Context中的数据Context 是什么&#xff1f; Context 提供了一个无需为每层组件手动添加 props&#xff0c;就能在组件树间进行数据传递的方法。 在一个典型的 React 应用中&#xff0c;数据是通过 props 属性自…

容器镜像的设计原理

1 概述&#xff1a; 1.1 历史概要 2016年&#xff0c;Docker制定了镜像规范v2&#xff0c;并在Docker 1.10中实现了这个规范。镜像规范v2分为Schema 1和Schema 2。 Schema 1主要兼容使用v1规范的Docker客户端&#xff08;从2017年2月起&#xff0c;镜像规范v1不再被Registry支…

云计算基础——云服务

目录 云服务概述 云服务简介 云服务的产生和发展 云服务产生的前提&#xff1a; 接入云端的主要前端工具&#xff1a; 云服务的优缺点 优点 缺点 云服务的类型 SaaS PaaS IaaS 云部署模型 云服务概述 云服务简介 云计算通过使计算分布在大量的分布式计算机上&…

在线旅游变局:新老玩家的攻与防、危与机

配图来自Canva可画 五一小长假未到&#xff0c;大学生、职场人就早早制定了旅游路线&#xff0c;准备了旅游装备&#xff0c;还预订了机票和酒店。这边消费者们旅游之心急不可待&#xff0c;那边各地文旅局发布旅游消费券、完善旅游设施配套、花式宣传本地特色&#xff0c;使浑…

城市轨道交通列车时刻表优化问题【最优题解】

文章目录城市轨道交通列车时刻表优化问题思路文章底部城市轨道交通列车时刻表优化问题 最新进度在文章最下方卡片&#xff0c;加入获取思路数据代码论文&#xff1a;2023十三届MathorCup交流 (第一时间在CSDN分享&#xff0c;文章底部) 题目为数据分析类题目。列车时刻表优化…

基于.Net开源Html解析器,此外还支持SVG、XML等格式

今天给大家推荐一个Html解析器&#xff0c;可以用于网络爬虫Html源码的解析、Html源码编辑等场景。 项目简介 这是一个基于.Net开发的&#xff0c;Html代码解析器&#xff0c;支持通过C#实现类似Jquery的方式来解析Html源码、节点创建、节点删除、节点修改、属性的添加修改等&…

【算法与数据结构】3 知行合一,线性查找的自定义类测试

欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享&#xff0c;与更多的人进行学习交流 本文收录于算法与数据结构体系专栏,本专栏对于0基础者极为友好,欢迎与我一起完成算法与数据结构的从0到1的跨越 线性查找的测试应用1.前言2.使用自定义类测试2.1⛏创建Student类并测…

记录一下verilog重复例化的两种方式

文章目录0 前言1 for循环方式例化方法2 数组的方式例化4 一些其他的技巧0 前言 这段时间例化了挺多mem&#xff0c;过程中也了解到了一些新的东西&#xff0c;在这里记录一下 1 for循环方式例化方法 先给出 sub_module module sub(input [7:0] din,output logic [7:0] dout…

手撕深度学习中的损失函数(上)

面试中经常会问到损失函数的相关问题&#xff0c;本文推导了深度学习中常用损失函数的计算公式和反向传播公式&#xff0c;并使用numpy实现。 定义损失函数基类&#xff1a; class Loss:def loss(self, predictions, targets):raise NotImplementedErrordef grad(self, predic…