算法设计与智能计算 || 专题一: 算法基础
专题一: 算法基础
文章目录
- 专题一: 算法基础
- 1. 算法的定义及特点
- 1.1 算法的基本特征
- 1.2 算法的基本要素
- 1.3 算法的评定
- 2 算法常见执行方法
- 2.1 判断语句
- 2.2 循环语句
- 2.3 综合运用
- 3. 计算复杂度
- 4. 代码的重用
- 5. 类函数的定义与使用
- 5.1 定义类
- 5.2 调用类函数
1. 算法的定义及特点
算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出. 数学函数可理解为是算法的一种特殊形式.
以梯度下降法求极值问题为例:


1.1 算法的基本特征
一个算法应该具有以下五个重要的特征:
- 有穷性(Finiteness): 算法的有穷性是指算法必须能在执行有限个步骤之后终止;
- 确切性(Definiteness): 算法的每一步骤必须有确切的定义;
- 输入项(Input): 一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定出了初始条件;
- 输出项(Output): 一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的;
- 可行性(Effectiveness):算法中执行的任何计算步骤都是可以被分解为基本的可执行的操作步骤,即每个计算步骤都可以在有限时间内完成(也称之为有效性)。
1.2 算法的基本要素
数据对象的运算和操作:计算机可以执行的基本操作是以指令的形式描述的。一个计算机系统能执行的所有指令的集合,称为该计算机系统的指令系统。一个计算机的基本运算和操作有如下四类:
- 1.算术运算:加减乘除等运算
- 2.逻辑运算:或、且、非等运算
- 3.关系运算:大于、小于、等于、不等于等运算
- 4.数据传输:输入、输出、赋值等运算
1.3 算法的评定
同一问题可用不同算法解决,而一个算法的质量优劣将影响到算法乃至程序的效率。算法分析的目的在于选择合适算法和改进算法。一个算法的评价主要从时间复杂度和空间复杂度来考虑。
(1). 时间复杂度
算法的时间复杂度是指执行算法所需要的计算工作量。一般来说,计算机算法是问题规模 nnn 的函数 f(n)f(n)f(n),算法的时间复杂度也因此记做:
t(n)=O(f(n))t(n)=O(f(n))t(n)=O(f(n))
因此,问题的规模 nnn 越大,算法执行的时间的增长率与 f(n)f(n)f(n) 的增长率正相关,称作渐进时间复杂度(Asymptotic Time Complexity)。
(1) 空间复杂度
算法的空间复杂度是指算法需要消耗的内存空间。其计算和表示方法与时间复杂度类似,一般都用复杂度的渐近性来表示。同时间复杂度相比,空间复杂度的分析要简单得多。
(2) 正确性
算法的正确性是评价一个算法优劣的最重要的标准。
(3) 可读性
算法的可读性是指一个算法可供人们阅读的容易程度
(4) 鲁棒性
鲁棒性是指一个算法对不合理数据输入的反应能力和处理能力,也称为容错性。
2 算法常见执行方法
2.1 判断语句
- if-else 判断语句
if语句的一般形式如下:
if 表达式: 语句1
else: 语句2
if语句中的“表达式”可以是关系表达式、逻辑表达式,甚至是数值表达式。其中最直观、最容易理解的是关系表达式。所谓关系表达式就是两个数值进行比较的式子。
a,b = 5,2
if a < b:print('两个数中的最小值为: ', a)
else:print('两个数中的最小值为: ', b)
两个数中的最小值为: 2
- if-elif-else 判断语句
name=input("Please input your name:")
if name=="Johnson":print("Hello my son.")
elif name=="Judy":print("Hello my daughter.")
elif name=="Aric":print("Hello my friend.")
elif name=="John":print("Hello to myself.")
else:print("Hello others.")
Please input your name:John
Hello to myself.
2.2 循环语句
- For 循环
for循环是编程语言中一种循环语句,而循环语句由循环体及循环的判定条件两部分组成,其表达式为:for单次表达式;条件表达式;末尾循环体: 中间循环体。如:

for i in range(5):print('Hello, world! \n')
Hello, world!
Hello, world!
Hello, world!
Hello, world!
Hello, world!
- while 循环
t = 0
while t < 5:print('Hello, world! \n')t = t+1
Hello, world!
Hello, world!
Hello, world!
Hello, world!
Hello, world!
2.3 综合运用
for y in range(1,10):for x in range(1,y+1):print('%dX%d=%d'%(x,y,x*y),end=' ')print(' ')
1X1=1
1X2=2 2X2=4
1X3=3 2X3=6 3X3=9
1X4=4 2X4=8 3X4=12 4X4=16
1X5=5 2X5=10 3X5=15 4X5=20 5X5=25
1X6=6 2X6=12 3X6=18 4X6=24 5X6=30 6X6=36
1X7=7 2X7=14 3X7=21 4X7=28 5X7=35 6X7=42 7X7=49
1X8=8 2X8=16 3X8=24 4X8=32 5X8=40 6X8=48 7X8=56 8X8=64
1X9=9 2X9=18 3X9=27 4X9=36 5X9=45 6X9=54 7X9=63 8X9=72 9X9=81
3. 计算复杂度
4. 代码的重用
5. 类函数的定义与使用
类函数是非常有用的工具, 可以把诸多函数封装起来, 只保留参数和数据两个结构, 这也是 python 机器学习中常用的调用格式. 而初学者对类的学习通常都感觉不容易, 通过编程书上利用动物类,猫啊狗啊的例子,或者人作为类,张三李四具体化, 越讲越糊涂.
其实对类的理解在不断运行代码的过程中很容易理解, 就是避免反复编译函数而生的, 而且无需每次都要考虑一系列函数的逻辑关系. 对于一个算法、一篇论文、一个大的项目, 类无疑是最方便的, 而且 python 语言的类定义更加的简单, 易读.
下面通过一个例子可以了解一下类的写法和功能
5.1 定义类
本案例是给定一个由数组组成的列表, 先转化成向量, 然后把向量前 kkk 个元素相加求和, 并显示结果的过程. 本例中数据和参数kkk 可随意更改, 类只需要提前编译一次即可,可反复利用. 使用方法和sklearn库类似, 两句话:(1) 生成空模型; (2) 利用 fit(x) 喂数据.
import numpy as np# 类的优势是把所有函数封装起来,只保留数据和参数接口, 当数据和参数变化时,无需重新运行类函数
class VECTOR_SUM:# 初始化模型参数def __init__(self, num=4):self.num = num# 定义类函数,可以通过 self 为其它函数调用def string2array(self,s):v = np.array(s)return v# 类的主要函数, 是数据的接口def fit(self,s):temp = self.string2array(s) # 调用类内函数时需要用到 selfsummation = np.sum(temp[0:self.num]) # 调用类内参数时需要用到 selfreturn summation
5.2 调用类函数
if __name__ == "__main__":x = [1,2,3,4,5,6,7,8] # 生成数据,可反复修改而无需重新编译类函数model = VECTOR_SUM(num=5) # 调用空模型,可设置参数summation = model.fit(x) # 类和数据的接口print("summation is : ", summation)
输出
summation is : 15
相关文章:
算法设计与智能计算 || 专题一: 算法基础
专题一: 算法基础 文章目录专题一: 算法基础1. 算法的定义及特点1.1 算法的基本特征1.2 算法的基本要素1.3 算法的评定2 算法常见执行方法2.1 判断语句2.2 循环语句2.3 综合运用3. 计算复杂度4. 代码的重用5. 类函数的定义与使用5.1 定义类5.2 调用类函数1. 算法的定义及特点 …...
用javascript分类刷leetcode13.单调栈(图文视频讲解)
239. 滑动窗口最大值 (hard) 给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动窗口中的最大值 。 示例 1: 输入:nums [1,…...
英语基础语法学习(B站英语电力公司)
1. 句子结构 五大基本句型: 主谓主谓宾主谓宾宾主谓宾宾补主系表 谓语: 一般来说,谓语是指主语发出的动作。(动词)但是很多句子是没有动作的,但是还是必须要有谓语。(此时需要be动词&#x…...
【计算机网络】网络层IP协议
文章目录一、认识IP协议二、IP协议头部格式三、IP地址划分1. IP地址分类2. 子网划分四、IP地址数量危机1. IP地址的数量限制2. NAT技术五、私网IP和公网IP六、路由1. 认识路由2. 路由表生成算法一、认识IP协议 IP协议是Internet Protocol(互联网协议)的…...
Eclipse快捷键大全
编辑类快捷键Ctrl1: 快速修复(最经典的快捷键, 可以解决很多问题, 比如import类、try catch包围等)CtrlShiftF: 格式化当前代码CtrlShiftM: 添加类的import导入CtrlShiftO: 组织类的导入(既有CtrlShiftM的作用,又可以去除没用的导入, 一般用这个导入包)CtrlY: 重做(与CtrlZ相反…...
JavaScript 高级2 :构造函数和原型 d331702016e84f54b3594ae05e0eeac
JavaScript 高级2 :构造函数和原型 Date: January 16, 2023 Text: 构造函数和原型、继承、ES5中的新增方法 目标 能够使用构造函数创建对象 能够说出原型的作用 能够说出访问对象成员的规则 能够使用 ES5新增的一些方法 构造函数和原型 概述 在典型的 OOP 的…...
maven-war-plugin插件 overlays maven-war-plugin翻译
说明 翻译maven-war-plugin插件的部分内容 官方地址为:https://maven.apache.org/plugins/maven-war-plugin/index.html Overview 概述 Introduction 介绍 Apache Maven WAR Plugin apache maven war 插件 The WAR Plugin is responsible for collecting all artifa…...
【数据结构】初识二叉树(二叉树的入门知识)
初识二叉树一、树概念及结构1、树的概念2、树的相关概念3、树的表示4、树在实际中的运用(表示文件系统的目录树结构)二、二叉树概念及结构1、概念2、特殊的二叉树3、二叉树的性质4、二叉树的存储结构三、结语一、树概念及结构 1、树的概念 树是一种非线…...
RV1126笔记三十二:基于 FastDeploy 在 RV1126 上的部署示例(RV1126 上部署 YOLOv5 检测模型测试)
若该文为原创文章,转载请注明原文出处。 FastDeploy是一款全场景、易用灵活、极致高效的AI推理部署工具, 支持云边端部署。提供超过 🔥160+ Text,Vision, Speech和跨模态模型📦开箱即用的部署体验,并实现🔚端到端的推理性能优化。包括 物体检测、字符识别(OCR)、…...
JVM垃圾回收——G1垃圾收集器
目录 一、什么是G1垃圾收集器 二、G1垃圾收集器的内存划分 三、G1垃圾收集器的收集过程 四、G1收集器的优缺点 五、G1收集器的JVM参数配置 一、什么是G1垃圾收集器 Garbage First(简称G1)收集器是垃圾收集器技术发展史上里程碑式的成果,它摒弃了传统垃圾收集器的…...
C语言深度剖析:关键字
C语言深度剖析:关键字C语言深度剖析:关键字前言定义与声明(补充内容)最宏大的关键字-auto最快的关键字-register关键字static被冤枉的关键字-sizeof整型在内存中的存储原码、反码、补码大小端补充理解变量内容的存储和取出为什么都是补码整型取值范围关于…...
聊一聊过度设计!
文章目录什么是过度设计?过度设计的坏处如何避免过度设计充分理解问题本身保持简单小步快跑征求其他人的意见总结新手程序员在做设计时,因为缺乏经验,很容易写出欠设计的代码,但有一些经验的程序员,尤其是在刚学习过设…...
程序员在小公司(没有大牛,人少)怎么成长?
大多数小公司都是创业公司,所以它们有着非常独特的“创业心态”。所谓创业心态通常表现为关注快速增长,竭尽所能让公司盈利,或者达成其他一些迫切目标。 在这样一家公司工作的软件开发人员,你极有可能要身兼多职,不能…...
【Fastdfs实战】在本地如何将文件上传到Linux虚拟机
作者:狮子也疯狂 专栏:《Fastdfs连续剧》 坚持做好每一步,幸运之神自然会驾凌在你的身上 目录一. 🦁 前言二. 🦁 上传原理Ⅰ. 🐇 原理图解Ⅱ. 🐇 传输原理三. 🦁 实战演示Ⅰ. &…...
ERP 系统的应用对企业财务会计信息系统内部控制的影响
(一)对企业的财务信息数据进行实时和动态管理传统的财务会计信息系统一般都是采用单一的软件系统,所以在信息的传递及处理上常常不能满足企业的需要,信息与其他部门存在不对称及滞后的现象。而ERP 系统是通过有效的技术手段将企业的各种分散的数据进行完…...
智慧物联网源码带手机端源码 物联网系统源码
在智慧工厂领域,智慧城市领域,都需要对设备进行监控。比如工厂需要对周围环境温度、湿度、气压、电压,灯的开关进行监控。这时候就需要物联网平台来进行管理。 推荐一个基于java开发的物联网平台,前端HTML带云组态、可接入视频监…...
AI绘画进军三次元,有人用它打造赛博女友?(diffusion)
目录0 写在前面1 AI绘画技术飞跃2 效果展示3 环境配置3.1 下载基础模型3.2 更新.NET和模型3.3 下载绘画模型3.4 启动项目3.5 标签配置4 结语0 写在前面 机器学习强基计划聚焦深度和广度,加深对机器学习模型的理解与应用。“深”在详细推导算法模型背后的数学原理&a…...
计算机网络高频知识点
目录 一、http状态码 二、浏览器怎么数据缓存 三、强缓存与协商缓存 1、强缓存 2、协商缓存 四、简单请求与复杂请求 五、PUT 请求类型 六、GET请求类型 七、GET 和 POST 的区别 八、跨域 1、什么时候会跨域 2、解决方式 九、计算机网络的七层协议与五层协议分别指…...
谈谈前端性能优化-面试版
前言 当我们去面试的时候,很大概率会被面试官问这么一个问题:你有尝试过对项目做性能优化吗?或者你了解哪些性能优化的方法?听到这个问题的你可能是这样的: 似曾相识但又说不清楚,往往只能零散地说出那么几…...
JAVA连接数据库——JDBC的简单使用
JDBC即Java数据库连接.用来实现Java程序对数据库增删查改。 为了对接Java程序和数据库,java.sql提供了很多api包含在java.sql和javax.sql里面 结构: DriverManager接口: 每一个数据库的驱动程序都必须去到DriverManager注册,生成一个Connection Conn…...
从‘方波变形记’聊起:为什么你的高速信号需要Tx EQ?一个给嵌入式软件/FPGA工程师的通俗图解
从‘方波变形记’聊起:为什么你的高速信号需要Tx EQ? 想象一下,你正在观看一场高清直播,画面突然出现马赛克;或者传输重要数据时,系统频繁报错。这些问题的根源,可能就藏在信号传输的微观世界里…...
Odoo开源频道应用:构建企业级内容管理系统的完整指南
1. 项目概述:一个为Odoo生态注入活力的开源频道应用如果你是一名Odoo开发者或实施顾问,肯定遇到过这样的场景:客户需要一个功能强大、界面现代的“新闻”或“博客”模块,但Odoo原生的“网站博客”应用要么功能过于基础,…...
从零构建实时数据仪表盘:React+Node.js实现任务控制面板
1. 项目概述:从“任务控制面板”看现代数据驱动决策的落地最近在GitHub上看到一个挺有意思的项目,叫iriseye931-ai/mission-control-dashboard。光看这个名字,就让我想起了科幻电影里那些布满屏幕、闪烁着各种数据和图表的指挥中心。没错&…...
抖音内容备份革命:如何用开源工具3分钟搞定无水印批量下载?
抖音内容备份革命:如何用开源工具3分钟搞定无水印批量下载? 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browse…...
iCircuit:iPad上的电子电路仿真神器,从原理到实践全解析
1. 项目概述与核心价值 最近和一位老朋友Alvin聊天,他是一位资深的硬件工程师,我们曾一起合作过一些项目。他兴奋地给我发来一封邮件,强烈推荐了一款他正在使用的iPad应用——iCircuit。这让我立刻提起了兴趣,因为在移动设备上进行…...
如何高效获取网盘直链:8大平台的完整解决方案
如何高效获取网盘直链:8大平台的完整解决方案 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘 / 迅…...
RootlessJamesDSP:无Root环境下的Android全局音频处理方案解析
1. 项目概述:在无根环境中驯服音频的“魔法师”如果你是一个对手机音质有追求的安卓用户,或者是一个喜欢折腾音频处理插件的玩家,那么你很可能听说过或者用过 JamesDSP。它是一款功能强大的音频处理引擎,能够通过复杂的算法&#…...
2018自动化测试核心价值与行业挑战解析
1. 2018自动化测试的核心价值与行业挑战在2018年这个技术转折点上,自动化测试已经从可选方案变成了工程团队的生存必需。作为经历过这个阶段的测试架构师,我亲眼见证了当时几个关键行业变化:5G标准竞赛进入白热化阶段、自动驾驶汽车传感器技术…...
重构计算机历史叙事:挖掘被遗忘的贡献者与构建包容性科技未来
1. 项目概述:为什么我们需要重写计算机历史如果你问一个对计算机历史稍有了解的人,让他列举几位先驱,大概率会听到冯诺依曼、艾伦图灵、比尔盖茨、史蒂夫乔布斯这些名字。这个名单很长,但有一个共同点:他们几乎都是白人…...
Shiv进阶教程:解决Python依赖管理的7个实用技巧
Shiv进阶教程:解决Python依赖管理的7个实用技巧 【免费下载链接】shiv shiv is a command line utility for building fully self contained Python zipapps as outlined in PEP 441, but with all their dependencies included. 项目地址: https://gitcode.com/g…...
