当前位置: 首页 > news >正文

数据结构----算法--分治,快速幂

数据结构----算法–分治,快速幂

一.分治

1.分治的概念

分治法:分而治之

将一个问题拆解成若干个解决方式完全相同的问题

满足分治的四个条件

1.问题难度随着数据规模缩小而降低

2.问题可拆分

3.子问题间相互独立

4.子问题的解可合并

2.二分查找(折半搜索) BinaryChop

前提:有序

时间复杂度O(log2的n次方)

1.循环实现二分查找

//循环
int BinaryChop1(int a[], int begin, int end ,int find) {if (a == nullptr || begin > end) return -1;while (begin<= end) {int mid = begin+(end- begin)/2 ;if (a[mid] == find) {cout << "找到了,返回在数组中的下标" << endl;return mid;}else if (a[mid] < find) {begin = mid + 1;}else if (a[mid] > find) {end = mid - 1;}}return -1;
}

2.递归实现二分查找

//递归
int BinaryChop2(int a[], int begin, int end, int find) {if (a == nullptr || begin > end) return -1;int mid = begin+(end- begin)/2;if (a[mid] == find) {cout << "找到了,返回数组下标" << endl;return mid;}else if (a[mid] < find) {begin = mid + 1;}else if (a[mid] > find) {end = mid - 1;}return BinaryChop2(a, begin, end, find);}

二.快速幂

求一个数的幂次方

例如2的50次方

//简单写法,这种写法求一个数的幂次方速度慢
int a=2;
for(int i=0;i<50;i++){a*=a;
}
//快速幂写法
int x=2
int n=50;
int ans=1;
while(n){temp=n&1;if(temp){ans*=x;}x*=x;n=n>>1;
}
printf("%d",ans);

快速幂就是将幂数二进制化

然后和1位与,如果得1 最终要输出的结果就乘以当前位的数,否则不乘

之后将幂数左移一位,当前位的数自乘

重复进行操作直到幂数为0结束

看一道具体的题(网址https://leetcode.cn/problems/powx-n/)

题目:实现 pow(x, n) ,即计算 x 的整数 n 次幂函数(即,x的n次方 )。

代码如下

//这里的代码是c++语言下的
class Solution {
public:double myPow(double x, int n) {int Bool=0;int Bool2=0;int t=x;if(n==0&&x!=0){return 1;}if(x==0){return 0;}double ans=1;int temp=0;if(n<0){if(n==-2147483648){n=2147483647;Bool2=1;}else{n=abs(n);}Bool=1;}while(n){temp=n&1;if(temp){ans*=x;}x*=x;n=n>>1;}if(Bool2){ans*=t;}if(Bool){ans=1.0/ans;}return ans;}
};
http://www.lryc.cn/news/116430.html

相关文章:

  • 【ChatGPT 指令大全】怎么使用ChatGPT写履历和通过面试
  • 微服务:从header中获取用户存入当前线程
  • C语言系列之原码、反码和补码
  • 程序框架——UI管理模块
  • MySQL 慢查询探究分析
  • wpf 项目中使用 Prism + MaterialDesign
  • 【Spring Boot】Thymeleaf模板引擎 — Thymeleaf页面布局
  • 整理mongodb文档:删
  • 篇二十三:设计模式的综合实例:构建完整项目
  • FFmpeg常见命令行(三):FFmpeg转码
  • 合宙Air724UG LuatOS-Air script lib API--scanCode
  • 2023年新手如何学剪辑视频 想学视频剪辑如何入门
  • C++的auto究竟是何方神圣
  • 网络安全【黑客】面试题汇总
  • docker菜谱大全
  • git: git checkout命令
  • 以游戏编程的角度看待模拟时间的算法题——以PAT甲级1026 Table Tennis为例
  • SNAT与DNAT原理
  • 04-2_Qt 5.9 C++开发指南_SpinBox使用
  • 接口安全防护方案
  • 机器学习复习题
  • 无线液位传感器—简介
  • 通讯协议034——全网独有的OPC HDA知识一之聚合(三)时间加权平均
  • Android 13 Hotseat定制化修改——003 hotseat图标大小修改
  • 21、springboot的宽松绑定及属性处理类的构造注入
  • nginx负载均衡(反向代理)
  • AWS上传私有windows server2019镜像64位
  • 查看当前仓库对应的远程仓库地址
  • flask-script
  • 标准的OSI七层模型(其实了解tcp足矣)