首页 > 编程语言 >C/C++ 数据结构五大核心算法之分治法

C/C++ 数据结构五大核心算法之分治法

时间:2023-08-02 15:13:42浏览次数:27  
标签:arr 硬币 int 分治 mid C++ maxSub num 数据结构

分治法——见名思义,即分而治之,从而得到我们想要的最终结果。分治法的思想是将一个规模为 N 的问题分解为 k 个较小的子问题,这些子问题遵循的处理方式就是互相独立且与原问题相同。 两部分组成: 分(divide):递归解决较小的问题 治(conquer):然后从子问题的解构建原问题的解 三个步骤: 1、分解(Divide):将原问题分解为若干个规模较小,相互独立,与原问题形式相同的子问题; 2、解决(Conquer):若子问题规模较小而容易被解决则直接解决,否则递归地解各个子问题; 3、合并(Combine):将各个子问题的解合并为原问题的解。 例题: 一个装有 16 枚硬币的袋子,16 枚硬币中有一个是伪造的,伪造的硬币和普通硬币从表面上看不出有任何差别,但是那个伪造的硬币比真的硬币要轻。现有给你一台天平,请你在尽可能最短的时间内找出那枚伪造的硬币。 解答:我们先将 16 枚硬币分为左右两个部分,各为 8 个硬币,分别称重,必然会有一半轻一半重,而我们要的就是轻的那组,重的舍去。接下来我们继续对轻的进行五五分,直至每组剩下一枚或者两枚硬币,这时我们的问题自然就解决了。

#include <iostream>
#include <Windows.h>
using namespace std;
//递归实现二分查找
//arr:有序数组地址
//minSub:查找范围的最小下标
//maxSub:查找范围的最大下标
//num:待查找数字
int BinarySearch(int* arr, int minSub, int maxSub, int num) {
    if (minSub > maxSub) {
        return -1; //找不到num时,直接返回-1
    }

    int mid = (minSub + maxSub) / 2;

    if (num == arr[mid]) {
        return mid;//找到num时直接返回下标
    }
    else if (num < arr[mid]) {
        return BinarySearch(arr, minSub, mid-1, num);
    }
    else {
        return BinarySearch(arr, mid + 1, maxSub, num);
    }
}
int main() {
    int arr[10] = {5,7,11,15,19,21,25,26,61,99};
    int index = BinarySearch(arr, 0, 9, 26);

    cout << "index:" << index << endl;

    system("pause");
    return 0;
}

标签:arr,硬币,int,分治,mid,C++,maxSub,num,数据结构
From: https://www.cnblogs.com/smartlearn/p/17600688.html

相关文章

  • 面试-基本的算法要了如指掌,比如查找、排序、动态规划、分治等
    在了解这些基本算法之前还是得先了解这些基本的数据结构,这些都是要熟记与心的。基本数据结构比如:字符串、链表、二叉树、堆、栈、队列、哈希等字符串stringstr="helloworld";//使用格式//string是类。//str输出的大小,取决于size函数的返回值。链表classListNode{ pu......
  • 第三阶段C++提高编程(黑马程序员)——Day9
    2STL初识2.1STL的诞生长久以来,软件界一直希望建立一种可重复利用的东西C++的面向对象和泛型编程思想,目的就是复用性的提升大多情况下,数据结构和算法都未能有一套标准,导致被迫从事大量重复工作为了建立数据结构和算法的一套标准诞生了STL2.2STL基本概念STL(StandardTemplateLib......
  • 【八股文 02】C++ 进程内存布局及其相关知识
    1引言本文环境为Linux操作系统(x86)+C++。目的是了解进程内存布局,但是在了解的过程中发现需要前置一些知识,因此内容概览如下所示:1C/C++程序从源代码到可执行程序的构建过程1.1预处理,也叫预编译1.2编译1.3汇编1.4链接2各平台文件格式3ELF文件3.1ELF文......
  • 【八股文 00】C++ 八股文合集
    1前言1.1八股文是什么八股文本来是明清科举考试的一种文体,绝对不允许自由发挥,而句子的长短、字的繁简、声调的高低等也都要相对成文,字数也有限制。那么总结一下,八股文的特点是:不允许自由发挥,题目,内容,格式都被严格限制,必须遵守相应的定式那么计算机八股文就比较好理解了,就是......
  • 数据结构--排序
    什么是排序?排序:将无序序列排成一个有序序列的运算.排序的应用非常广泛.排序方法的分类按照储存介质分类.内部排序:数据量不大,数据在内存,无序内外存交换数据.外部排序:数据量较大,数据在外存(文件排序).按比较器个数分类串行排序:单处理机(同一时刻比较一对元素)......
  • c++求平均年纪
    班上有学生若干名,给出每名学生的年龄(整数),求班上所有学生的平均年龄,保留到小数点后两位。#include<cstdio>usingnamespacestd;intmain(){ intn,t; doubles; s=0;   //s储存班上同学年龄之和,初始值赋值为0 scanf("%d",&n);   for(inti=1;i<=n;++i) //循环累加班......
  • 要在 Dev-C++ 中添加 SFML 库,你需要按照以下步骤进行设置:
    下载SFML:首先,你需要从SFML官方网站下载适用于你的编译器(例如MinGW)和操作系统的SFML库。确保下载正确版本的SFML(32位或64位)和与你的编译器兼容的版本。配置Dev-C++环境:打开Dev-C++,转到"Tools"(工具)菜单,然后选择"CompilerOptions"(编译器选项)。添加S......
  • c++共享锁shared_mutex
    shared_mutexshared_mutex::lock()用法同mutex::lock()shared_mutex::lock_shared()允许多线程同时进入临界区,只用用于只读场景,不然是线程不安全的shared_mutex::lock_shared()与shared_mutex::lock()互斥,不能同时上锁#include<shared_mutex>#include<iostream>#include......
  • 考研数据结构——每日一题[WPL]
    3766.二叉树的带权路径长度二叉树的带权路径长度(WPL)是二叉树中所有叶结点的带权路径长度之和,也就是每个叶结点的深度与权值之积的总和。给定一棵二叉树T,请你计算并输出它的WPL。注意,根节点的深度为0。样例输入:二叉树[8,12,2,null,null,6,4,null,null,null,nul......
  • C++入门到放弃(06)——this指针
    1.基本介绍this本身很容易理解:在C++所有类当中,都将this(关键字)指针设置为当前对象的地址。this本身是指针,*this是变量,类型为当前类的类型。2.举例刚开始看到this指针的时候,总会觉得奇怪,怎么会有这种用法。我们需要当前类的变量以及函数的时候,明明可以直接在类的内部直接调用,......