`
bardo
  • 浏览: 380930 次
  • 性别: Icon_minigender_1
  • 来自: 上海
博客专栏
D1407912-ab64-3e76-ae37-b31aa4afa398
浅述PHP设计模式
浏览量:11876
9d6df9f7-91da-3787-a37c-0e826525dd5d
Zend Framewor...
浏览量:10192
85b628bd-a2ed-3de2-a4b1-0d34985ae8b6
PHP的IDE(集成开发环...
浏览量:9563
社区版块
存档分类
最新评论

折半试乘查找算法计算超大整数平方根

    博客分类:
  • VC
阅读更多

折半试乘查找算法,听此名字,还不如直接试乘呢,直接试乘是没有范围的。此算法先确定一个范围,然后再试乘。并且试乘的积并不是原来的数。


正常的开方,我们是用以下公式:(a+b)^2=a^2+2ab+b^2。这相当易于手算。但不利于写程序代码。
对于超大整数开方,利用上述公式,代码是较为烦琐的。所以,这里介绍一个试乘折半查找算法。
数学根据如下:
我们有:
对于奇数,[(n+1)/2]^2-[(n-1)/2]^2=n
我们令:a+b=(n+1)/2 c+d=(n-1)/2
则:(a+b)^2-(c+d)^2=n
当ab=cd时,我们有:(a-b)^2-(c-d)^2=n
所以,如果n为完全平方,则有:c=d,所以,我们只要求出
a+b=(n+1)/2,c=d时,ab=c^2,或ab=d^2即可得到平方根。
举例说明如下:
对于:9
c+d=4,c=d=2, cd=4
a+b=5, 所以,ab=4时: a=4, b=1  a-b=3 即是平方根。
对于25:
c+d=12,c=d=6, cd=36
a+b=13, 所以,ab=36时: a=9, b=4  a-b=5 即是平方根。

对于偶数,[(n+2)/2]^2-[(n-2)/2]^2=4n
我们令:a+b=(n+2)/2 c+d=(n-2)/2
则:(a+b)^2-(c+d)^2=4n
同理我们也有(a-b)^2-(c-d)^2=4n
所以一样也有,如果n这完全平方,则有:c=d,所以,我们只要求出
a+b=(n+2)/2,c=d时,ab=c^2,或ab=d^2即可得到平方根。
举例说明如下:
对于:16
c+d=6,c=d=3, cd=9
a+b=10, 所以,ab=9时: a=9, b=1  (a-b)/2=8/2=4   即是平方根。
对于36:
c+d=16,c=d=8, cd=64
a+b=20, 所以,ab=64时: a=16, b=4  (a-b)/=12/2=6   即是平方根。

由此可见,算法就是简单地让 c=d, 并求出 ab=c^2,
其中, a+b=(n+1)/2 c+d=(n-1)/2(奇数)
       a+b=(n+2)/2 c+d=(n-2)/2(偶数) 
      
理论上来讲,如果是用10进制,40位的数字,如果用(a+b)^2=a^2+2ab+b^2公式法,要算40次。
但折半试乘查找算法却要试乘126次左右。
表面上看,可能前者快,但对于每一个10进制的位实际都要试根。要试出合适的2ab+b^2。也就多许多次加法和许多次减法。
但折半试乘查找算法只是将乘出的结果直接与目标数比大小。
所以,此算法的效率,必须经过测试才能证明。
另一方面,此算法的算法复杂度则远远小于平方和法的复杂度。
如果此算法效率高,则我们可以有这样的结论,并非算法复杂度高的算法效率一定高。

0
0
分享到:
评论

相关推荐

    折半查找算法的改进和程序实现

    在众多的搜索算法中,折半查找算法因其简单高效而被广泛应用。然而,随着数据量的不断增长,传统折半查找算法的性能在某些场合下已不能完全满足需求。本文将针对这一问题,探讨折半查找算法的改进方法,并给出相应的...

    折半查找算法在顺序表中插入一个元素讲解.pdf

    折半查找算法在顺序表中插入一个元素讲解 折半查找算法是一种常用的查找算法,它可以在已经排好序的顺序表中快速地找到某个元素。下面我们来详细讲解折半查找算法在顺序表中插入一个元素的过程。 折半查找算法的...

    折半查找的递归算法

    折半查找(也称为二分查找)是一种高效的查找算法,适用于有序数组。通过不断将查找区间对半分割,可以快速定位目标值的位置,时间复杂度为O(log n),其中n是数组长度。本文将详细介绍如何使用递归方法实现折半查找...

    静态查找表。实现有序表的折半查找算法

    ### 静态查找表与折半查找算法 在计算机科学中,静态查找表是一种用于存储数据并能够高效检索特定元素的数据结构。本篇文章将详细解释如何实现一个静态查找表,并利用折半查找算法(也称二分查找算法)来查询表中的...

    折半查找算法

    ### 折半查找算法 #### 一、简介 折半查找算法(Binary Search),也称为二分查找算法,是一种在有序数组中查找特定元素的高效算法。它的基本思想是在有序数组中通过比较中间元素与目标值来逐步缩小查找范围,直到...

    折半查找算法实现(C++).doc

    折半查找算法是数据结构与算法中的一种重要查找方法,它可以通过数学方法计算其时间复杂度。在本文中,我们将详细介绍折半查找算法的实现,并提供 C++ 语言的代码实现。 一、折半查找算法的基本概念 折半查找算法...

    zhebanchazhao.rar_折半 查找_折半查找_折半查找算法_查找_查找算法

    以下是关于折半查找算法的详细解释和应用。 一、算法描述: 1. 确定数组的起始索引(left)和结束索引(right),通常初始时left为0,right为数组长度减1。 2. 如果left ,则执行以下步骤: - 计算中间索引mid,即...

    利用折半查找整数m在数组中的位置。

    由N个有序整数组成的数列已放在一维数组中,给定程序MODI1.C中函数fun的功能是:利用折半查找整数m在数组中的位置。若找到,返回其下标值;反之,返回-1。 折半查找的基本算法是:每次查找前先确定数组中待查的范围...

    数据结构折半查找算法(C语言版)

    数据结构在计算机科学中占有重要地位,而折半查找算法是数据结构中一种高效搜索算法。本主题将深入探讨折半查找(Binary Search)算法,以及如何使用C语言实现这一算法。 折半查找,又称二分查找,是针对有序数组的...

    哈希、顺序、折半查找的算法代码

    本篇文章将详细讨论三种常见的查找算法:哈希查找、顺序查找和折半查找,并结合提供的文件名,我们将深入理解每种查找算法的实现原理以及它们在实际应用中的优缺点。 1. **哈希查找(Hash Find)** 哈希查找是一种...

    折半查找算法及matlab代码实现

    ### 折半查找算法及其MATLAB实现 #### 折半查找算法原理 折半查找算法是一种高效的搜索技术,尤其适用于已经排序的数组。该算法的基本思想是通过不断将搜索范围减半来查找目标值,因此也被称为二分查找。与线性...

    综合查找算法(顺序查找、折半查找、二叉排序树、哈希表)-数据结构课程设计

    本文将详细探讨四种常见的查找算法:顺序查找、折半查找、二叉排序树查找以及哈希表查找,并结合提供的"综合查找算法"课程设计项目,解析其在实际应用中的特点和优势。 **顺序查找**是最基础的查找算法,适用于任何...

    Java代码递归的折半查找算法

    ### Java代码递归的折半查找算法 #### 算法概述 递归版本的折半查找算法是一种高效的搜索技术,适用于已排序的数组。它的工作原理是将问题分解为更小的问题,直到找到目标值或确定目标值不存在于数组中为止。这种...

    C语言实现折半查找算法

    ### C语言实现折半查找算法 #### 知识点概览 1. **折半查找算法的基本原理** 2. **C语言实现折半查找的关键步骤** 3. **代码解析及优化建议** 4. **时间复杂度分析** 5. **适用场景与限制条件** #### 折半查找...

    折半查找 C语言 算法

    总的来说,掌握折半查找算法对于任何IT专业人士来说都是至关重要的,无论是在面试、编写高效的代码,还是解决实际问题中,它都是一种非常实用的工具。通过学习和实践C语言中的折半查找,你可以更好地理解和运用这个...

    折半查找的简单C语言算法

    使用折半查找,输入一个整数,查找是否在数组中,如在给出下标,否则-1

    顺序查找和折半查找在10个元素中查找20

    在给定的标题“顺序查找和折半查找在10个元素中查找20”中,我们关注的是两种基本的查找算法:顺序查找(Sequential Search)和折半查找(Binary Search)。这些算法在处理有序或无序数据集时各有优势,下面我们将...

    折半查找算法.ppt

    本书是折半查找算法的标准教材,目的是让大家知道好的程序设计和算法分析技巧,难得一见的好书!

Global site tag (gtag.js) - Google Analytics