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

快速幂,错位排序笔记


记一下刚学明白的快速幂和错位排序的原理和代码

快速幂

原理:
a^b= (a^(b/2)) ^ 2(b为偶数)
a^b = a*(a^( (b-1)/2))^2(b为奇数)

指数为偶数时,底数a直接平方

质数为奇数时,结果*当前底数a,a再平方

然后指数除以2在这里插入图片描述

赞美deepseek,公式画的好清楚。

把O(n)时间复杂度的幂乘优化成log(n)的算法。

int fastPow(int a, int b){
    int res = 1;
    while(b){//b不为0时,拆分指数b,直到b=0
        if(b&1) res = res*a;
        //如果b是奇数,那么b的二进制形式最后一位是1,b&1=1
        //如果b是偶数,b的二进制形式最后一位是0,b&1=0       
        a = a*a;
        b >> 1;//b二进制形势下右移一位,相当于b=b/2
    }
}

错位排序

递推公式
设有从1到n共n个需要错位排序的东西
Dn为n个东西可以错位排序的总数
Dn=(n-1)(Dn-1+Dn-2)
代码片:

D[1]=0,D[2]=1;
for(int i = 3; i <= n; i++){
	D[i]=(i-1)*(D[i-1]+D[i-2]);
}

其中D1=0,D2=1
推导:
设第n个物品在第n个位置上,考虑有第k个物品。(1 <= k <= n-1)

  1. 假设第k个物品不放到第n个位置上:
    先对前n-1个物品进行错位排列(Dn-1),
    再把第n个物品放到前n-1任意一个位置上(n-1)
    Dn-1*(n-1)
  2. 假设第k个物品放到第n个位置上:
    其他n-2个物品进行错位排序(Dn-2)
    k可以是1~n-1中任意一个数(n-1)
    Dn-2*(n-1)


http://www.kler.cn/a/534553.html

相关文章:

  • 【Uniapp-Vue3】z-paging插件组件实现触底和下拉加载数据
  • [Python人工智能] 四十九.PyTorch入门 (4)利用基础模块构建神经网络并实现分类预测
  • neo4j-在Linux中安装neo4j
  • 【大数据技术】搭建完全分布式高可用大数据集群(Hadoop+MapReduce+Yarn)
  • 视频融合平台EasyCVR无人机场景视频压缩及录像方案
  • (篇一)基于PyDracula搭建一个深度学习的界面之添加启动界面
  • 【字节青训营-6】:Gorm的基础使用
  • DeepSeek与llama本地部署(含WebUI)
  • ESXI虚拟机中部署docker会降低服务器性能
  • C# 压缩图片并保存到本地
  • Android性能优化系列——卡顿优化
  • 【C++】指针的基础概念与应用解析
  • tkvue 入门,像写html一样写tkinter
  • uniapp小程序自定义中间凸起样式底部tabbar
  • 记录使用libvirt创建虚拟机、自定义qcow2镜像
  • 图像分割中根据mask的ROI,去除mask和image中没有勾画ROI层数以外的图像
  • 数据库技术基础
  • Certum OV企业型通配符SSL
  • 常用工具类——Collections集合框架
  • c++ 基础 计算机的内存和寻址机制
  • Redis面试题总结(题目来源JavaGuide)
  • LeetCode 3442.奇偶频次间的最大差值 I
  • ASP.NET Core筛选器Filter
  • Vue3.5常用特性整理
  • 一、tsp学习笔记——开发环境搭建
  • 计算机网络笔记再战——理解几个经典的协议6——TCP与UDP