运行时间中的对数

一、对分查找

给定一个整数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 <algorithm> // std::swap for c++ before c++11
#include <utility> // 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;
}

未完待续。。。

时间: 2024-11-06 16:11:31

运行时间中的对数的相关文章

【js】js中判断对数是否为空

1.将json对象转化为json字符串,再判断该字符串是否为"{}" var data = {}; var b = (JSON.stringify(data) == "{}"); console.log(b);//true 2.for in 循环判断 var obj = {}; var b = function() { for(var key in obj) { return false; } return true; } console.log(b());//tr

《数据结构与算法分析—C语言描述》pdf

下载地址:网盘下载 内容简介 编辑 <数据结构与算法分析:C语言描述(原书第2版)>内容简介:书中详细介绍了当前流行的论题和新的变化,讨论了算法设计技巧,并在研究算法的性能.效率以及对运行时间分析的基础上考查了一些高级数据结构,从历史的角度和近年的进展对数据结构的活跃领域进行了简要的概括.由于<数据结构与算法分析:C语言描述(原书第2版)>选材新颖,方法实用,题例丰富,取舍得当.<数据结构与算法分析:C语言描述(原书第2版)>的目的是培养学生良好的程序设计技巧和熟练的算

关于信息论中熵的定义与含义:

信息熵: 1. 热力学中的热熵是表示分子状态混乱程度的物理量.香农用信息熵的概念来描述信源的不确定度. 2. :两个独立符号所产生的不确定性应等于各自不确定性之和 3. 在信源中,考虑的不是某一单个符号发生的不确定性,而是要考虑这个信源所有可能发生情况的平均不确定性. 对于当个符号,它的概率为p时,用这个公式衡量它的不确定性: 而信源的平均不确定性,称为信息熵,用下面的公式表示: 注意:1. 当式中的对数的底为2时,信息熵的单位为比特.它底数为其它时,它对应的单位也不一样. 2. 信息熵是信息论

2.算法中的大O符号

大O符号是一种算法复杂度的相对表示方式. 1.大O表示算法的操作数,表示出算法运行的快慢 2.大O表示法指出了最糟糕情况下的运行时间,例如 简单查找的运行时间O(n),意味着在最糟糕的情况下,必须运行n次才能找到结果.O(n)就是算法的一个保证-----运行时间不可能超过O(n) 3.常见的一些大O运行时间 O(logn) 对数时间.这杨的算法包括二分查找 O(n) 线性时间,这样的算法包括简单查找 O(n*logn) 这样的算法包括快速排序 O(n2) 这样的算法包括 选择排序--一种较慢的排

最大熵模型中的数学推导

最大熵模型中的数学推导 查看原文,点击这里 0 引言 写完SVM之后,一直想继续写机器学习的系列,无奈一直时间不稳定且对各个模型算法的理解尚不够,所以导致迟迟未动笔.无独有偶,重写KMP得益于今年4月个人组织的算法班,而动笔继续写这个机器学习系列,正得益于今年10月组织的机器学习班. 10月26日机器学习班第6次课,身为讲师之一的邹博讲最大熵模型,他从熵的概念,讲到为何要最大熵.最大熵的推导,以及求解参数的IIS方法,整个过程讲得非常流畅,特别是其中的数学推导.晚上我把他的PPT 在微博上公开分

统计学习六:2.对数线性模型之最大熵模型

全文引用自<统计学习方法>(李航) 最大熵模型(maximum entropy model)同样是一类对数线性模型,主要由最大熵原理推导得出.本文主要介绍最大熵原理的基本概念.最大熵模型的推导过程以及模型的学习形式. 1.最大熵原理 最大熵原理是概率模型学习的一个准则.具体表现为,在给定多个约束条件之后,对于所有满足约束条件的概率模型所组成的集合,熵最大的模型一定是最好的模型,此时应选择该模型为最终模型. 假定离散随机变量X的概率分布为P(X),则其熵为: \[ H(P)=-\sum_xP(x

[math] 我对对数的最新理解

前言 作为资深学渣,每次遇到对数就极度恐慌.恐慌不是因为要考试---.而是因为不理解,只能靠死记硬背运算规则.不能进行有效的推理,这让我极度不爽,因为会忘记.故惶恐. 所以总是耿耿于怀,想要试图理解对数的本质.最近看到了一篇文章,再一次的加深了理解.故整理了一些自己最新的感悟记录如下: 新的理解 接下来说一下我的最新理解,那么对数到底要怎么理解呢? 我们要知道自然数与四则运算的演化过程,之后自然便能导出到底啥是对数了. 推理过程如下: 1.有一天,上帝创造了自然数.自然数除了天然存在以外,还有一

回声消除中的自适应算法发展历程

传统的IIR和FIR滤波器在处理输入信号的过程中滤波器的参数固定,当环境发生变化时,滤波器无法实现原先设定的目标.自适应滤波器能够根据自身的状态和环境变化调整滤波器的权重. 自适应滤波器理论 $x(n)$是输入信号,$y(n)$是输出信号,$d(n)$是期望信号或参考信号,$e(n)=d(n)-y(n)$为误差信号.根据自适应算法和误差信号$e(n)$调整滤波器系数. 自适应滤波器类型.可以分为两大类:非线性自适应滤波器.线性自适应滤波器.非线性自适应滤波器包括基于神经网络的自适应滤波器及Vol

数据结构和算法之时间复杂度和空间复杂度

前言 上一篇<数据结构和算法>中我介绍了数据结构的基本概念,也介绍了数据结构一般可以分为逻辑结构和物理结构.逻辑结构分为集合结构.线性结构.树形结构和图形结构.物理结构分为顺序存储结构和链式存储结构.并且也介绍了这些结构的特点.然后,又介绍了算法的概念和算法的5个基本特性,分别是输入.输出.有穷性.确定性和可行性.最后说阐述了一个好的算法需要遵守正确性.可读性.健壮性.时间效率高和存储量低.其实,实现效率和存储量就是时间复杂度和空间复杂度.本篇我们就围绕这两个"复杂度"展开