关于算法,我们都应知道的

33 个 JavaScript 开发者都应该知道的概念 你真的认为你了解多少 JavaScript?你可能知道如何,理解,甚至可以。但是你知道什么是类型化数组吗?你不需要现在就了解所有这些概念,但最终你会在你的职业生涯中用到它们。这就是我建议你的原因,因为你很可能会遇到其中一个主题,然后你会想要一个教程来完全理解它。 阅读详情

定义:

算法是指对特定问题求解步骤的一种描述。

 

 

特性:

(1)有穷性:算法是由若干条指令组成的有穷序列,总是在执行若干次后结束,不可能永不停止。

(2)确定性:每条语句有确定的含义,无歧义。

(3)可行性:算法在当前环境条件下可以通过有限次运算实现。

(4)输入输出:有零个或多个输入,一个或多个输出。

 

 

“好”算法的标准如下:

(1)正确性:正确性是指算法能够满足具体问题的需求,程序运行正常,无语法错误,能够通过典型的软件测试,达到预期的需求。

(2)易读性:算法遵循标识符命名规则,简洁易懂,注释语句恰当适量,方便自己和他人阅读,便于后期调试和修改。

(3)健壮性:算法对非法数据及操作有较好的反应和处理。例如,在学生信息管理系统中登记学生年龄时,若将21岁误输入为210岁,系统应该提示出错。

 

(4)高效性:高效性是指算法运行效率高,即算法运行所消耗的时间短。算法时间复杂度就是算法运行需要的时间。现代计算机一秒钟能计算数亿次,因此不能用秒来具体计算算法消耗的时间,由于相同配置的计算机进行一次基本运算的时间是一定的,我们可以用算法基本运算的执行次数来衡量算法的效率。因此,将算法基本运算的执行次数作为时间复杂度的衡量标准。

(5)低存储性:低存储性是指算法所需要的存储空间低。对于像手机、平板电脑这样的嵌入式设备,算法如果占用空间过大,则无法运行。算法占用的空间大小称为空间复杂度。

 

 

算法的两大分类:

一个是数据结构(数据对象):数、矩阵、集合、串、排列、图、表达式、分布等。

另一个是算法策略:贪心、分治、动态规划、线性规划、搜索等。

 

这两条线索是相互独立的:同一个数据对象(比如图)上有不同的问题(如单源最短路径和多源最短路径),就可以用到不同的算法策略(例如贪婪和动态规划);而完全不同的数据对象上的问题(如排序和整数乘法),也许就会用到相同的算法策略(如分治)。

 

 

如何学习算法(个人想法):

(1)HACK精神:对这个事物拥有这极高的热情,对这个事物有一种快速掌握的渴望,对这个事物不断问为什么,亲自去做并在这个过程中明白当初问为什么的到底是个啥以及明白这个问题的答案是什么。

(2)数学与逻辑:在我的学习编程或是在学习算法的过程中,无数次的实践告所我——算法的灵魂是数学以及思维逻辑。例如,在编程1+2+3+ …… +n时,采用 "for(int i=1;i<=n;i++) { sum+=i; }" 和直接用等差数列求和公式是完全不一样的。所以掌握一定的数学和逻辑方法是必要的。

(3)适合自己的学习材料:对于我来说,学习一样新的事物,学习的资料是十分重要的,或者直接说,学习的材料直接决定我第一次学习时的效率和深度;那么对于你来说,也是一样,找到真正适合自己的学习材料是你在学习前应该着重做的事情;那么,应该怎么找寻材料呢?例如,图书馆的图书,博客,个人网站等;需要注意的是,如果选择博客或个人网站作为学习材料,那个博客或个人网站应该有成体系的知识结构和层次。

(4)去做:当你看懂了材料所描述以后,立即需要做的就是去实现它——自动编程实现它,这是为了避免“产生了学会了的错觉,实际上是看懂了的感觉”。其次,也是最重要的,就是做好笔记,便于复习。在做笔记时,我的原则是“① 不做冗余的笔记——只有自己真正实践或理解才做;笔记的真正目的是为了以后的快速复习! ② 在自己所做的笔记中,无论知识怎么难,只要是理解了所做的笔记,如果在下一次去看,不能快速看懂的,就是垃圾一样的笔记!”

(5)适时复习:这一点没什么可说的,你可以参考“艾宾浩斯遗忘曲线”来自定义复习时间。

 

 

[ 注: 部分内容出自《趣味算法》作者:陈小玉 (人民邮电出版社) ]

你知道什么是算法吗? 你知道什么是算法吗? 算法的定义 对于算法的解释,全世界的定义是不唯一的。我们给出的算法的定义是:一系列用来解决单个或多个问题,或有执行计算功能的命令的集合。再结合上输入与输出,算法就是将输入转换为输出的一系列计算步骤的集合。 听起来很拗口,对不对? 没关系,我们可以把一个算法比作是一个菜谱。如图1-1所示,原材料就是输入,做出来的成品即为输出,而算法,就是做菜过程中的复杂步骤。 图1-1 算法... 阅读详情

相关推荐

关于算法,那些你不知道的事

关于算法,那些你不知道的事1.算法,不止于刷题提到算法,不管是科班出身还是半路出家的程序员可能都会说上几句,算法谁没学过谁不知道啊?对于走工业界路线而非学术路线的同学来说,算法学习的最大作用也许是找工作…… 毕竟工作后,绝大多数时候都用各种成熟的类库,少有自己实现高级数据结构和算法的时候。但刚结束一学期修的算法课,上得我还真跟没学过算法似的,让我大开眼界,虽然每次课上我都听的不是很懂,但每节都期盼着

西代零零发 1万+

算法

著名的计算机科学家图灵奖获得者N.Wirth(沃思)教授给出了一个著名的公式:算法+数据结构=程序,这说明数据结构和算法是程序的两大要素,二者相辅相成,缺一不可。 数据结构和算法之间存在着本质联系,在某一数据类型上,总要设计其上施加的运算,而只有通过对定义运算的研究,才能清楚地理解数据结构的定义和作用;在涉及运算问题时,总要与该算法所处理的对象和结果根据等联系起来进行考虑。 在本门课程中将大量...

mez_Blog的博客 927

全志T133-s3(Tina Linux)下RTL8723DS WiFi驱动移植与调试实战

本文详细介绍了在全志T133-s3平台(Tina Linux)上移植RTL8723DS WiFi驱动的完整流程,包括硬件连接、驱动源码获取、内核配置、系统适配、设备树配置以及常见问题排查。通过实战案例,帮助开发者快速解决SDIO接口通信、固件加载、电源管理等关键问题,实现稳定的WiFi功能。

weixin_30505225的博客 507

算法的五个重要特性和4个基本标准

算法的五个重要特性和4个基本标准 一个算法必须满足5大特性: 1、有穷性:一个算法必须执行有穷步后结束、 2、确定性:对于每种情况下所应执行的操作,在算法中都应该有确切的规定,不会产生二义性,使得算法的执行者和阅读者都能明确其含义以及如何执行。 3、可行性:算法中的所有操作都可以通过已经实现的基本操作运算执行有限次来实现 4、输入:一个算法应该有0个、一个或多个输入。 5、输出:一个算法应该有一个或多个输出。 评价算法的优劣应该从以下几个方面: 1、正确性:你的算法一定是正确的。 2、可读性:你的算法一定易

HNGS04290724的博客 3万+

【破局之道】LangChain4j 0.31.0 + Java 8 + Spring Boot:在“过时”环境中构建本地大模型应用的实战指南

本文为使用Java 8和Spring Boot等“过时”技术栈的团队提供了构建本地大模型应用的实战指南。通过采用LangChain4j 0.31.0这一兼容版本,结合Ollama部署本地大模型,开发者无需升级JDK即可在现有项目中快速集成AI能力,实现智能问答、文档摘要等功能,为传统项目注入创新活力。

t4y5u6i7o的博客 557

AFC自动售检票系统与人工智能AI结合的关键应用方案

针对售检票、大客流管理、设备运维及服务优化提供了可落地的技术支持和实现细节,可作为地铁智慧交通项目的实践参考

leijinquan01的博客 1513

算法学习的重要性

计算机的学习离不开数学理论与知识的学习和运用,当编程人员受限于计算机软硬件等客观条件限制时,要提高程序运行效率,就可以通过优化数学算法来优化编程,能够以很小的代价提高程序运行效率。通过数学模型的建立,利用数学算法对编程逻辑进行分析设计,不断优化数学算法,降低其时间复杂度、空间复杂度,最大限度解决重复编译的情况,提高编程效率。

m0_61066647的博客 2254

Docker部署OnlyOffice踩坑实录:解决editor.bin下载失败的3种姿势

本文详细解析了Docker部署OnlyOffice时editor.bin下载失败的常见原因,并提供了三种核心解决方案。重点剖析了容器网络配置、Nginx反向代理(特别是proxy_pass设置)以及安全策略调整,帮助开发者彻底解决静态资源加载问题,确保文档协作平台稳定运行。

weixin_29281941的博客 871

数据结构(2)—算法

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

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

Xilinx FPGA资源解析与使用系列——Transceiver(六)关键时钟梳理之TXOUTCLK和RXOUTCLK

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 Xilinx FPGA资源解析与使用系列——Transceiver(六)transceiver内部关键时钟梳理之TXOUTCLK和RXOUTCLK前言TXOUTCLKRXOUTCLK 前言 前面我们已经研读了 transceiver的参考时钟 和复位的相关内容。 但是随着内容的深入,越来越多的信号出现在我的面前。 例如 TXOUTCLK、TXUSERCLK、TXUSERCLK2 RXOUTCLK、RXUSERCLK、RXUSERCLK2

gzy0506的博客 8088

GD32H757的can通信配置,提供方案参考!

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值。

**My Coding Family** 1834

最差的算法工程师能差到什么程度?

点击上方“五分钟学算法”,选择“星标”公众号重磅干货,第一时间送达转自Cver编辑:Amusi | 来源:知乎https://www.zhihu.com/question/34754...

程序员吴师兄的博客 1528

基于深度学习YOLOv10的障碍物检测系统

为了方便用户使用,我们将开发一个图形用户界面(GUI),允许用户上传图像或视频流并查看检测结果。我们使用PySide6开发GUI界面,它是Qt框架的Python绑定,适用于开发跨平台的桌面应用程序。本文详细介绍了如何基于YOLOv10模型构建一个障碍物检测系统,包括数据集准备、模型训练和推理到图形用户界面的开发。通过这一系统,用户可以方便地上传图像或视频流并进行障碍物检测,广泛应用于自动驾驶、机器人导航等领域。

斌擎科技 1052

【模板】树算法之LCA(最近公共祖先)

LCA(最近公共祖先) Tarjan \ 倍增

csdn可能自动偷偷把博客设为vip可见,可以联系我改回去 526

【SpringBoot 3.x 第56节】再见 Feign?原生 HTTP 接口强势上位,这才是微服务调用的正确姿势!

🏆本文收录于《滚雪球学SpringBoot 3》,专门攻坚指数提升,本年度国内最系统+最专业+最详细(永久更新)。    本专栏致力打造最硬核 SpringBoot3 从零基础到进阶系列学习内容,🚀均为全网独家首发,打造精品专栏,专栏持续更新中…欢迎大家订阅持续学习。 如果想快速定位学习,可以看这篇【SpringBoot3教程导航帖】,你想学习的都被收集在内,快速投入学习!!两不误。    若还想学习更多,可直接前往《滚雪球学SpringBoot(全版本合集)》,涵盖SpringBoot所有版本教学文章

**My Coding Family** 1017

Statistics and Machine Learning Toolbox

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

每个程序员应该知道的 50 个算法(一)

在计算领域,从基础理论到实际应用,算法都是推动力。在本次更新版中,我们进一步深入探讨了算法的动态世界,扩展了视野,解决了诸多紧迫的现实问题。从算法的基础入手,我们走过了各种设计技巧,深入探讨了线性规划、页面排名、图论等复杂领域,并对机器学习进行了更深层次的探索。为了确保我们走在技术发展的前沿,我们增加了对序列网络、LLMs、LSTM、GRUs 的深入讨论,现在还包括了密码学以及大规模算法在云计算环境中的部署。推荐系统中算法的重要性,作为当今数字时代的核心元素,也被详尽阐述。要有效运用这些算法,理解其背后的数

龙哥盟 1389

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

【万字长文】不学算法你也应该知道的算法知识

兄弟,想一起学习算法吗?想一起变强吗?想毕业的时候在算法方面吊打面试官吗?想成为刷题狂人吗?

布小禅的博客 8138

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

与C知道的第一次亲密接触

人工智能科技兴, 电脑芯片功能强, 智能机器把世界改, 把人类的生活变异形。 自主学习算法深, 智能机器人把智慧收藏, 多元化的知识库, 把人类的智慧放大。 计算机把世界改, 自动化的科技发展强, 机器智能赋予生命, 把人工智能变得更流行。 把人工智能发展开, 机器智能把世界改变, 让人类的生活更美好, 把人工智能发展到更高。

汉阳Hann's Home 2万+

C++中你应该知道的23种算法

C++中你应该知道的23种算法

科技室的博客 6732

程序员必须要知道的算法!

导语: 在程序员圈子里,经常讨论哪家大厂的算法如何厉害。那么,算法这个让程序员情感复杂的东西,到底“厉害”在何处?算法对于程序员是否重要?作为一个合格的程序员,应该掌握哪些算法?本期,就和大家一起探索,“算法到底是什么”。 应对灯泡不亮的算法流程图 算法的前世今生 算法(algorithm)作为在数学(算学)和计算机科学之中的一个有效方法,是一个被定义好的、计算机可施行指示的有限步骤或次序,常用于计算、数据处理和自动推理。它包含了一系列定义清晰的指令,并可于有限的时间及空间内清楚的表述出来。 ..

Jadelikes_tone的博客 437

关于K-Means应知道的

1. 目标 选择合适的质心,使得在每个簇内样本距质心的距离(欧式距离)尽可能小,即簇内样本具有较高的相似性,可以使用最小化簇内误差平方和SSE作为目标函数,也称为簇惯性。 2. 过程 ①从样本中选择K个点作为初始质心;②计算每个样本到各个质心的距离,将样本划分到距离最近的质心所对应的簇中;③计算每个簇内所有样本的均值,并使用该均值更新簇的质心;④重复步骤2、3,直到质心位置变化小于指定阈值或达到最大迭代次数为止。 3. 如何确定K值 K值枚举过程:《K-means 算法中k 值优化问题研究》在查找最优k

Itachi_dream的博客 642

算法工程师必须要知道的8种常用算法思想

https://www.toutiao.com/a6653981171921191432/   算法思想有很多,业界公认的常用算法思想有8种,分别是枚举、递推、递归、分治、贪心、试探法、动态迭代和模拟。当然8种只是一个大概的划分,是一个“仁者见仁、智者见智”的问题。 1.1 枚举算法思想 知识点讲解:光盘:视频讲解第2章枚举算法思想.avi 枚举算法思想的最大特点是,在面对任何问题时它会...

喜欢打酱油的老鸟 1万+

每个程序员都应该知道的算法

每个程序员都应该知道的算法介绍线性搜索二进制搜索深度优先搜索(DFS)广度优先搜索(BFS) 介绍 大家好,今天我要开始一个名为“每个程序员都应该知道的算法”的系列。在本系列中,我们将研究各种算法,例如搜索,排序,图形,数组等。 今天从搜索算法系列的第一部分开始。我们将研究每个程序员都应该知道的4种搜索算法。现在开始。 线性搜索 在计算机科学中,线性搜索或顺序搜索是一种用于在列表中查找元素的方法。它顺序检查列表中的每个元素,直到找到匹配项或搜索了整个列表。 在线性搜索中,我们从列表的第一个元素到最.

努力是为了站在万人之中,成为别人的光 9704
上一篇: 日常计算机使用的需求和解决方案(一)
下一篇: 【C语言】C编程的基本素养(编程范式)
ALGO阿狗
博客等级 码龄9年 64粉丝 149原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值