(python)快速幂算法

embedded/2024/10/16 4:29:40/

前言

        在一个古老的魔法世界里,有一个叫做艾琳的年轻女巫,她拥有着强大的魔法天赋。然而,在这个世界中,魔法的运用需要消耗大量的能量,而艾琳却总是不满足于用传统的方式来释放魔法。

        有一天,艾琳听说了一个传说中的魔法书,里面记载着一种神奇的魔法——快速幂法术。据说,这种魔法可以让施法者在短时间内释放出强大的魔法力量,而且只需要消耗较少的能量。艾琳心生向往,决定踏上寻找快速幂法术的旅程。

        在她的旅途中,艾琳遇到了各种挑战和困难,但她始终坚信着自己的目标。最终,她来到了一个神秘的魔法塔,据说那里藏着传说中的魔法书。在魔法塔的深处,艾琳发现了那本古老的魔法书,书中详细记录着快速幂法术的秘密。艾琳花费了数日时间,苦心研究和实践,终于掌握了这种强大的魔法。

        回到自己的家园,艾琳开始运用快速幂法术保护着她所珍爱的家园。每当敌人来袭,艾琳都能迅速释放出强大的魔法力量,将他们击退。而且,由于快速幂法术的高效性,艾琳的魔法能量消耗也大大减少,使她能够持续地保护着家园。

艾琳成为了家园中备受尊敬的魔法师,人们称她为“魔法守护者”。她用快速幂法术为家园带来了安宁和保护,成为了家园的守护神。

简介

        快速幂算法(Exponentiation by Squaring,平方求幂)是一种简单而有效的小算法,它可以以O(log n)的时间复杂度计算乘方。快速幂不仅本身非常常见,而且后续很多算法也会用到快速幂。

应用场景

  •     数学问题的求解(如斐波那契数列的快速计算)
  •     计算机科学中的密码学
  •     量子化学中的分子动力学模拟
  •     图像处理
  •     公钥加密(RSA算法中的模幂运算)
  •     数字签名

步骤

(1)确定递归出口  首先,需要确定递归的出口条件。通常情况下,当指数为 0 时,任何数的 0 次方都为 1,所以递归的出口条件就是指数为 0 时返回 1。

(2)处理指数的奇偶性 对于给定的底数和指数,首先判断指数的奇偶性。如果指数为偶数,则可以将问题分解为计算底数的一半指数的平方;如果指数为奇数,则可以将问题分解为计算底数的一半指数减一的平方再乘以底数。

(3)递归调用或迭代计算 根据指数的奇偶性,分别进行递归调用或迭代计算。不断将指数减半,直至指数为 0。

(4)合并结果 最后,将递归调用或迭代计算得到的结果合并起来,得到最终的指数幂结果。

优势

优化 减少运算的次数

时间复杂度

    O(log n)

空间复杂度
    (递归方式) O(log n)
    (迭代方式) O(1)

时间复杂度降低

        快速幂算法的时间复杂度为O(log b),其中b是指数。这意味着随着指数b的增长,快速幂算法所需进行的乘法运算次数远少于传统算法,从而大幅度提高了计算效率。 

空间复杂度优化

        在处理大数幂运算时,传统算法可能需要存储中间结果,导致空间复杂度较高。而快速幂算法通过减少乘法运算次数,间接降低了空间复杂度,使得算法更加适合在大规模数据上运行。 

避免溢出问题

        在处理大数幂运算时,传统算法容易因为乘法运算过多而导致溢出。快速幂算法通过合理安排乘法运算顺序,避免了这种溢出问题,使得算法适用于更大范围的数值计算。 

易于实现

        快速幂算法的实现相对简单,无论是递归实现还是迭代实现,都能在较少的代码行内完成,便于理解和维护。 

常用模板

python">def power(x, n):if n == 0:return 1elif n % 2 == 0:half = power(x, n // 2)return half * halfelse:half = power(x, (n - 1) // 2)return x * half * half# 示例用法
base = 2
exponent = 10
result = power(base, exponent)
print(f"{base} 的 {exponent} 次方为: {result}")

范例 

斐波那契数列的计算满足递归的特点,随着N的增加,运算次数是指数上升的.在这里,采用快速幂算法大大减少了运算的次数.

线性递推数列

F(n) = a * F(n-1) + b * F(n-2)

 

python">class Solution:@staticmethoddef Fibonacci_fast(n: int) -> int:"""现在要求输入一个正整数 n ,请你输出斐波那契数列的第 n 项斐波那契数列是一个满足fib(x)={ 1   x=1,2fib(x−1)+fib(x−2)  x>2:param n::return:"""def multiply(F, M):x = F[0][0] * M[0][0] + F[0][1] * M[1][0]y = F[0][0] * M[0][1] + F[0][1] * M[1][1]z = F[1][0] * M[0][0] + F[1][1] * M[1][0]w = F[1][0] * M[0][1] + F[1][1] * M[1][1]F[0][0] = xF[0][1] = yF[1][0] = zF[1][1] = wdef power(F, n):if n == 0 or n == 1:returnM = [[1, 1],[1, 0]]power(F, n // 2)multiply(F, F)if n % 2 != 0:multiply(F, M)F = [[1, 1],[1, 0]]if n == 0:return 0power(F, n - 1)# print(F[0][0])return F[0][0]


http://www.ppmy.cn/embedded/26019.html

相关文章

探索未来,开启元宇宙之旅!

一、什么是元宇宙 元宇宙,这个词汇逐渐进入了公众的视野,引发了人们无尽的想象。 首先,元宇宙是什么?元宇宙,顾名思义,是一个虚拟现实的世界,一个融合了数字、物理和社交空间的全息图。它不仅…

Android13 源码环境编译app源码报错AndroidManifest.xml.fixed分析解决总结

Android13 源码环境编译app源码报错AndroidManifest.xml.fixed分析解决 文章目录 Android13 源码环境编译app源码报错AndroidManifest.xml.fixed分析解决一、前言二、Android13源码下简单demo应用代码编译报错和分析解决1、AndroidManifest.xml文件代码:2、AndroidM…

android:textColor=“?attr/colorBottomHintText“像这种颜色值怎么获取?

android:textColor"?attr/colorBottomHintText" 在Android中,?attr/colorBottomHintText是一种引用主题属性(Theme Attribute)的方式,用于动态获取主题中定义的颜色值。如果你想要在Java代码中使用这样的颜色值&…

web server apache tomcat11-29-Windows Authentication

前言 整理这个官方翻译的系列,原因是网上大部分的 tomcat 版本比较旧,此版本为 v11 最新的版本。 开源项目 从零手写实现 tomcat minicat 别称【嗅虎】心有猛虎,轻嗅蔷薇。 系列文章 web server apache tomcat11-01-官方文档入门介绍 web…

Flask简介

Flask简介 安装概述使用PyCharm创建一个Flask程序 Flask程序的基本结构初始化路由和视图函数启动服务器请求-响应循环 安装 概述 Flask算是小型框架,小到可以称为“微框架”。Flask 非常小,因此你一旦能够熟练使用它,很可能就能读懂它所有的…

基于python的舞蹈经验分享交流网站django+vue

1.运行环境:python3.7/python3.8。 2.IDE环境:pycharmmysql5.7/8.0; 3.数据库工具:Navicat11 4.硬件环境:windows11/10 8G内存以上 5.数据库:MySql 5.7/8.0版本; 运行成功后,在浏览器中输入&am…

Jetson Orin NX L4T35.5.0平台相机stop导致系统死机问题调试

1. 环境 硬件:国产OrinNX套件 系统版本: L4T35.5.0 相机: SDI 相机,1080P50fps 2. 问题描述 移植驱动已经开始正常采集相机图像,但是会出现以下问题: 采集流程如下: (1)start SDI camera (2)gst-launch-1.0采集图像 gst-launch-1.0 v4l2src device=/dev/vide…

【webrtc】MessageHandler 7: 基于线程的消息处理:切换main线程向observer发出通知

以当前线程作为main线程 RemoteAudioSource 作为一个handler 仅实现一个退出清理的功能 首先on message的处理会切换到main 线程 :main_thread_其次,这里在main 线程对sink_ 做清理再次,在main 线程做出状态改变,并能通知给所有的observer 做出on changed 行为。对接mediac…