热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

运行时间中的对数

一、对分查找给定一个整数X和A0,A1,A2,,AN-1,后者已排序,求使得AiX的下标i,如果X不在数据中,则返回i-1。分析:首先数据已经排序,那么取中间元素与X进行比较,若相等则返

一、对分查找

给定一个整数X和A0,A1,A2,...,AN-1,后者已排序,求使得Ai=X的下标i,如果X不在数据中,则返回 i=-1 。

分析:首先数据已经排序,那么取中间元素与X进行比较,若相等则返回下标;若不相等则比较其大小以确定搜索区域。

第二种采用递归方法查找。

 1 int binarySearch(const ElementType A[], ElementType X, int N)
2 {
3 int left, mid, right;
4 left = 0; right = N-1;
5 while(left <= right)
6 {
7 mid = (left + right)/2;
8 if(X < A[mid])
9 right = mid-1;
10 else
11 if(X > A[mid])
12 left = mid+1;
13 else
14 return mid;
15 }
16 return notFound;
17 }
 int binarySearch(const ElementType A[], ElementType X, int left, int right)
{
int left, mid, right;
left
= 0; right = N-1;
mid
= (left + right)/2;

if(X < A[mid])
right
= mid-1;
else
if(X > A[mid])
left
= mid+1;
else
return mid;
binarySreach(A, X, left ,right)

return notFound;
}

二、最大公因数,最小公倍数

最小公倍数*最大公因数=因数1*因数2;

欧几里德算法又称辗转相除法,用于计算两个正整数a,b的最大公约数。

定理:两个整数的最大公约数等于其中较小的那个数两数的相除后余数的最大公约数。最大公约数(greatest common divisor)缩写为gcd。 gcd(a,b) = gcd(b,r) (不妨设a>b 且r=a mod b ,r不为0)
int gcd(int m, int n)
{
int tem;
while(n >0)
{
tem
= m % n;
m
= n;
n
= tem;
}
return m;
}
#include  // std::swap for c++ before c++11
#include // std::swap for c++ since c++11
int gcd(int a,int b)
{
if (a < b)
std::swap(a, b);
return b == 0 ? a : gcd(b, a % b);
}

最小公倍数:

int LCM(int a,int b)
{
int temp_lcm;
temp_lcm
=a*b/GCD(a,b);//最小公倍数等于两数之积除以最大公约数
return temp_lcm;
}

三、求幂

3.1递归法

long power(long X, unsigned int N)
{
if(N == 0)
return 1;
if(N%2 == 0)
return power(X*X, N/2);
else
return power(X*X, N/2)*X;
}

3.2非递归法(收藏:利用二进制非递归求幂)

其中n为二进制,反转二进制求法:

REVERSE_BINARY(n)
while (n > 0)
2     do output (n mod 2)
3       n ← n / 2

6输出011,需要倒序输出为110.

NumberType optimized_pow_n(NumberType x, unsigned int n)
{
NumberType pw
= 1;

while (n > 0) {
if (n & 1) // n & 1 等价于 (n % 2) == 1
pw *= x;
x
*= x;
n
>>= 1; // n >>= 1 等价于 n /= 2
}

return pw;
}

 


推荐阅读
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文介绍了一个题目的解法,通过二分答案来解决问题,但困难在于如何进行检查。文章提供了一种逃逸方式,通过移动最慢的宿管来锁门时跑到更居中的位置,从而使所有合格的寝室都居中。文章还提到可以分开判断两边的情况,并使用前缀和的方式来求出在任意时刻能够到达宿管即将锁门的寝室的人数。最后,文章提到可以改成O(n)的直接枚举来解决问题。 ... [详细]
  • 3.223.28周学习总结中的贪心作业收获及困惑
    本文是对3.223.28周学习总结中的贪心作业进行总结,作者在解题过程中参考了他人的代码,但前提是要先理解题目并有解题思路。作者分享了自己在贪心作业中的收获,同时提到了一道让他困惑的题目,即input details部分引发的疑惑。 ... [详细]
  • 本文详细介绍了GetModuleFileName函数的用法,该函数可以用于获取当前模块所在的路径,方便进行文件操作和读取配置信息。文章通过示例代码和详细的解释,帮助读者理解和使用该函数。同时,还提供了相关的API函数声明和说明。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • C++中的三角函数计算及其应用
    本文介绍了C++中的三角函数的计算方法和应用,包括计算余弦、正弦、正切值以及反三角函数求对应的弧度制角度的示例代码。代码中使用了C++的数学库和命名空间,通过赋值和输出语句实现了三角函数的计算和结果显示。通过学习本文,读者可以了解到C++中三角函数的基本用法和应用场景。 ... [详细]
author-avatar
打酱油的伦
这个家伙很懒,什么也没留下!
Tags | 热门标签
RankList | 热门文章
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有