算法设计与智能计算 || 专题一: 算法基础

news2024/11/24 3:41:55

专题一: 算法基础

文章目录

  • 专题一: 算法基础
    • 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). 时间复杂度
算法的时间复杂度是指执行算法所需要的计算工作量。一般来说,计算机算法是问题规模 n n n 的函数 f ( n ) f(n) f(n),算法的时间复杂度也因此记做:

t ( n ) = O ( f ( n ) ) t(n)=O(f(n)) t(n)=O(f(n))

因此,问题的规模 n n n 越大,算法执行的时间的增长率与 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 定义类

本案例是给定一个由数组组成的列表, 先转化成向量, 然后把向量前 k k k 个元素相加求和, 并显示结果的过程. 本例中数据和参数 k k k 可随意更改, 类只需要提前编译一次即可,可反复利用. 使用方法和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) # 调用类内函数时需要用到 self
        summation = np.sum(temp[0:self.num]) # 调用类内参数时需要用到 self
        return 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/374121.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

_hand-2

实现一个迷你版的vue 入口 // js/vue.js class Vue {constructor (options) {// 1. 通过属性保存选项的数据this.$options options || {}this.$data options.data || {}this.$el typeof options.el string ? document.querySelector(options.el) : options.el// 2. 把da…

php mysql高校田径运动会成绩管理系统

第一章 引言 1 1.1 选题背景 1 1.2 编写目的 2 1.3 目标 2 1.4 功能需求 3 第二章 开发工具介绍 4 2.1 PHP 4 2.2 APACHE 5 2.3 MYSQL数据库 5 2.4 运行环境 WINDOWS XP 6 2.5 XAMPP 6 2.6 DREAMWEAVE8 6 2.7 EDITPLUS 7 第三章 需求…

【华为OD机试模拟题】用 C++ 实现 - 热点网络统计(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 去重求和(2023.Q1) 文章目录 最近更新的博客使用说明热点网络统计【华为OD机试模拟题】题目输入输出描述示例一输入输出示例二输入输出Code使用说明 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出…

C++入门知识【超详解】

目录1.认识Chello worldC关键字2.命名空间3.std标准库4.输入输出5.缺省参数6.函数重载7.引用7.1引用的概念7.2引用的场景1.作参数2.作返回值7.3引用的注意点7.4指针和引用的区别8.auto关键字9.基于范围的for循环10.内联函数10.1概念10.2特征11. C98中的指针空值1.认识C hello …

数据结构——单链表(上)

&#x1f307;个人主页&#xff1a;_麦麦_ &#x1f4da;今日名言&#xff1a;“生活总是让我们遍体鳞伤&#xff0c;但到后来&#xff0c;那些受伤的地方一定会变成我们最强壮的地方。” ——海明威《永别了武器》 目录 ​编辑 一、前言 二、正言 3.1链表的概念及结构…

HMM(隐马尔科夫模型)-理论补充2

目录 一.大数定理 二.监督学习方法 1.初始概率 2.转移概率 3.观测概率 三.Baum-Welch算法 1.EM算法整体框架 2. Baum-Welch算法 3.EM过程 4.极大化 5.初始状态概率 6.转移概率和观测概率 四.预测算法 1.预测的近似算法 2.Viterbi算法 1.定义 2. 递推&#xff1…

倒计时2天:中国工程院院士谭建荣等嘉宾确认出席,“警务+”时代来临...

近日伴随公安部、科技部联合印发通知&#xff0c;部署推进科技兴警三年行动计划&#xff08;2023-2025年&#xff09;&#xff0c;现代科技手段与警务工作相结合的方式&#xff0c;正式被定义为未来警务发展的新趋势。 21世纪以来&#xff0c;随着科技的不断发展和创新&#xf…

硬间隔支持向量机算法、软间隔支持向量机算法、非线性支持向量机算法详细介绍及其原理详解

相关文章 K近邻算法和KD树详细介绍及其原理详解朴素贝叶斯算法和拉普拉斯平滑详细介绍及其原理详解决策树算法和CART决策树算法详细介绍及其原理详解线性回归算法和逻辑斯谛回归算法详细介绍及其原理详解硬间隔支持向量机算法、软间隔支持向量机算法、非线性支持向量机算法详细…

JavaScript Date 日期对象实例合集

文章目录JavaScript Date 日期对象实例合集一&#xff0c;使用 Date() 方法获得当日的日期二&#xff0c;使用 getFullYear() 获取年份三&#xff0c;使用getTime() 返回从 1970 年 1 月 1 日至今的毫秒数四&#xff0c;如何使用 setFullYear() 设置具体的日期五&#xff0c;使…

小兔鲜注册页面验证、阶段案例(登录、首页页面)(重点)、小兔鲜放大镜效果——DOM

目录 1. 小兔鲜注册页面验证 2. 阶段案例&#xff08;登录、首页页面&#xff09;&#xff08;重点&#xff09; 3. 小兔鲜放大镜效果 1. 小兔鲜注册页面验证 验证码模块有个小问题&#xff1a; 连续点击获取验证码会导致触发多次计时器&#xff0c;会导致计时出现问题&…

【Stata】从入门到精通.零基础小白必学的教程,一学就fei

视频教程移步&#xff1a;https://www.bilibili.com/video/BV1hK4y1d714/?p4&spm_id_frompageDriver&vd_sourcecc8074e9c81a225f214226065db53d32P3 第二讲 Stata处理数据全流程&#xff08;上&#xff09; P3 - 01:37&#xfeff;内置数据 file example datasets使用…

FastDFS - 分布式文件存储系统

目录一、分布式文件存储1.分布式文件存储的由来2.常见的分布式存储框架二、FastDFS介绍三、FastDFS安装1.拉取镜像文件2.构建Tracker服务3.构建Storage服务4.测试图片上传四、客户端操作1.Fastdfs-java-client1.1 文件上传1.2 文件下载2.SpringBoot整合一、分布式文件存储 1.分…

【MySQL】什么是意向锁 IS IX 及值得学习的思想

文章目录前言行锁和表锁使用意向锁意向锁的算法意向锁的思想JDK 中相似的思想前言 之前看 MySQL 都刻意忽略掉了 IS 和 IX 锁&#xff0c;今天看 《MySQL 是怎样运行的》&#xff0c;把意向锁讲的很通透&#xff0c;本篇博文提炼一下思想。 I: Intention Lock&#xff08;意向…

自建服务器系列-0元搭建linux服务器(windows笔记本)

0元搭建linux服务器一.windows装Centos71.1 centos7 iso镜像1.2 准备U盘1.3 UltraISO 启动盘制作工具安装1.4 准备一台windows 机器1.5 安装过程二 、连接无线wifi三、固定wifi ip3.1 查看网络状态3.2 查看DNS3.3 查看GATEWAY3.4 设置静态IP四、一键快速安装单机版k8s五、申请域…

游戏高度可配置化:通用数据引擎(data-e)及其在模块化游戏开发中的应用构想图解

游戏高度可配置化&#xff1a;通数据引擎在模块化游戏开发中的应用构想图解 ygluu 码客 卢益贵 目录 一、前言 二、模块化与插件 1、常规模块化 2、插件式模块化&#xff08;插件开发&#xff09; 三、通用数据引擎理论与构成 1、名字系统&#xff08;数据类型&#xf…

数据结构与算法之树结构基础

目录为什么要使用树结构树结构基本概念树的种类树的存储与表示常见的一些树的应用场景为什么要使用树结构 线性结构中不论是数组还是链表&#xff0c;他们都存在着诟病&#xff1b;比如查找某个数必须从头开始查&#xff0c;消耗较多的时间。使用树结构&#xff0c;在插入和查…

58-59-60 - 动态内存分配的实现

---- 整理自狄泰软件唐佐林老师课程 文章目录1. 讨论2. 动态内存管理2.1 动态内存管理的关键2.2 动态内存管理的分类3. 定长内存管理的设计与实现3.1 空间划分3.2 内存申请和归还3.3 关键数据类型3.4 思考4. 变长内存管理的设计与实现4.1 空间划分4.2 内存申请和归还4.3 关键数…

802.11 MCS 的最低SNR分析

常常看到这样的表格: 那么这个SNR如何而来? 看看RSSI和SNR的关系,它们之间隔了一个noise floor。从表格看得出,这个底噪在-80~-90之间。 而SNR的核心,也有类似的原因,它和BER有关。

tkinter界面的TCP通信/开启线程等待接收数据

前言 用简洁的语言写一个可以与TCP客户端实时通信的界面。之前做了一个项目是要与PLC进行信息交互的界面&#xff0c;在测试的时候就利用TCP客户端来实验&#xff0c;文末会附上TCP客户端。本文分为三部分&#xff0c;第一部分是在界面向TCP发送数据&#xff0c;第二部分是接收…

【Python从入门到进阶】9、流程控制语句-条件语句(if-else)

接上篇《8、Python的输入输出》 上一篇我们学习了Python的输入和输出相关内容。本篇我们来学习Python的控制流语句。 一、流程控制语句的含义 之前我们分别学习过“变量及数据类型”、“运算符”&#xff0c;其中“变量及数据类型”相当于我们学习自然语言中的“字”&#xf…