博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
奇技淫巧
阅读量:4297 次
发布时间:2019-05-27

本文共 686 字,大约阅读时间需要 2 分钟。

文章目录

快速幂

简单来说

其实这是一个很精妙的思路,对比一下就可以发现:

Show Me The Code

普通幂

差不多是这样:

# 求 a 的 n 次幂,ans 是结果baseNum,ans = a,afor i in range(n-1):    ans *= baseNum

快速幂是这样:

# 求 a 的 n 次幂,ans 是结果powerNum,ans = a,1while not n==0:    if n&1:ans *= powerNum    powerNum *= powerNum    n >>= 1

另外,快速幂的时间复杂度是 O(log2n),而普通幂是 O(n)。

前缀和

简单来说

前缀和主要是减少了重复的运算,比如有一个问题,每一次处理需要得到 ∑ai(i = m->n-1),其中,n 为定值而 m 不定,那么常规操作是每一次处理都重新对索引 m->n-1 的数求和。但实际上,可以用一个数组来专门存储 m->n-1 的和(比如那个数组叫做 sum,那么 sum[m]则表示 ∑ai(i = m->n-1))。这样,预先构造好 sum 数组,每次处理只需要要直接访问 sum 数组就好(最大可将复杂度从 O(n2) 降到 O(n))。

Show Me The Code

sum 数组的构造过程大概就是:

sum,sumNums = [0 for i in range(n)],0for i in range(n-1,-1,-1):    sumNums += a[i]    sum[i] = sumNums

后语

未完待续。😃

转载地址:http://mmbws.baihongyu.com/

你可能感兴趣的文章
laravel 定时任务秒级执行
查看>>
浅析 Laravel 官方文档推荐的 Nginx 配置
查看>>
Swagger在Laravel项目中的使用
查看>>
Laravel 的生命周期
查看>>
CentOS Docker 安装
查看>>
Nginx
查看>>
Navicat远程连接云主机数据库
查看>>
Nginx配置文件nginx.conf中文详解(总结)
查看>>
Mysql出现Table 'performance_schema.session_status' doesn't exist
查看>>
MySQL innert join、left join、right join等理解
查看>>
vivado模块封装ip/edf
查看>>
sdc时序约束
查看>>
Xilinx Jtag Access/svf文件/BSCANE2
查看>>
NoC片上网络
查看>>
开源SoC整理
查看>>
【2020-3-21】Mac安装Homebrew慢,解决办法
查看>>
influxdb 命令行输出时间为 yyyy-MM-dd HH:mm:ss(年月日时分秒)的方法
查看>>
已知子网掩码,确定ip地址范围
查看>>
判断时间或者数字是否连续
查看>>
docker-daemon.json各配置详解
查看>>