01算法的概念

简介: 01算法的概念

算法的概念

如果将最终写好运行的程序比作战场,我们码农便是指挥作战的将军,而我们所写的代码便是士兵和武器。数据结构和算法则是兵法。如果我们常看兵法,便可以做到胸有成竹,有时会事半功倍!同样,如果我们常看算法,我们写程序时也能游刃有余、明察秋毫,遇到问题时亦能入木三分、迎刃而解。对于算法而言,实现的语言并不重要,重要的是思想。算法可以有不同的语言描述实现版本(如C描述、C++描述、Python描述等等)

算法的五大特征

  • 输入性:有零个或者多个外部量作为算法的输入
  • 输出性:算法至少有一个量作为输出
  • 确定性:算法的每条指令清晰,无歧义
  • 有穷性:算法的每条指令的执行次数有限,执行每条指令时间也有限
  • 可行性:算法原则上能够精确的运行,而且人们用纸和笔做有限次运算后就可完成

算法应用实际案例

【示例】如果a+b+c= 1000,且a^2 +b^2=c^2(a,b,c为自然数),如何求出所有a,b,c可能的组合:

没学算法前:三次暴力循环

1. import time
2. begin_time = time.time()
3. for a in range(0,1001):
4. for b in range(0,1001):
5. for c in range(0,1001):
6. if a+b+c == 1000 and a**2+b**2 == c**2:
7. print("a,b,c:",a,b,c)
8. end_time = time.time()
9. print("这段代码一共执行了:",end_time-begin_time,"s")

学过算法之后:通过abc关系直接生成c:

1. import time
2. begin_time = time.time()
3. for a in range(0,1001):
4. for b in range(0,1001):
5.         c = 1000-a-b
6. if a+b+c == 1000 and a**2+b**2 == c**2:
7. print("a,b,c:",a,b,c)
8. end_time = time.time()
9. print("这段代码一共执行了:",end_time-begin_time,"s")

可以看到之前用暴力循环求解用时为260多秒,用第二种算法用时为1秒多,所用时间大大减少。

算法效率衡量标准

单靠时间值绝对可信吗?如果同一段程序放到不同配置上面的电脑去运行,其运行时间可能也会相差很多,但这是同一段程序,其效率是一定的。程序的运行离不开计算机环境包括硬件和操作系统,这些客观原因会影响程序运行的速度并反应在程序的执行时间山。那么如何才能客观的评判一个算法的优劣呢?

这就是后面要学习的时间复杂度空间复杂度


相关文章
|
2月前
|
存储 算法 Linux
【数据结构和算法】---二叉树(1)--树概念及结构
【数据结构和算法】---二叉树(1)--树概念及结构
28 0
|
14天前
|
机器学习/深度学习 算法
【机器学习】解释对偶的概念及SVM中的对偶算法?(面试回答)
解释了对偶的概念,指出对偶性在优化问题中的重要性,尤其是在强对偶性成立时可以提供主问题的最优下界,并且详细阐述了支持向量机(SVM)中对偶算法的应用,包括如何将原始的最大间隔优化问题转换为对偶问题来求解。
27 2
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
机器学习之深度学习算法概念
深度学习算法是一类基于人工神经网络的机器学习方法,其核心思想是通过多层次的非线性变换,从数据中学习表示层次特征,从而实现对复杂模式的建模和学习。深度学习算法在图像识别、语音识别、自然语言处理等领域取得了巨大的成功,成为人工智能领域的重要技术之一。
57 3
|
2月前
|
存储 算法 C语言
二分查找算法的概念、原理、效率以及使用C语言循环和数组的简单实现
二分查找算法的概念、原理、效率以及使用C语言循环和数组的简单实现
|
2月前
|
机器学习/深度学习 算法 C语言
详细介绍递归算法在 C 语言中的应用,包括递归的基本概念、特点、实现方法以及实际应用案例
【6月更文挑战第15天】递归算法在C语言中是强大力量的体现,通过函数调用自身解决复杂问题。递归涉及基本概念如自调用、终止条件及栈空间管理。在C中实现递归需定义递归函数,分解问题并设定停止条件。阶乘和斐波那契数列是经典应用示例,展示了递归的优雅与效率。然而,递归可能导致栈溢出,需注意优化。学习递归深化了对“分而治之”策略的理解。**
46 7
|
2月前
|
搜索推荐 算法
【排序】数据结构——排序算法概念及代码详解(插入、冒泡、快速、希尔)
【排序】数据结构——排序算法概念及代码详解(插入、冒泡、快速、希尔)
|
2月前
|
存储 NoSQL 算法
Redis集群,集群的概念 三种主流分片方式1.哈希求余 一致性哈希算法:方案三:哈希槽分区算法问题一Redis集群是最多有16384个分片吗问题二:为什么是16384个,集群扩容:1.新的主节点
Redis集群,集群的概念 三种主流分片方式1.哈希求余 一致性哈希算法:方案三:哈希槽分区算法问题一Redis集群是最多有16384个分片吗问题二:为什么是16384个,集群扩容:1.新的主节点
|
2月前
|
存储 算法
【二叉树】数据结构——BST二叉树基本概念及算法设计(插入、删除、遍历操作)
【二叉树】数据结构——BST二叉树基本概念及算法设计(插入、删除、遍历操作)
|
3月前
|
存储 机器学习/深度学习 算法
数据结构与算法⑬(第四章_中_续二)堆解决Topk问题+堆的概念选择题
数据结构与算法⑬(第四章_中_续二)堆解决Topk问题+堆的概念选择题
41 3
|
2月前
|
存储 算法
数据结构和算法学习记录——特殊线性表之队列-队列的概念、队列结构体类型定义 、基本接口函数、初始化函数、销毁队列函数、入队列函数、判断队列是否为空、出队列函数、读取队头队尾的数据 、计算队列数据个数
数据结构和算法学习记录——特殊线性表之队列-队列的概念、队列结构体类型定义 、基本接口函数、初始化函数、销毁队列函数、入队列函数、判断队列是否为空、出队列函数、读取队头队尾的数据 、计算队列数据个数
24 0