算法设计与分析(期末复习重点)更新中

第一章 算法设计基础

  1. 算法的五大特性:输入、输出、可行性、有穷性、确定性
    (1)输入:一个算法有零个或多个输入。
    (2)输出:一个算法有一个或多个输出。
    (3)可行性:算法描述的操作可以通过已经实现的基本操作执行有限次来实现(每步可执行)。
    (4)有穷性:一个算法必须总是在执行有穷步之后结束,且每一步都在有穷时间内完成。算法的有穷性 意味着不是所有的计算机程序都是算法。
    (5)确定性:算法中的每一条指令必须有确切的含义,对于相同的输入只能得到相同的输出。
  2. 算法的复杂性:时间复杂性和空间复杂性

第二章 算法分析基础

大O符号:

[例] T(n)=3n-1
当n≥1时, T(n)= 3n-1≤3n= O(n)

[例] T(n)=5n2+8n+1
当n≥1时,5n2+8n+1≤5n2+8n+n=5n2+9n≤5n2+9n2≤14n2=O(n2)

公式推导递推问题:
在这里插入图片描述

常用的时间复杂度:Ο(1)<Ο(log2n)<Ο(n)<Ο(nlog2n)<Ο(n2)<Ο(n3) <…<Ο(2n)<Ο(n!) <Ο(nn)

第三章 蛮力法

  • 蛮力法的基本思想:蛮力法依赖的基本技术——遍历技术,即采用一定的策略将待求解问题的所有元素依次处理一次,从而找出问题的解。

熟记以下问题使用蛮力法的时间复杂度:

  • 冒泡排序:O(n2)
  • 0/1背包:典型子集问题, O(2n)
  • 任务分配:典型排列问题,O(n!)

其它蛮力法的算法时间复杂度:

  • 串匹配:BF算法:O(n*m)、KMP算法:O(n)
  • 选择排序:O(n2)
  • 最近对问题:O(n3)

第四章 分治法

分治法求解三个阶段:1.划分;2.求解子问题;3.合并;

分治法经典算法问题:

  • 数字旋转方阵
  • 归并排序
  • 快速排序
  • 最大字段和

快速排序

#include<iostream>
using namespace std;

void Quick(int r[],int first,int end);
int part(int r[],int first,int end);

int part(int r[],int first,int end)
{
   
    int i=first,j=end;
    while(i<j)
    {
   
        while(i<j&&r[i]<=r[j])  
            j--; //右侧扫描
        if(i<j)   //将较小记录交换到前面
        {
   
            int temp=r[i];
            r
  • 14
    点赞
  • 247
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值