算法运行时间中的对数

【0】README

0.1) source code and text description are from data structure and alg analysis ;


【1】分析算法最混乱的方面大概集中在对数上面, 除分治算法外,可将对数最常出现的规律概括为下列一般法则:

1.1)如果一个算法用常数时间(O(1))将问题的大小削减为其一部分(通常是1/2),那么该算法就是 O(logN);
1.2)如果使用常数时间只是把问题减少一个常数(如将问题减少1),那么这种算法就是 O(N);


【2】下面,我们提供具有对数特点的3个荔枝:

Example1)二分查找(对分查找) 注意:二分查找的前提是序列已经有序
这里写图片描述

  • 源代码(此算法成立的前提是 M>=N) :
    https://github.com/pacosonTang/dataStructure-algorithmAnalysis/blob/master/chapter2/p22.c
    这里写图片描述
  • 算法分析(Analysis):
    • A1)显然,每次迭代在循环内的所有工作花费为O(1), 因此分析需要确定循环的次数;循环从 high-low=N-1开始并在 high-low >=-1 时结束;
    • A2)每次循环后high - low 的值至少将该次循环前的值减半;于是,循环的最多次数为 | log(N-1) |(向上取整)+2;
    • A3)举个例子:若high-low =128,则在各次迭代后 high - low 的最大值为 64、32、16、8、4、2、1、0、-1;因此运行时间为 O(logN);

Example2)欧几里得算法——计算两数的最大公因数

  • 两个整数的最大公因数(greatest common divisor):它是同时整除二者的最大整数,如GCD(50,15)=5;
  • 源代码: https://github.com/pacosonTang/dataStructure-algorithmAnalysis/blob/master/chapter2/p23.c
    这里写图片描述
  • 时间复杂度: T(N) = O (logN)
  • 算法解说(Description)
    • D1)算法通过连续计算余数直到余数为0为止, 最后的非零余数就是最大公因数;
    • D2)可以证明, 在两次迭代后,余数最多是原始值的一半。(这点特别重要);
    • D3)迭代次数至多是2logN=O (logN);
  • 引申出一个定理:如果 M > N , 则 M mod N < M / 2 。(余数是小于除数N的, 记住这一点)

Example3)幂运算

  • Attention:我们用乘法的次数作为运行时间的度量;
    这里写图片描述
  • 源代码: https://github.com/pacosonTang/dataStructure-algorithmAnalysis/blob/master/chapter2/p24.c
    这里写图片描述
  • 时间复杂度: T(N)=O (logN) ;
  • 代码演示分析步骤
    这里写图片描述
  • 算法解说(Description):
    • D1)如计算X^62,用到了9次乘法而不是62次乘法:
      这里写图片描述
    • D2)显然, 所需要的乘法次数最多是 [ 2 * logN(向下取整) -1];
    • D3)实际上, 源代码中的 if(N == 1) return x; 不是必须的。为什么?自己去想其中的原因;(去掉后,运行结果完全一样);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/332042.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java项目:永和大王项目_Java项目:书评

java项目:永和大王项目本文是关于这本书的 Peter Verhas撰写的Java Projects Second Edition 我去年写的 这样一篇文章的目的通常是为了促进这本书的销售。 在这种情况下没有什么不同&#xff0c;但是由于这是我写的书&#xff0c;而且我是撰写评论的人&#xff0c;因此赞美这…

Struts2+Hibernate项目中的时间和日期问题

文章目录数据表中的 datetime 的数据如何通过 json 传送给前端仅展示其日期&#xff0c;而不展示时间日期控件日期时间数据展示问题日期时间数据存储问题场景一场景二场景三场景四数据表中的 datetime 的数据如何通过 json 传送给前端仅展示其日期&#xff0c;而不展示时间 数…

把一个人的特点写具体作文_把一个人的特点写具体作文

把一个人的特点写具体作文在日常学习、工作抑或是生活中&#xff0c;大家都跟作文打过交道吧&#xff0c;写作文可以锻炼我们的独处习惯&#xff0c;让自己的心静下来&#xff0c;思考自己未来的方向。那要怎么写好作文呢&#xff1f;下面是小编为大家整理的把一个人的特点写具…

spring boot简介_Spring Boot简介

spring boot简介在本教程中&#xff0c;我们将看一下Spring Boot&#xff0c;看看它与Spring框架有何不同。 我们还将讨论Spring Boot提供的各种功能。 什么是Spring Boot&#xff1f; 在开发企业级应用程序时&#xff0c;Spring是一个功能强大的框架。 它为我们提供了诸如依赖…

C语言的运算符的优先级与结合性+ASCII表

【0】README 0.1&#xff09; 内容来源于 C程序设计语言&#xff0c; 旨在整理出C语言的运算符的优先级与结合性&#xff0c; 如下图所示&#xff08;哥子 记了大半年都没有记住&#xff0c;也是醉了&#xff0c;每次都要去翻&#xff09;&#xff1b; 0.2&#xff09; 再补充…

退货退款的售后,如何返还金币/有偿优惠券的问题

假设买家购买了3个商品&#xff0c;商品的销售价是10元&#xff0c;商品总金额是30元 买家应付金额是 30 元&#xff0c;买家使用5个金币抵扣5元&#xff0c;买家实付金额是 25 元。 后来买家退货 2 件&#xff0c;怎么退款和退币呢&#xff1f; 要将金币分摊到每个商品上&a…

python orm框架sqlalchemy_python ORM框架:SqlAlchemy

ORM,对象关系映射&#xff0c;即Object Relational Mapping的简称&#xff0c;通过ORM框架将编程语言中的对象模型与数据库的关系模型建立映射关系&#xff0c;这样做的目的&#xff1a;简化sql语言操作数据库的繁琐过程(原生sql的编写及拼接等)&#xff0c;转而直接使用对象模…

javadoc提取工具_使JavaDoc保持最新状态的工具

javadoc提取工具在许多项目中&#xff0c;文档不是最新的。 更改代码后&#xff0c;很容易忘记更改文档。 原因是可以理解的。 在代码中进行更改&#xff0c;然后进行调试&#xff0c;然后希望在测试中进行更改&#xff08;或者&#xff0c;如果您使用的是更多TDD&#xff0c;则…

栈应用(中缀表达式转后缀表达式并计算后缀表达式的值)

【0】README 0.1&#xff09; 本文旨在总结 中缀表达式转后缀表达式并计算后缀表达式的值 的步骤&#xff0c;并给出源代码实现&#xff1b; 0.2&#xff09; 本文中涉及到的源代码均为原创&#xff0c;是对中缀转后缀和计算后缀的简单实现&#xff0c;&#xff08;旨在理清它…

用户/账户/账号的理解

文章目录用户账户账号关系用户 用户概念的理解&#xff1a; 用户就是使用者&#xff0c;可以是个人用户&#xff0c;也可以是机构用户。 账户 账户概念的理解&#xff1a; 账户&#xff0c;所谓“账”&#xff0c;就是系统根据“账”来存储和管理数据&#xff0c;类似记账…

azure 部署java_jClarity:在Azure上升级到Java

azure 部署java在互联世界公共基础设施的新时代&#xff0c;最大和最重要的两个方面是Java和OpenJDK的诞生和兴起。 因此&#xff0c;许多公司将时间和资源投入到构建最先进的技术上&#xff0c;以确保整个行业在未来几年内在AdoptOpenJDK上拥有丰富的质量&#xff0c;而且免费…

黑苹果sd卡认不出来_天生一对:新入苹果M1笔记本,DOCKCASE拓展坞弥补缺憾

2010年刚上大学那会&#xff0c;入手了人生第一台笔记本电脑&#xff0c;两边密密麻麻的各种接口&#xff0c;也没感觉到接口多少的价值&#xff1b;2016年年中入手了人生第一台苹果笔记本&#xff0c;第一次觉得电脑接口不够用&#xff1b;如今四年过去了电脑也到了更新换代的…

利用树的先序和后序遍历打印os中的目录树

【0】README0.1&#xff09;本代码均为原创&#xff0c;旨在将树的遍历应用一下下以加深印象而已&#xff1b;&#xff08;回答了学习树的遍历到底有什么用的问题&#xff1f;&#xff09;你对比下linux 中的文件树 和我的打印结果就明理了&#xff1b;0.2&#xff09;我们采用…

Hibernate常用API

文章目录删除指定的记录新增记录更新记录清空缓存将实体对象从缓存中清除将缓存中更新的数据同步到数据库把数据库中的数据刷到缓存中查询多个对象&#xff08;也就是查询多条记录&#xff09;查询指定ID的对象&#xff08;查询指定ID值的记录&#xff09;参考删除指定的记录 U…

solid设计原则_SOLID设计原则

solid设计原则介绍&#xff1a; Robert C. Martin定义了五项面向对象的设计原则&#xff1a; 小号英格尔-责任原则 笔封闭原则 大号 iskov的替换原则 我覆盖整个院落分离原则&#xff0c;并 d ependency倒置原则 这些一起被普遍称为SOLID原则。 在设计面向对象的系统时&a…

nosql简答什么是最终一致性_NoSql的三大基石:CAP理论BASE最终一致性

关系型数据库的局限NoSql出现在关系型数据库之后&#xff0c;主要是为了解决关系型数据库的短板&#xff0c;我们先来看看随着软件行业的发展&#xff0c;关系型数据库面临了哪些挑战&#xff1a;1、高并发一个最典型的就是电商网站&#xff0c;例如双11&#xff0c;几亿大军的…

二叉树的先中后序遍历

【0】README 0.1&#xff09;本文旨在理清二叉树的先中后序遍历&#xff0c; 以及如何建立二叉树等相关内容&#xff1b; 0.2&#xff09;本文涉及代码均为原创&#xff1b; 0.3&#xff09;本文中遍历后的打印结果&#xff0c;朋友您可以直接写出二叉树的节点构造出来&…

表达式树

【0】README 0.1&#xff09;本文旨在总结出表达式树的构建步骤&#xff0c; 其中还涉及到中缀转后缀表达式&#xff0c;以及如何计算 表达式树中的值&#xff1b; 0.2&#xff09;本文源代码均为原创&#xff1b; 0.3&#xff09; 其实&#xff0c; 实现一个简单的计算器&a…

Date/Timestamp/String/LocalDate/LocalDateTime

文章目录String 转成 DateDate 转成 StringString 转成 Timestamp获取系统当前的毫秒数获取系统当前的日期时间毫秒数转成 Timestamp毫秒数转成 DateTimestamp 转成 StringDate 转成 TimestampTimestamp 转成 Datejava.util.Date 转成 java.sql.Date将带T的日期时间转成正常的日…

python可以用来写什么工具_python写工具

谷歌开源 Python Fire&#xff1a;可自动生成命令行接口今天我们很高兴地宣布 Python Fire 开源。Python Fire 可从任何 Python 代码生成命令行接口(command line interfaces (CLIs))&#xff0c;简单地调用任意 Python 程序中的 Fire 函数以将那个程序自动地转化为 CLI。该库可…