c++三分算法思想及实现方法

C++中的三分算法(Ternary Search Algorithm)是一种用于在有序数组或函数中寻找最大值或最小值的搜索算法。它类似于二分搜索,但不同之处在于它将搜索区间分成三个部分而不是两个部分。

以下是三分搜索算法的基本思想和实现步骤:

基本思想:

  1. 将搜索范围分成三个部分。
  2. 检查函数在搜索范围的1/3和2/3处的值。
  3. 如果目标值在1/3处的值的左侧,则将搜索范围缩小为左侧1/3的部分。如果目标值在2/3处的值的右侧,则将搜索范围缩小为右侧1/3的部分。
  4. 重复以上步骤,直到搜索范围足够小或者满足某个终止条件。

实现步骤:

  1. 定义搜索范围的起始点和终点。
  2. 使用一个循环或递归来不断缩小搜索范围,直到满足终止条件。
  3. 在每一步中,计算中间点1/3和2/3处的值,并比较目标值。
  4. 根据目标值与中间值的关系,缩小搜索范围。
  5. 当搜索范围足够小时,返回最终结果。

C++实现:

// Ternary Search Algorithm in C++
#include <iostream>
using namespace std;// Function to perform ternary search
int ternarySearch(int arr[], int left, int right, int key) {while (right >= left) {// Find mid1 and mid2int mid1 = left + (right - left) / 3;int mid2 = right - (right - left) / 3;// Check if key is present at any midif (arr[mid1] == key) {return mid1;}if (arr[mid2] == key) {return mid2;}// Since key is not present at mid,// check in which region it is present// then repeat the search operation in that regionif (key < arr[mid1]) {// The key lies in the left-third portionright = mid1 - 1;} else if (key > arr[mid2]) {// The key lies in the right-third portionleft = mid2 + 1;} else {// The key lies in the middle-third portionleft = mid1 + 1;right = mid2 - 1;}}// Key not foundreturn -1;
}// Driver code
int main() {int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};int n = sizeof(arr) / sizeof(arr[0]);int key = 5;int result = ternarySearch(arr, 0, n - 1, key);(result == -1) ? cout << "Element is not present in array": cout << "Element is present at index " << result;return 0;
}

在上面的实现中,ternarySearch函数采用递归的方式执行三分搜索。您也可以选择使用迭代的方法来实现。

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

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

相关文章

Python数据分析-pandas3

1.pandas的作用&#xff1a; numpy能够帮助我们处理数值&#xff0c;但是pandas除了处理数值之外&#xff08;基于numpy&#xff09;&#xff0c;还能够帮助我们处理其他类型的数据。 2.pandas之Series创建&#xff1a; 3.pandas之Series切片和索引 4.缺失值处理 5.常用的统计…

【C语言刷题】——初识位操作符

【C语言刷题】——初识位操作符 位操作符介绍题一、 不创建临时变量&#xff08;第三个变量&#xff09;&#xff0c;实现两个数的交换&#xff08;1&#xff09;法一&#xff08;2&#xff09;法二 题二、 求一个数存储在内存中的二进制中“一”的个数&#xff08;1&#xff0…

phpcms上传漏洞

原始漏洞 漏洞原理&#xff1a;我们上传一个zip的压缩包&#xff0c;它会解压然后删除其中不是.jpg .gig .png的文件 function check_dir($dir)&#xff1a;这是一个PHP函数的定义&#xff0c;它接受一个参数 $dir&#xff0c;代表要检查的目录路径。 $handle opendir($dir)…

【React】Vite创建React+TS项目

前提条件 有node环境&#xff0c;且node版本>18.0.0 创建项目 npm create vitelatest1.起项目名 2.选择框架 3.选择语言 TypeScript SWC 是指 Vite 使用 SWC&#xff08;Speedy Web Compiler&#xff09;作为 TypeScript 的编译器。 SWC 是一个针对 JavaScript 和 Ty…

Excel: 将缺失的单元个填充为NA

在Excel中&#xff0c;有多种方法可以将缺失的单元格填充为"NA"或其他指定的值。以下是一些常用的方法&#xff1a; 方法1&#xff1a;使用“查找和选择”填充缺失值 (推荐) 打开Excel文件&#xff0c;并选择包含缺失值的数据区域。在“开始”标签页中&#xff0c;…

客服销冠偷偷用的提效神器!无广很实用

近期发现我的同事每天上班必登录的一款软件——客服宝聊天助手&#xff0c;用过才发现&#xff1a;真客服办公的提效神器&#xff01;感兴趣的小伙伴请往下看~一、客服宝的简介&#xff1a;客服宝聊天助手&#xff0c;是一款跨平台快捷回复工具。自带多种功能&#xff0c;有效帮…

Python接口自动化测试post请求和get请求,获取请求返回值

引言 我们在做python接口自动化测试时&#xff0c;接口的请求方法有get,post等&#xff1b;get和post请求传参&#xff0c;和获取接口响应数据的方法&#xff1b; 请求接口为Post时&#xff0c;传参方法 我们在使用python中requests库做接口测试时&#xff0c;在做post接口测试…

C语言练习题【复试准备】

1、BoBo教KiKi字符常量或字符变量表示的字符在内存中以ASCII码形式存储。BoBo出了一个问题给KiKi&#xff0c;转换以下ASCII码为对应字符并输出他们。 //73,32,99,97,110,32,100,111,32,105,116,33 int main() {int arr[] {73,32,99,97,110,32,100,111,32,105,116,33};int i …

备战2024年汉字小达人活动:历年区级样题练习和解析(续)

今天我们继续来看汉字小达人活动的区级样题。区级样题是中文自修杂志社&#xff08;主办方&#xff09;发布的试题&#xff0c;主要是给学校老师选拔参考使用的&#xff0c;据了解&#xff0c;很多学校老师是直接用这个样卷在学校组织选拔&#xff0c;选拔成绩突出的同学报给主…

【CSS】前端开发中的常见CSS样式问题解决方案

前端开发中的常见CSS样式问题解决方案 在前端开发过程中&#xff0c;CSS样式问题经常让开发者头疼。本文档将介绍一些常见的CSS样式问题以及它们的解决方案&#xff0c;旨在帮助前端开发者更高效地解决这些问题。 目录 1. 水平垂直居中2. 清除浮动3. 边距重叠4. Flex布局下的…

Pytorch学习 day10(L1Loss、MSELoss、交叉熵Loss、反向传播)

Loss loss的作用如下&#xff1a; 计算实际输出和真实值之间的差距为我们更新模型提供一定的依据&#xff08;反向传播&#xff09; L1Loss 绝对值损失函数&#xff1a;在每一个batch_size内&#xff0c;求每个输入x和标签y的差的绝对值&#xff0c;最后返回他们平均值 M…

Python教程:一文了解Python模块与包(很详细)

Python作为一种强大的编程语言&#xff0c;提供了模块和包的机制&#xff0c;使得代码的组织和复用变得更加灵活和高效。本文将深入探讨Python模块与包的概念、import机制、动态加载、自定义包开发和指定自定义库位置等内容。 1.模块与包的介绍 1.1 模块 Python的模块是指以.…

注意:如果你有这些情况,无法报名广东成人高考!

NO.1 学历与报考层次不匹配 ✅高起本或高起专考生&#xff1a;应高级中等教育学校毕业或者具有同等学力。 ✅专升本考生&#xff1a;必须是已取得经教育部审定核准的国民教育系列高等学校、高等教育自学考试机构颁发的专科毕业证书、本科结业证书或以上证书的人员。 NO.2 不符…

Kafka配置SASL_PLAINTEXT权限。常用操作命令,创建用户,topic授权

查看已经创建的topic ./bin/kafka-topics.sh --bootstrap-server localhost:9092 --list 创建topic 创建分区和副本数为1的topic ./bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --topic acltest --partitions 1 --replication-factor 1 创建kafka用户 …

HTML静态网页成品作业(HTML+CSS+JS)——迪士尼公主介绍(6个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;使用Javacsript代码&#xff0c;共有6个页面。 二、作品演示 三、代码…

基于单片机的酒精浓度测试仪

摘 要 现如今&#xff0c;人们对生活的态度和生活方式变得不同,&#xff0c;不仅私家车成为了人们最普遍的交通工具&#xff0c;大多数人都有自己的私家车,而且人们对酒精的消耗量也越来越大&#xff0c;这些就导致酒后驾车行为越来越普遍&#xff0c;酒后驾车意外越来越频繁&…

【深度学习笔记】10_10 束搜索beam-search

注&#xff1a;本文为《动手学深度学习》开源内容&#xff0c;部分标注了个人理解&#xff0c;仅为个人学习记录&#xff0c;无抄袭搬运意图 10.10 束搜索 上一节介绍了如何训练输入和输出均为不定长序列的编码器—解码器。本节我们介绍如何使用编码器—解码器来预测不定长的序…

【测试知识】业务面试问答突击版3---bug、测试用例设计

文章目录 一个完整的缺陷报告包含一个完整的测试用例包含一个完整的测试计划包含缺陷严重等级简述等价类划分法并举例简述边界值分析法逻辑覆盖针对具体场景的测试用例设计软件中存在多个分支时如何设计测试用例静态代码检查什么白盒测试是&#xff1f;常用方法是&#xff1f; …

3dmax2020模型显示黑白不稳定---模大狮模型网

如果在3ds Max 2020中显示的模型出现黑白不稳定的情况&#xff0c;可能有几个常见原因和解决方法&#xff1a; 显卡驱动问题&#xff1a; 首先检查你的显卡驱动程序是否是最新版本。过时或不兼容的显卡驱动可能导致显示问题。建议更新到最新的显卡驱动程序&#xff0c;并确保其…

JAVA泛型-泛型方法的定义和使用

请直接看原文: JAVA泛型-泛型方法的定义和使用-CSDN博客 -------------------------------------------------------------------------------------------------------------------------------- 1.泛型方法的定义和语法 1.1 定义 泛型方法 是在调用方法的时候指明泛型的…