数据结构之算法初涉(2)

什么是数据结构?什么是算法?我该怎么学习数据结构与算法? 01 前言 学习算法,我们不需要死记硬背那些冗长复杂的背景知识、底层原理、指令语法……需要做的是领悟算法思想、理解算法对内存空间和性能的影响,以及开动脑筋去寻求解决问题的最佳方案。相比编程领域的其他技术,算法更纯粹,更接近数学,也更具有趣味性。 本文将回顾数据结构与算法的基础知识,学习日常所接触场景中的一些算法和策略,以及这些算法的原理和他背后的思想,最后会动手写代码,用java里的数据结构来实现这些算法,如何去做? 02 基本概念回顾 2.1 什么是数据结构? 1)概述 数据结构是计算... 阅读详情

1 前言

    上节我们介绍了数据结构的基本概念,这次我们来介绍一下算法,数据结构和算法也是类似的关系。好的算法能大大提高一个程序的运行效率,例如:高斯算法求1,2,3...n个连续数的和,高斯给了我们n*(n+1)/2的公式,比起一个个加起来效率高的多,可见好的算法不仅对于现实世界,对于程序世界也是极好的~

2 详述

    算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或者多个操作。

2.1 算法的特性

·输入输出:具有零个或者多个输入,一个或者多个输出;

·有穷性:算法在执行有限的步骤后,自动结束而不会出现无限循环,并且每一个步骤在可接受的时间内完成;

·确定性:算法的每一个步骤都具有确定的含义,不会出现二义性;

·可行性:算法的每一步都是可行的,每一步都能执行有限次数完成。

2.2 算法设计的要求

·正确性:算法应该至少具有输入,输出和加工处理无歧义性,能正确的反应问题的需求,能够得到问题的正确答案;

·可读性:便于阅读,理解和交流;

·健壮性:当输入不合法时候,算法也能做出相关的处理,而不是产生异常或者莫名其妙的结果;

·时间效率高和存储量低:算法设计应该尽量满足时间效率高和存储量低的需求。

2.3 算法效率的度量方法

2.3.1 事后统计方法

    这种方法主要是通过设计好的测试程序和数据,利用计算机计时器对不同的算法编制的程序进行时间比较,从而确定算法效率的高低。

缺陷:

·必须实现编制好程序,需要花费大量时间和精力;

·时间的比较依赖计算机硬件和软件等环境因素;

·算法测试数据设计困难,有时候需要大规模的测试数据。

所以我们一般不考虑这种统计方法

2.3.2 事前分析估算方法

    在计算机程序编制前,依据统计方法对算法进行估算。

一个程序的运行时间,依赖于算法的好坏和问题的输入规模。所谓的问题输入规模是指输入量的多少。

在分析程序的运行时间时,最重要的是把程序看成是独立于程序设计语言的算法或者一系列的步骤。

2.4 函数的渐近增长

    给定两个函数f(n)和g(n),如果存在一个整数N,使得对于所有的n>N,f(n)总是比g(n)大,那么,我们说f(n)的增长渐近快要g(n)。

   对于最高次项的指数大的,函数增长随着n的增长,结果也会变得增长特别快。

   从上图看出来:判断一个算法的效率时,函数中的常数和其他次要项常常可以忽略,而更应关注主项(最高阶项)的阶数。

2.5 时间复杂度

    在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。算法的时间复杂度,也就是算法的时间度量,记作:T(n)  = O(f(n))。它表示随着问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐近时间复杂度,简称为时间复杂度。其中f(n)是问题规模n的某个函数。

    这样用大写O()来体现算法时间复杂度的记法,成为大O记法。

一般情况下,随着n的增大,T(n)增长最慢的算法为最优算法。

2.6 推导大O阶方法

2.6.1 常数阶

这个算法函数是f(n)=3,根据推导公式把3改为1,则为:O(1),成为常数阶。

2.6.2 线性阶

    分析算法的复杂度,关键就是分析循环结构的运行情况。

int i;

for(i = 0;i < n;i++){

/*时间复杂度为O(1)的程序步骤序列*/

}

上面的代码时间复杂度为O(n)。因为循环体中的代码要执行n次。

2.6.3 对数阶

    由于每次count乘以2之后,就距离n更近了一分。也就是说有多少个2相乘后大于n,则会退出循环。由2的x次方等于n,得到。所以这个循环的时间复杂度为O(logn)。

2.6.4 平方阶

    外层循环复杂度为O(n),内部又循环了n次。所以这段代码的时间复杂度为。

2.7 常见的时间复杂度

时间复杂度的大小顺序依次为:

2.8 最坏情况与平局情况

    最坏情况运行时间是一种保证,那就是运行时间不能再坏了。在应用中,这是一种最重要的需求,通常,除非特别指定,我们提到的运行时间都是最坏情况的运行时间。

平均运行时间是所有情况中最优意义的,因为它是期望的平均时间。

2.9 算法空间复杂度

    算法空间复杂度通过计算算法所需要的存储空间实现,算法空间复杂度计算公式记作:S(n) = O(f(n)),其中,n为问题规模,f(n)为语句关于n所占存储空间的函数。

若算法执行所需的辅助空间对于输入和输出量而言是一个常数,则称此算法为原地工作。空间复杂度为O(1)。

通常我们所说的复杂度指的都是时间复杂度。

3 结语


    以上是所有内容,希望对大家有所帮助。
Java的数据结构和算法 今天我们来简单介绍一下Java的数据结构和算法。 一、数据结构 1、数据结构的分类 2、数据结构的基本功能 二、算法 1、算法是什么 2、算法的特点 一、1、数据结构是计算机组织、存储数据的方式。简单来说就是,数据按指定的规则进行存储,从而得到一个有固定存储格式的数据集合,就称之为“数据结构” 数据结构又分为:①数组 (Array) ②栈 (Stack) ③队列 (Queue) ④链表 (Linked ... 阅读详情

相关推荐

保姆级教程:用Unity为麒麟系统打包Linux应用(含路径权限全攻略)

本文提供了一份详细的Unity跨平台开发指南,重点介绍如何在麒麟系统上打包和部署Linux应用。从开发环境配置、路径权限处理到性能优化和常见问题解决,全面解析了Unity项目在国产操作系统上的适配流程,帮助开发者高效完成跨平台应用开发。

weixin_28692867的博客 504

2021-03-15

摘 要 在我们的日常生活中,拍摄照片时我们不但要选择能拍的清晰的摄像机,而且还希望在同一场清下,我们所拍到的所有物体都是清晰的。但是由于摄像机会受到景深的限制,没有办法对拍摄的所有目标都聚焦,因此导致拍摄的照片聚焦部分是清晰的,但是不聚焦的部分就是模糊的,将同一个场景下拍摄的不同聚焦区域的图片融合成一张清晰图片的技术就是多聚焦图像融合技术,此项技术就可以很好地解决图像不清晰这一问题。更好地把图像的利用率提升起来。 传统的融合算法主要有基于空间域的算法和基于变换域的算法。多尺度变换的算法在多聚焦图像融合中

qq_35990565的博客 9448

维纳(Wiener)复原滤波器的三种推导形式及其在图像处理中的应用

本文深入解析了维纳(Wiener)复原滤波器的三种核心推导形式:卷积形式、矩阵向量形式和频域形式,并重点阐述了其基于线性最小均方误差(LMMSE)估计的核心思想。通过Python实战演示,展示了频域形式如何高效地在图像去模糊与噪声抑制之间取得平衡,是图像复原领域的经典且实用的工具。

net55的博客 577

数据结构(2)之算法初涉

1 前言 上节我们介绍了数据结构的基本概念,这次我们来介绍一下算法,数据结构和算法也是类似的关系。好的算法能大大提高一个程序的运行效率,例如:高斯算法求1,2,3...n个连续数的和,高斯给了我们n*(n+1)/2的公式,比起一个个加起来效率高的多,可见好的算法不仅对于现实世界,对于程序世界也是极好的~ 2 详述 算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令

Developer_Zhang的专栏 1994

机械臂速成小指南(八):标准DH法实战——从连杆坐标系到运动学方程

本文详细介绍了机械臂运动学建模中的标准DH法,从连杆坐标系的建立到运动学方程的求解,提供了实用的操作步骤和代码示例。通过DH参数表和变换矩阵的构建,帮助读者快速掌握机械臂运动学建模的核心技术,并解决实际应用中的常见问题。

oo7890的博客 211

哈工大2024春大数据挖掘期末考试回忆版试题

(3)现有一个用户数量远多于物品(还是物品远多于用户,忘了是哪个了)的情景,应该使用基于user-user的推荐系统还是item-itmen的推荐系统,说明原因。(1)L是n*n拉普拉斯矩阵,x是一个n*1列向量,证明对任意的x,(x)^TLx>=0(6分)(3)证明:p到o的K-可达距离,至少是o的K-distance(2分)(2)(1)的结果说明竞争率的上界是多少?(2)考Gain的意义,如何利用Gain选择划分点(2分)(2)说明如何利用划分后的数据进行验证(2分)(2)k可达距离是对称的吗?

ymd2002的博客 1890

4--贝叶斯 聚类算法

朴素贝叶斯 AdaBoost Bagging K-means

garbage回收中心 2864

JHU ICBM DTI Atlas纤维束模板介绍

JHU ICBM DTI atlas 纤维束的定位与功能介绍

machinelearning_er的博客 6422

使用交叉存取得到更快推荐算法

我们拓展大量新算法可以通过引入一个在线实验的初始剪枝阶段来进行测试,其满足两个属性:1对排序函数质量高度敏感,也就是确定最好算法只用很小的样本集。 2 在第二阶段预测的成果在于:在第一阶段衡量的度量对齐于核心的A/B评估度量。通过使用交叉存取技术,动态加速试验过程。第一阶段筛选最有希望的排序函数,第二阶段只使用这些筛选的函数,允许我们分配更少的成员到整体试验并减少整体试验持续时间。 使用一个重复的

poilkj110的博客 1362

华为OD机试 - 不含101的数(Python/JS/C/C++ 双机位C卷 100分)

本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新。小明在学习二进制时,发现了一类不含101的数,也就是:现在给定一个正整数区间,请问这个区间内包含了多少个不含101的数?输入的唯一一行包含两个正整数。输出的唯一一行包含一个整数,表示在区间内一共有几个不含101的数。8 1668 → “1000”

学Java,找哪吒 1250

educoder实训——计算几何形状的表面积与体积

educoder python实训

qq_41234663的博客 1230

算法导论-初涉

1. 对字典的value做排序,同时输出字典的key fre_dict = dict() sorted(fre_dict.items(), key = lambda x: x[1]) sorted(fre_dict.keys(), key=lambda x:(fre_dict[x],x)) 2. 统计一个列表里各个元素的出现次数 O(n) from collections import...

啦啦啦 365

C#实现每日定时执行制定程序(附完整源码)

C#实现每日定时执行制定程序(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 862

《算法和数据结构》数据结构篇

蓝桥杯你必须学会的算法

英雄哪里出来 4万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

数据结构和算法(初涉)

一、绪论 程序设计 = 数据结构 + 算法 数据结构 → 数据元素相互之间存在的一种或多种特定关系的集合 数据结构分为逻辑结构和物理结构 逻辑结构:数据对象元素之间的相互关系 物理结构:数据的逻辑结构在计算机中的存储形式 四大逻辑结构 集合结构:集合结构中的数据元素除了同属于一个集合外,它们之间没有其他任何关系(集合) 线性结构:数据元素之间是一对一的关系(链表) 树形结构:元素之间存在一种一对多的层次关系(树) 图形结构:数据元素之间是多对多的关系(图) * 物理结构 根据物理结

m0_53295613的博客 668

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

2_数据结构与算法

O Master basic algorithoms and design models. KR Master sort ,insert and research algorithoms. Master basic algorithoms about others. Master all kinds of data structure. Master common design model. sort ,insert and research algorithoms.

贵在坚持 5082

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

python数据结构与算法总结

python常用的数据结构与算法就分享到此处,本月涉及数据结构与算法的内容有如下文章: 《数据结构和算法对python意味着什么?》 《顺序表数据结构在python中的应用》 《python实现单向链表数据结构及其基本方法》 《python实现单向循环链表数据结构及其方法》 《python实现双向链表基本结构及其基本方法》 《python实现双向循环链表基本结构及其基本方法》 《py...

python之战 2万+

数据结构与算法

数据结构与算法 1.数据结构的概念 数据结构指的是一组数据的存储结构。 2.算法的概念 算法是指操作数据的一组方法 3.二者的关系 数据结构是为算法服务的,而算法要作用在特定的数据结构上。 4.最常用的数据结构预算法 数据结构:数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Tire树 算法:递归、排序、二分查找、搜索、哈希算法、贪心算法、分治算法、回溯算法、动态规划、字符串匹配算法。 一、算法的复杂度 1.1大O复杂度表示法: T(n)=O(f(n)). 其中T(n)表示代码执行的时间;n表示数据规

m0_52397715的博客 1万+

算法初涉

算法与程序设计以及数据结构紧密相关,是解决一个问题的完整的步骤描叙,是解决问题的策略,规则,方法,算法的描叙形式有多种,像传统的流程图,结构化流程图,以及计算机语言等。 算法概念 程序 = 数据结构 + 算法,是由N.Wirth(沃斯)提出来的,数据结构指的是数据与数据之间的逻辑关系,算法指的是解决特定问题的步骤和方法。 算法特征 有穷性 算法的有穷性是指算法必须能在执行有限...

cyjbdqn的博客 197

数据结构与算法 - 数据结构与算法进阶

本文介绍了常见数据结构(列表、栈、队列、链表、哈希表、树等等)与经典算法的例题及其实现方式

xian_x_的博客 2798

数据结构和算法:什么是数据结构,什么是算法

文章标题前言 前言   这几天在复习数据结构的

undefinedUser_1的博客 4870

数据结构及算法概述

​ 所谓的数据结构指的是用于研究数据元素之间的逻辑关系和存储关系,在对数据结构的定义中需要表示整个数据结构中的数据元素集合和数据元素之间的关系集合;​ 其中:D 表示数据元素集合;R 表示数据元素之间的关系集合;注意:​ 在运算过程中,具体运算的实现:​ 运算逻辑由逻辑结构决定;​ 具体实现算法由存储结构决定。​ 所谓的算法(Algorithm),指的是一个有穷规则(或语句、指令)的有序集合。​ 它确定了解决某一问题的一个运算序列。

weixin_65477256的博客 2758

数据结构(2)—算法

详细介绍了算法的特性,要求,空间复杂度和时间复杂度

在嵌入式嵌入式领域奋斗的程序猿的博客 1549

2.Python数据结构与算法 2.1算法和数据结构

Python数据结构与算法算法引入概念第一次尝试算法概念的提出算法的五大特性第二次尝试第一次尝试和第二次尝试的算法分析算法效率衡量执行时间反应算法效率单靠时间值绝对可信吗?时间复杂度与“大O记法”如何理解“大O记法”最坏时间复杂度时间复杂度的几条基本计算规则常见时间复杂度常见时间复杂度之间的关系Python内置类型性能分析list的操作测试list和dict的内置操作的时间复杂度数据结构引入概念算...

LIWEI940638093的博客 708

谈谈数据结构和算法这2个好基友[数据结构和算法]

本文为小甲鱼数据结构和算法教学视频的学习笔记 第一章:谈谈数据结构和算法这2个好基友   一、聊聊数据结构 1、为什么学数据结构?编程能力有质的飞越,不再停留在调用现成的API,做一个上档次的程序员。 2、什么是数据结构?数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及他们之间的关系和操作等相关问题的学科。 思考:好吧,简单来说程序设计 =数据结构 + 算法,数

天天爱增肥 1286
上一篇: 数据结构之概念初涉(1)
下一篇: 数据结构之线性表之顺序存储结构(3)
Kryptons
博客等级 码龄10年 2粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值