首页 > 编程语言 >数据结构与算法

数据结构与算法

时间:2024-02-28 21:59:56浏览次数:28  
标签:多项式 复杂度 算法 时间 NP 数据结构

绪论

数据结构的基本概念

数据: 是信息的载体, 分整数型非整数型数据
数据项: 构成数据元素的最小不可分割单位, 如学生的成绩
数据元素: 数据的基本单位, 作为一个整体存储, 如每个学生的信息
数据类型: 具有相同性质的计算机数据的集合, 以及在这个集合上的一系列操作, 比如int、str、数组、类等, 分为简单类型(原子类型)构造类型(结构类型), int、float等为简单类型, 数组、类等为构造类型

数据结构的定义: 按照某种逻辑关系组织起来的一组数据, 按一定的存储方式存储在计算机的存储器中, 并在这些数据上定义了一组运算的集合
数据结构的组成:

  1. 逻辑关系
    1. 集合
    2. 线性关系
    3. 树结构
    4. 图结构
  2. 存储方式
    1. 顺序存储
    2. 链式存储
  3. 对数据的操作

算法的基本概念

算法分析

算法的五个要素:

  1. 输入
  2. 输出
  3. 有穷性
  4. 确定性
  5. 可行性

描述算法的方法:

  1. 自然语言
  2. 流程图
  3. 伪代码
  4. 程序设计语言

评价算法的方法:时间复杂度、空间复杂度、鲁棒性.....

时间复杂度

算法的频度:每条代码执行的次数
算法的时间耗费:各条代码执行的总次数
时间复杂度O( ): 括号中为对时间耗费影响最大的因子,可以为\(n^2、n^k、log_2n、n! .....\)等

NP问题

P问题(多项式时间问题): 能找到一个能在多项式的时间里解决它的算法的问题, 这种算法叫多项式时间算法。另一类为指数时间算法, 其时间复杂度不能用多项式函数界定

NP问题: 不确定能否在多项式时间内找到一个解, 但能在多项式时间内验证一个解(也就是说不一定存在一个多项式解决算法, 但存在多项式检查算法)

NP完全问题(NPC问题): 每一个可能解都可以在多项式时间内验证的NP问题

标签:多项式,复杂度,算法,时间,NP,数据结构
From: https://www.cnblogs.com/fruition111/p/18041991

相关文章

  • 2024牛客寒假算法基础集训营6 题解 ( A,B,C,D,E,I)
    2024牛客寒假算法基础集训营6题解(A,B,C,D,E,I)A 宇宙的终结题意找到\([l,r]\)区间中有多少数恰好等于三个不同素数的乘积思路数据范围很小,可以考虑暴力,遍历\([l,r]\)区间内每个数,拿每个小于当前数的素数一直往下除,判断是否存在能被恰好3个素数整除的情况代码/********......
  • (8)宽带信号的空间谱估计算法
    空间谱估计理论与算法(8)宽带信号的空间谱估计1引言目前,对宽带信号处理算法的研究主要分为两类:1基于不相干信号的处理方法(ISM)。这类算法处理的主要思想是将宽带数据分解到不重叠频带上的窄带数据,然后对每个频带进行窄带信号子空间处理,从而获得初始角度的估计;再通过对这些初始估......
  • 加密算法(三级等保)
    常见的加密算法对称加密算法DES、3DES、DESX、Blowfish、IDEA、RC4、RC5、RC6和AES非对称加密算法RSA、ECC(移动设备用)、Diffie-Hellman、ElGamal、DSA(数字签名用)Hash算法MD2、MD4、MD5、HAVAL、SHA、SHA-1、HMAC、HMAC-MD5、HMAC-SHA1块加密概念块加密,英文BlockCyper......
  • PID 控制算法
    PID控制算法PID是一种用于调节系统的反馈控制方法,简单有效广泛用于数据控制,其名称代表三个主要的控制参数:比例(Proportional)、积分(Integral)、和微分(Derivative)。例如往水缸加一米深的水,我加水的速度应当由以下三点决定:当前水深距离目标的差距。差距越大应当加水越快(P)如果水......
  • L-BFGS-B(Limited-memory Broyden–Fletcher–Goldfarb–Shanno )算法理解 —— 内存
    本文主要讲下个人对数值优化算法中几种常见算法的理解。什么是优化算法?给出函数f(X),现在要求minf(X)时的X值,这就是最优化问题。1.共轭梯度法方程:A*x=b,A矩阵为对称正定矩阵,b为向量,目标为求解出向量x。个人认为共轭梯度法并不能被当做是一个真正的优化算法,因为共轭梯度......
  • day44 动态规划part6 代码随想录算法训练营 518. 零钱兑换 II
    题目:518.零钱兑换II我的感悟:递推公式,我没写错。是初始化写错了。这种求多少种的,要考虑1种,是空集合选1中。而那些考虑能背最大的价值,要从0初始化,0的含义值无价值。 理解难点:递推公式,是累加dp[j]+=dp[j-conins[i]]初始化的含义 dp[0]=1听课笔记: 代码示例:cl......
  • day44 动态规划part6 代码随想录算法训练营 卡尔网52题
    题目:52.携带研究材料我的感悟:背模板,记下来,就好了。理解难点:听课笔记:代码示例:n,v=map(int,input().split())weight_list=[]value_list=[]for_inrange(n):weight,value=map(int,input().split())weight_list.append(weight)value_list.a......
  • day44 动态规划part6 代码随想录算法训练营 完全背包理论
    题目:完全背包理论我的感悟:记忆中理解。理解难点:为什么正序就是用多次?因为正序是借用本层左侧的状态,倒序是借用上一层的状态。演示:打印DP:示例代码:查看代码#01背包deftest_CompletePack1(weight,value,bagWeight):dp=[0]*(bagWeight+1)f......
  • 复习回顾-动态规划算法-474. 一和零
    注意点&感悟:不会,就抄一遍,默写一遍,总能会的。题目链接:474.一和零自己默写的代码:classSolution:deffindMaxForm(self,strs:List[str],m:int,n:int)->int:#初始化#外层m个0,内层n个1dp=[[0]*(n+1)for_inrange(m+1)]......
  • 数据结构【线段树】
    对于一个数据结构而言,我们总要能对其进行两件事:修改和操作。操作在这里是一个专有名词,专门指代求最值、求和等操作,具体能指代什么操作之后再聊。 如果朴素的用数组进行存储,那么修改是O(1)的,而操作往往是O(n)的。当操作指的是求和的时候,我们可以使用前缀和算法,前缀和使得操作是O(......