浅谈数据结构与算法分析学习及如何进行算法分析

数据结构-算法和算法分析 程序 = 数据结构+算法 阅读详情

一、前言

都说数据结构与算法分析是程序员的内功,想要理解计算机世界就不能不懂点数据结构与算法,然而这也备受争议,因为大多数的业务需求都用不上数据结构与算法,又或者说已经有封装好的库可以直接调用,例如Java中的ArrayList与LinkedList,直接调用add、remove等方法就已经可以完成插入删除等基本操作,实现业务逻辑,而无需关注其内部实现。如果说一样东西有没有用是根据用不用得上来衡量的话,那么只写业务逻辑确实没什么卵用,但是个人觉得有没有用是根据对自己有没有帮助来判断的,对自己有帮助==这个东西对我有用。

实话说,自己一开始是因为要准备企业面试才打算学习的数据结构与算法(趁着当当网搞活动的时候买了本《数据结构与算法分析Java语言描述》,打算在寒假的时候看),期间也看过不少文章,开复先生就曾经写过一篇文章聊算法的重要性,当时就觉得懂算法的人好厉害。但真正让我开始重视数据结构与算法的是Leetcode的第一道题目TwoSum.

给定一个数组和一个得数,返回数组中两个数字相加等于得数的这两个数字的索引
example

Given nums = [2, 7, 11, 15], target = 9,

Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].

我的解法

public class Solution {
    public int[] twoSum(int[] nums, int target) {
        int result[] = new int[2];
        for(int x = 0;x<nums.length;x++){
            for(int y = x+1;y<nums.length;y++){
                if((nums[x]+nums[y])==target){
                    result[0] = x;
                    result[1] = y;
                }
            }
        }
        return result;
    }
}

别人的解法

public int[] twoSum(int[] numbers, int target) { 
    int[] result = new int[2]; 
    Map<Integer, Integer> map = new HashMap<Integer, Integer>(); 
    for (int i = 0; i < numbers.length; i++) { 
        if (map.containsKey(target - numbers[i])) { 
            result[1] = i + 1; 
            result[0] = map.get(target - numbers[i]); 
            return result; 
        } 
        map.put(numbers[i], i + 1); 
    } return result; 
}

虽然都可以运行,但是明显别人的解法比我的优雅的太多太多。我的想法是用两个循环穷举,而别人是用了HashMap来存储数据,并且在循环中同时进行插入和判断,时间复杂度我的是O(n2),而别人的是O(n),如果数据规模大,运行时间则相差巨大。
可见同样的问题,不同人采取的解决方式是可以体现出差别的,这就关系到数据结构与算法

目前对数据结构与算法的理解
数据结构:为了解决问题采用的更有效率的数据组织方式
算法:为了解决问题采用的更加快速的程序设计思想

作为一个想在技术领域打拼十年的菜鸟,有必要学习数据结构与算法。讲真,这还是挺难学的,《数据结构与算法Java语言描述》这本书看了有一半,后面的还看不太懂,前面的又忘了,觉得有必要总结一下。
网络上也有人非常详细的总结了这本书前两章的内容数据结构与算法分析(一):基础算法分析,在这里就不重复造轮子了,只总结一些想加深印象的内容。

二、如何进行算法分析

(一)分析前提

计算模型:假设有无限内存的模型机做任一件简单的工作都恰好花费一个时间单位,并且不存在矩阵求逆或排序之类的想象操作。

(二)分析重点

1.运行时间(时间复杂度)
影响因素:输入大小n以及所使用的算法
2.占用内存(空间复杂度)
影响因素:算法本身存储占用、输入输出数据占用以及算法运行过程临时占用

(三)时间复杂度计算——大O标记法(运行时间的上界,注意简化常数项与低阶项)

example:计算 ∑Ni=0i3 的运行时间

public static int sum(int n) {
      int partialSum;
       partialSum = 0;
       for(int i = 1; i <= n; i ++)
       partialSum += i * i * i;
       return partialSum;
}

所有的声明均不计时间
第3行和第6行各占一个时间单元
第5行每执行一次占用4个时间单元(两次乘法、一次加法、一次赋值),执行N次共4N个时间单元
第4行初始化i占用1个时间单元、测试i<=n为N+1个时间单元、i++自增运算为N个时间单元,共2N+2个时间单元
忽略调用方法和返回值的开销,共6N+4个时间单元
故该方法是O(N)的

快速判断法则:
1.for循环
一个for循环的运行时间至多是该for循环内部那些语句(包括测试)的总运行时间乘以迭代的次数
2.嵌套的for循环
从里向外,一组嵌套循环内部的一条语句总的运行时间为该语句的运行时间乘以该组所有的for循环的大小的乘积
3.顺序语句
各语句运行时间求和
4.if/else语句
一个if/else语的运行时间不超过 判断的运行时间+if语句/else语句中较长的运行时间

分析的基本策略是从内部(或最深层的部分)向外展开工作的。有方法调用则首先分析方法调用;有递归过程,则具体情况具体分析

(四)空间复杂度计算

当算法占用空间大小不随数据量n变化而变化,其空间复杂度可记为O(1)
当算法占用空间大小随数据量n变化而线性变化,其空间复杂度可记为O(n)

在程序开发中,我们所指的复杂度不做特别说明的情况下,就是指时间复杂度。现在的硬件发展速度之快使得我们完全可以不用考虑算法所占的内存,通常都是用空间换取时间。加之算法的空间复杂度比较难算,所以我们都侧重于时间复杂度。

三、数据结构与算法分析学习目标

学习,要以解决问题为导向,因此要:
1.了解各种数据结构的结构性质,以便遇到问题可以快速选取合适的数据结构
2.了解各大算法的性能及应用场景,以便遇到问题可以快速选取合适的算法


参考资料及资源站点
《数据结构与算法分析:Java语言描述》
数据结构与算法动态可视化中文站点
数据结构与算法/leetcode/lintcode题解

Zynq7000混合启动方案:QSPI Flash引导与eMMC ext4文件系统部署实战 本文详细介绍了Zynq7000平台的混合启动方案,结合QSPI Flash引导与eMMC ext4文件系统部署,解决嵌入式Linux系统启动可靠性与大容量存储需求。通过硬件连接配置、分区规划、Petalinux工程配置及实战部署步骤,帮助开发者高效实现系统优化,提升启动速度和文件系统性能。 阅读详情

相关推荐

Eplan2022 复制已有的宏文件生成新的原理图宏文件

Eplan2022 新建原理图宏文件

haier123888的博客 1万+

数据分析各种算法的总结;

常用机器学习算法比较 聚类算法总结 聚类的定义: 聚类也称为聚类分析,指将样本分到不同的组中使得同一组中的样本差异尽可能的小,而不同组中的差异尽可能的大。 聚类得到的不同的组称为簇,发现对象簇,使得同一个簇内的对象尽量相似,不同簇间的对象尽量不同。 聚类和分类的区别 无监督学习与分类不同,没有事先定义的类别标记。分类是一种监督学习,聚类是一种无监督学习,二者最主要的区别是聚类的样本没有类标号,而...

weixin_42712867的博客 3703

Windows下构建ImGui.Net

工具 Visual Studio 2017 操作 下载项目 git clone https://github.com/mellinoe/ImGui.NET.git 编译 右键以下两个项目并调试: ImGui.NET.SampleProgram ImGui.NET.SampleProgram.XNA Error fix 中间遇到一些问题: SDK版本不对 去微软官网下载安装对应版本 由于设置了代理被远程服务器拒绝连接 关闭代理(也许在环境变量中) nuget源无对应资源,404 NOT FOUN

jojozym的博客 1486

数据结构和算法概述及算法分析

数据结构与算法

打怪升级 3363

嵌入式工程师必看:BLDC电机驱动电路设计全流程(附MOS管选型指南)

本文为嵌入式工程师提供了BLDC电机驱动电路设计的全流程实战指南。文章深入解析了三相全桥逆变电路的核心原理,并重点阐述了功率MOSFET的选型关键参数,如Vds、Rds(on)和Qg。同时,详细介绍了栅极驱动设计、PCB布局布线要点及调试安全步骤,旨在帮助开发者构建稳定高效的BLDC驱动系统。

weixin_29194817的博客 587

阿里云大模型 ACP 认证教材内容突变?这些改动藏着通关密码,不看亏大!

【摘要】核心章节大换血,安全合规融入实战场景,大模型微调用数学深度解析,部署章节带来阿里云产品对比实战攻略,甚至整章内容被替换成藏满学习彩蛋的行业趋势指南。这些改动不仅重塑考试重点,更暗藏官方命题风向——安全合规考场景方案,微调原理考几何解析,部署设计考分析框架。无论你是数学小白还是部署新手,这篇攻略都将带你吃透变动逻辑,附赠急救包和考点清单,帮你抓住这些“隐形加分项”,速来解锁通关秘籍!

davidkorhenn的博客 1755

数据分析的常见算法

十大数据分析算法 1.C4.5(分类决策树) 决策树算法需要解决的两个主要问题: 1)先选择哪个属性,后选择哪个属性来进行分裂?2)什么时候树停止生长? 这里,C4.5算法是这样解决的: 1)用信息增益(熵差)率来选择属性分裂;2)构造树的过程中进行剪枝操作降低过拟合风险。 这里引出“信息熵”的概念。“熵”是对混乱程度的度量,越乱熵越大,是一个度量样本集合纯度最常用的指标。划分节点处到底用哪个属性的时候,希望节点处属性纯度大,也就是熵更小。 2.K-均值算法 3.SVM 4.Apriori算法 衡

phthon1997的博客 8852

U8 API接口开发踩过的坑

U8 API接口开发踩过的坑

haiyang5233233的专栏 1655

算法分析01--算法的基本概念

算法介绍

一个软件开发者的成长记录 1818

K8S搭建(centos)完整版

每个人都有惰性,但不断学习是好好生活的根本,共勉!

感谢阅读 4144

结构函数详解

C3M系列覆盖从1 kW到60 kW功率范围,器件Rdson低、开关速度快(Eon/Eoff低),支持高温工作(结温高达175–225°C)。型号电压 (V)Rdson (mΩ, 典型@25°C)电流 (A, 连续@25°C)封装类型典型应用功率 (kW)65012022TO-247-41–106506035TO-247-35–2065060355–2012002180TO-247-310–40120016100TO-247-420–601200。

专注于前沿技术的探索与实践,热衷于从代码逻辑、架构设计到行业应用等多维度深挖技术本质。期待在技术之路上与你共同成长~ 151

对数据结构与算法的浅谈

前些天,突然看到了一篇关于数据结构的文章,让我受益良多! 我来说说我以前到现在的看法: 大二上了一门叫数据结构的课程,当时认为很无聊、枯燥,感觉没什么用处。 当时的感觉,就是一些数组、链表、栈、队列、二叉树······也用不到编程中。 大三上又上了一门算法分析与设计的课程,同上,不知道该如何用。 直到前些天,一位前辈跟我说要好好学学数据结构和算法,我开始复习数据结构了!我复习数据结构的时候,看...

qq_42320432的博客 910

多准则决策方法体系(AHP、熵权法、随机森林、加权线性法、TOPSIS、模糊综合评价)

多准则决策方法体系的基础,是由三大赋权方法和三大评价框架构成的 “3+3” 核心模块。赋权方法聚焦于准则重要性的量化,评价框架则专注于多准则信息的综合集成,二者共同覆盖了从 “确定权重” 到 “输出结果” 的全流程决策需求。

```On Earth, Be Water, By Coding``` 521

java数据结构与算法分析3 代码_Java 浅谈数据结构和算法

以前不管自己还是朋友在面试java工程师岗位的时候,都会被问到这样的问题:“介绍下java中的数据结构和算法”。很多朋友被问到的时候发现无从下口,甚至特别是一些初级java工程师更是一脸懵逼!那么本篇文章就针对数据结构和算法给大家简单介绍下。首先要知道我们为什么要学习数据结构和算法?这里举个简单的例子。编程好比是一辆汽车,而数据结构和算法是汽车内部的变速箱。一个开车的人不懂变速箱的原理也是能开车的...

weixin_39630771的博客 100

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

数据结构与算法分析—浅谈

大家好,这一节我们讲关于数据结构与算法分析开篇内容。 为什么在计算机课程中会有这一章节呢,数据结构作为新兴的独立研究内容,主要是现在计算机处理的非纯数字内容越来越复杂,而普通大众所使用的微型计算机在处理速度和时间上并不完全满足企业级的应用需求。只要你打算做为商业用途,那么无论你的项目规模如何,都需要谨慎地考虑用户空间的需求极限。 以前我有打过一个比方,为什么要研究和学习数据结...

iteye_18636的博客 120

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

如何系统地学习数据结构与算法?

不 BB,直接上干货,非科班出生,毕业工作后才开始学算法,到目前学了 4 年 !!! 为了让你对数据结构和算法能有个全面的认识,我画了一张图,里面几乎涵盖了所有数据结构和算法书籍中都会讲到的知识点。 这里面有10个数据结构:数组、链表、栈、队列...

程序员吴师兄的博客 2267

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

【数据结构】初始数据结构,浅谈数据结构与算法复杂度

数据结构第一课开课了!

纤手破新橙的博客 500

浅谈算法和数据结构: 一 栈和队列

浅谈算法和数据结构: 一 栈和队列 最近晚上在家里看Algorithems,4th Edition,我买的英文版,觉得这本书写的比较浅显易懂,而且“图码并茂”,趁着这次机会打算好好学习做做笔记,这样也会印象深刻,这也是写这一系列文章的原因。另外普林斯顿大学在Coursera上也有这本书同步的公开课,还有另外一门算法分析课,这门课程的作者也是这本书的作者,两门课都挺不错的。 计算机程序离不开算...

m0_37316406的博客 224

浅谈算法和数据结构(1):栈和队列

浅谈算法和数据结构(1):栈和队列 2014/11/03 · IT技术 · 2 评论 · 数据结构, 栈, 算法, 队列 分享到: 60 S...

257
下一篇: Struts2基础学习总结
LAVAGUE
博客等级 码龄10年 11粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值