数据结构与算法之一

简介: 数据结构与算法之一

视频解析  https://edu.csdn.net/course/play/7813

计算机科学 是通过使用计算机解决各种问题的研究领域。

为了使用计算机解决给出的问题,您需要为其设计算法。

可设计多个算法来解决特定的问题。    

提供了最大效率的算法应用于解决此问题。

算法的效率可通过使用合适的数据结构来改善。

数据结构帮助创建简单、可重用和易于维护的程序。

本模块允许学员选择并实现合适的数据结构和算法来解决特定 的编程问题。

解决问题时算法和数据结构的作用

问题解决是每个科学规律的必要部分。

计算机广泛用于解决与各个域有关的问题,例如银行、商业、医疗、制造和 运输。

为了使用计算机解决给出的问题,您需要为其编写程序。

程序由两个组件组成,即算法和数据结构。

算法这个词来源于波斯数学名称 Al-Khowarizmi 。

算法可定义为解决问题的逐步程序。

算法帮助用户在有限的步骤中到达正确的结果。

算法具有 5 个重要的属性:

有限性

明确性 ( 确定目的 )

输入

输出

有效性

只要可以为其编写算法,通过使用计算机可以解决问题。

此外,算法提供了以下好处:

帮助编写对应的程序

帮助区分一系列可以解决的小问题和难以解决的问题

决策制定成为更加理性的过程

使得过程一致和可靠

数据结构的作用

可使用不同的算法来解决相同的问题。

一些算法可能比其它算法更有效地解决问题。

应使用提供最大效率的算法来解决问题。

改善算法效率的其中一个基本技巧是使用 适当的数据结构 。

数据结构被定义为在内存中互相组织各个数据元素的方式。

数据可以按许多不同的方式来组织。因此,您可以创建尽可能多的数据结构。

经过多年已经证明很有用的一些数据结构是:

 数据类型也是基本数据结构 .

数组

链表

堆栈

队列

合适数据结构的使用有助于提高程序的效率。

使用合适的数据结构还允许您克服一些其它编程挑战,如:

简化复杂的问题

创建标准的可重用的代码组件

创建易于理解和维护的程序

数据结构的类型

数据结构可分为以下两类:

静态: 例子 – 数组

动态: 例子 – 链接表

设计算法时两个常用的技巧是:

分治法

贪婪法

分治法是解决概念性困难问题的强大方法。

分治法需要你找出一个方法:

将问题细分为子问题

解决微不足道的用例

组合到子问题的解决方案以解决原始问题

基于贪婪法的算法用于解决优化问题,其中您需要在给定的条件集合中最大 化利润或最小化成本。

优化问题的一些示例包括:

找出从始发城市到一组目标城市的最短距离,给出两个城市之间的距离。

找出某个金额所需的货币票据的最小数值,其中有每个命名的任意票据数。

从给出的项集合中选择具有最大值的项,其中所选项的总重量不能超过给出的值。

递归:

递归指的是按照本身定义过程的技巧

用于解决本来重复的复杂编程问题

通过使用递归程序或函数,递归可以在程序中实现。递归程序或函数是调用本身 的函数。

递归的主要好处是可用于编写清晰、简短和简单的程序

最简单的一个小例子:从前有座山,山里有个老和尚, ….

课间思考

明确在尝试找出前面 n 个自然数之和的以下算法中的问题:

     算法: Sum (n)

     1. s = n + Sum(n – 1)

     2. Return (s)

答案:

在给出的递归算法中没有结束条件。因此,可以无限调用自身。正确的算法为:

 

 1. If (n = 1)

     Return(1)

 2. s = n + Sum(n – 1)

 3. Return(s)

确定算法的效率

影响程序效率的因素包括:

机器速度

编译器

操作系统

编程语言

输入大小

除了这些因素,程序的方式数据被组织且用于解决此问题的算法还对程序的 效率具有重大影响。

通过确定消耗的资源量,可以计算算法的效率。

算法消耗的主要资源是:

时间: 执行算法所需的 CPU 时间。

空间: 执行算法时所用的内存量。

算法使用的资源越少,效率越高。

时间 / 空间权衡 :

指的是您可以在程序执行速度较慢时可以减少使用的内存或在使用内存的成本很 高时减少运行的时间。

可以应用时间 / 空间权衡的情形示例为数据存储。

内存是可扩展的,但时间却不可以。因此, 通常考虑 时间 要比考虑内存的情 况多。

为了测量算法的时间效率,您可以根据算法编写程序,执行程序并测量运行 程序所需的时间。

您按这种方式测量的执行时间将取决于大量因素,例如:

机器的速度

编译器

操作系统

编程语言

输入数据

但是,您要确定执行时间是如何受算法的性质影响的。

算法的运行时间直接与算法中涉及的关键比较成比例,并且它是 n 的函数, 其中 n 是输入数据的大小。

算法的 运行时间 随着输入 数据量的增加而增加 的 速率 称为算法增长的阶。

算法 增长的阶 使用 大 O 符 号来定义。

大 O 符号已经接受为说明算法效率的基础技巧。

增长的阶与其对应的大 O 符号之间的不同是:

常量 - O(1)

对数 - O(log n)

线性 - O(n)

重对数 - O(n log n)

二次方程 - O(n 2 )

立方 - O(n 3 )

指数 - O(2 n ), O(10 n )

根据增长阶,大 O 符号可按照递增阶的方式排列:

    O(1) < O(log n) < O(n) < O(n log n) < O(n 2 ) < O(n 3 ) < O(2 n )

    < O(10 n )

分组讨论:所选算法的效率依赖性

问题描述:

您需要编写算法以搜索字典中给定的单词。讨论组织致电数据的不同算法和不 同方式如何影响进程的效率。

小结

在本章中,你已经学到:

算法可定义为解决问题的逐步程序,在有限的步骤内产生正确的结果。

算法具有 5 个重要的属性:

有限性

明确性

输入

输出

有效性

提供了最大效率的算法应用于解决此问题。

数据结构可分为以下两类:

静态

动态

设计算法时两个常用的技巧是:

分治法

贪婪法

递归指的是按照本身定义过程的技巧。用于解决本来重复的复杂编程问题。

算法消耗的主要资源是:

时间:执行算法所需的 CPU 时间。

空间: 执行算法所用的内存量。

时间 / 空间权衡指的是您可以为了减慢程序执行的速度而减小内存的使用量,或 在减少运行时间的同时提高使用的内存。

算法的总运行时间直接与算法中涉及的比较次数成比例。

算法增长的阶使用大 O 符号来定义。


目录
相关文章
|
机器学习/深度学习 人工智能 运维
阿里云率先支持Llama2全系列训练部署!
近期,Llama2宣布开源并支持免费商用,引发业界热切关注。AI模型社区魔搭ModelScope第一时间上架Llama2系列模型,机器学习平台PAI针对Llama2-7B/13B/70B 模型进行深度适配,推出Lora微调、全参数微调、推理服务等最佳实践,助力开发者快速基于Llama2进行微调,并搭建自己的专属大模型。
1439 0
|
11月前
|
JSON 前端开发 JavaScript
Java属性为什么不能是is开头的boolean
在Java实体类中,阿里规约要求boolean属性不应以is开头。文章通过实际案例分析了isUpdate字段在JSON序列化过程中变为update的问题,并提供了自定义get方法或使用@JSONField注解两种解决方案,建议遵循规约避免此类问题。
342 0
Java属性为什么不能是is开头的boolean
|
SQL 缓存 API
在API接口数据获取过程中,如何确保数据的安全性和隐私性?
在API接口数据获取过程中,确保数据的安全性和隐私性至关重要。本文介绍了身份认证与授权、防止SQL注入和XSS攻击、加密传输、API版本控制、限流与熔断、压力测试与性能优化、备份与恢复以及法律和伦理考量等关键措施,帮助开发者和管理者有效保护API接口的数据安全和隐私性。
|
并行计算 Java API
深入理解Java中的Lambda表达式与函数式接口
【7月更文挑战第19天】在Java 8中引入的Lambda表达式,不仅简化了代码编写,还为函数式编程提供了支持。本文将探讨Lambda表达式的核心概念、其与函数式接口的关系以及如何在Java中高效利用这一特性来提升代码的简洁性和可读性。我们将通过实例分析Lambda表达式的语法规则和常见用法,同时解释函数式接口的设计原则及其在Java标准库中的应用,旨在帮助开发者更好地理解和运用这一强大的工具。
|
消息中间件 中间件 数据库
NServiceBus:打造企业级服务总线的利器——深度解析这一面向消息中间件如何革新分布式应用开发与提升系统可靠性
【10月更文挑战第9天】NServiceBus 是一个面向消息的中间件,专为构建分布式应用程序设计,特别适用于企业级服务总线(ESB)。它通过消息队列实现服务间的解耦,提高系统的可扩展性和容错性。在 .NET 生态中,NServiceBus 提供了强大的功能,支持多种传输方式如 RabbitMQ 和 Azure Service Bus。通过异步消息传递模式,各组件可以独立运作,即使某部分出现故障也不会影响整体系统。 示例代码展示了如何使用 NServiceBus 发送和接收消息,简化了系统的设计和维护。
252 3
|
11月前
|
存储 安全 网络安全
云计算与网络安全:技术融合下的挑战与机遇
随着云计算技术的飞速发展,网络安全问题也日益凸显。本文将探讨云计算环境下的网络安全挑战,以及如何通过技术创新来应对这些挑战。我们将分析云服务的安全特性,讨论信息安全的最佳实践,并展望未来云计算与网络安全的发展趋势。
|
安全 网络协议 网络安全
BACnet初学者教程,第一章:BACnet/IP介绍
BACnet初学者教程,第一章:BACnet/IP介绍
575 0
|
Ubuntu 应用服务中间件 nginx
如何在 Ubuntu 20.04 上安装和使用 Docker Compose
如何在 Ubuntu 20.04 上安装和使用 Docker Compose
1294 0
|
数据可视化 数据挖掘 API
5 款热门的表单设计器推荐
5 款热门的表单设计器推荐