• 算法分析_运行时间计算的一般法则C 语言复习


    法则 1:FOR 循环

          一次 for 循环的运行时间至多是该 for 循环内语句(包括测试)的运行时间乘以迭代的运行时间。

    法则 2:嵌套的 for 循环

          从里向外分析这些循环。在一组嵌套循环的内部的一条语句总的运行时间为该语句的运行时间乘以该组所有的 for 循环的大小的乘积。

    作为一个例子,下面的程序片段为:O(N²):

    for(i = 0; i < N; i ++)
    	for(j = 0; j < N; j ++)
    		k ++;

    法则 3:顺序语句

         将各个语句的运行时间求和即可(这意味着,其中的最大值就是所得的运行时间)。

    作为一个例子,下面的程序片段先用去 O(N),再花费 O(N²),总的开销也是 O(N²):

    for(i = 0; i < N; i ++)
    	A[i] = 0;
    for(i = 0; i < N; i ++)
    	for(j = 0; j < N; j ++)
    		A[i] += A[j] + i + j;

    法则 4:IF / ELSE 语句

          对于程序片段:

    if(Condition)
    	S1
    else
    	S2

          一个 if/else 语句的运行时间从不超过判断再加上 S1 和 S2 中运行时间长者的总的运行时间。

          (下面文字摘自资料:)

          显然在某些情形下这么估计有些过高,但绝对不会估计过低。其它的法则都是显然的,但是,分析的基本策略是从内部(或最深层部分)向外展开的。如果有函数调用,那么这些调用要首先分析。如果有递归过程,那么存在几种选择。若 递归实际上只是被薄面纱遮住的 for 循环,则分析通常是很简单的。

          例如,下面的函数实际上就是一个简单的循环,从而其运行时间为 O(N):

    long int Factorial(int N)
    {
    	if(N <= 1)
    		return 1;
    	else
    		return N * Factorial(N - 1);
    }

    其实这个函数实现的功能就是求 N 的阶乘:N!,可以试着分析一下。

    (待续)

  • 相关阅读:
    设计模式:Prototype 原型模式
    [C++STDlib基础]关于单字符的操作——C++标准库头文件<cctype>
    Android开发之简单的电子相册实现
    autotools入门笔记(二)——创建和使用静态库、动态库
    Dreamer 框架 比Struts2 更加灵活
    Redis集群明细文档
    【Servlet3.0新特性】第03节_文件上传
    POJ 3264 Balanced Lineup
    利用jquery对ajax操作,详解原理(附代码)
    C语言实现修改文本文件中的特定行
  • 原文地址:https://www.cnblogs.com/catprayer/p/1852944.html
Copyright © 2020-2023  润新知