my:数据结构 & 算法

本文探讨了数据结构与算法的关系,强调它们是相辅相成的,不能孤立研究。数据结构描述数据间的有机关系,而算法是操作数据的步骤。文章引用了相关资料,阐述了算法的必要特征,包括输入、输出、确定性、可行性及有穷性,并通过实际例子解释算法的概念。此外,分析了算法效率的重要性,如时间复杂度和空间复杂度,并列举了常见的数据结构操作和算法类型。

1.什么是数据结构 & 算法

my:数据结构是数据间的有机关系,而算法是对数据的操作步骤**;两者不可分开来谈,不能脱离算法来讨论数据结构,也不能脱离数据结构研究算法。

-->数据结构是一种思想,那么 算法是 对思想的具体实现

-->计算机中的算法则是描述计算机上的计算过程:具体的说法:对数据的操作步骤

-->my:数据结构:(描述)数据间的(有什么)关系;算法:操作数据(会用到数据结构)来解决问题,也就是解决问题时的计算过程

 

2.参考资料:

2.1 https://zhuanlan.zhihu.com/p/23191006

有这么一句话说“程序=数据结构+算法”,也有人说“如果把编程比作做菜,那么数据结构就好比食材(菜),算法就好比厨艺(做菜的技巧)”。

当然这是笼统的说法,不过也稍微懂得了数据结构和算法的重要性了。

其实,数据结构是数据间的有机关系,而算法是对数据的操作步骤;两者不可分开来谈,不能脱离算法来讨论数据结构,也不能脱离数据结构研究算法。

在网上看到这样一段话:

数据结构并不是来教你怎样编程的,同样编程语言的精练也不在数据结构的管辖范围之内,那是教你学习一门语言的老师的事情,他肯定不想因为数据结构而失业。数据结构是教你如何在现有程序的基础上把它变得更优(运算更快,占用资源更少),它改变的是程序的存储运算结构而不是程序语言本身。

如果把程序看成一辆汽车,那么程序语言就构成了这辆车的车身和轮胎。而算法则是这辆车的核心——发动机。这辆车跑得是快是慢,关键就在于发动机的好坏(当然轮胎太烂了也不行),而数据结构就是用来改造发动机的。

可以这么说,数据结构并不是一门语言,它是一种思想,一种方法,一种思维方式。它并不受语言的限制,你完全可以在gave 中轻而易举地实现一个用C语言给出的算法。

或许你在初入职场的时候并不会涉及到需要使用到数据结构的地方,也因而觉得数据结构貌似没用,但这和“农民工也能盖大楼,干嘛还学建筑呢?” 是一个道理,应该都懂。

 

2.2 https://www.zhihu.com/topic/19553510/intro

概念简述

算法(Algorithm)是基于特定的计算模型, 旨在解决某一信息处理问题而设计的一个指令序列。不正式地说,算法是任何定义明确的计算过程,该过程取某个值或值的集合作为输入,并产生某个值或值的集合作为输出,算法 就是这样的把输入转换成输出的 计算步骤的 一个序列。

必备特征

算法必须具有以下特征:

  1. 输入:待计算问题的任一实例,都需要以某种方式交给对应的算法,对所求解问题特定实例的这种描述统称为输入;

  2. 输出:经计算和处理之后得到的信息,即针对输入问题实例的答案,称作输出;

  3. 确定性:算法应可描述为由若干语义明确的基本操作组成的指令序列;

  4. 可行性:每一基本操作在对应的计算模型中均可兑现;

  5. 有穷性:任意算法都应在执行有限次基本操作之后终止并给出输出。

实际例子

算法不是计算机领域中才有的概念,不仅仅局限于编程语言,它可以用任何方式来描述,比如对于问题:过直线l上给定的点P,作该直线的垂线。古埃及人解决该问题的一个算法为:

 输入:直线l及其上一点P
 输出:经过P且垂直于l的直线
 ​
 1. 取12段等长绳索,依次首尾联结成环,联结处称作“结”,按顺时针方向编号为0到11
 2. 奴隶A看管0号结,将其固定于点P处
 3. 奴隶B牵动4号结,将绳索沿直线l方向尽可能地拉直
 4. 奴隶C牵动9号结,将绳索尽可能地拉直
 5. 经过0号和9号结,绘制一条直线

计算机中的算法则是描述计算机上的计算过程,比如插入排序算法的伪代码描述:

 输入:n个数的一个序列<a[1], a[2], ..., a[n]>
 输出:输入序列的一个排列<b[1], b[2], ..., b[n]>,满足b[1] <= b[2] <= ... <= b[n]
 ​
 INSERTION-SORT(A)
 for j = 2 to A.length
     key = A[j]
     i = j - 1
     while i > 0 and A[i] > key
         A[i + 1] = A[i]
         i = i - 1
         A[i + 1] = key

上述算法可以用不同的编程语言来描述,比如用Python描述:

 def insertSort(A):
     for j in range(2, len(A)):
         key = A[j]
         i = j - 1
         while i > 0 and A[i] > key:
             A[i + 1] = A[i]
             i = i - 1
             A[i + 1] = key

比如用C++描述:

 template<typename T>
 void insertSort(std::vector<T>& A)
 {
     for (int j = 2; j < A.size(); ++j)
     {
         auto key = A[j];
         int i = j - 1;
         while (i > 0 && A[i] > key)
         {
             A[i + 1] = A[i];
             --i;
             A[i + 1] = key;
         }
     }
 }

优劣分析

由于计算机不是无限快,内存不是免费的,计算时间和空间是一种有限资源,高效的算法可以更好地利用这些资源,因此算法可以像计算机硬件一样视为一种技术。度量算法成本的方式称为复杂度分析,复杂度可分为时间复杂度和空间复杂度。由于运行任一算法的空间消耗都不会多于运行期间进行的基本操作次数,即时间复杂度本身就是空间复杂度的上界,因此复杂度分析主要关注时间复杂度,而时间复杂度分析主要关注最坏情况下的运行时间,即最长运行时间。复杂度分析一般用渐进记号大O表示,它用一个函数来描述某个函数的数量级上界。最低复杂度是O(1),代表常数时间复杂度,因为不能指望没有任何代价来运行算法。依次递增的常见复杂度层级还有O(log n)、 O(√n)、O(n)、O(nlog n)、O(n^2)、O(n^3)、O(2^n)等。

常见种类

计算机中存储和组织数据的方式称为数据结构,因此计算机中的算法通常也与数据结构紧密相连,最常见的一类算法就是数据结构的插入、删除、查找、遍历、排序等,一般此类算法会封装为编程语言的标准之一,如C++ STL中的算法。除了数据结构相关算法外,还有图算法、数论算法、矩阵运算、计算几何、压缩算法、加密算法、数据挖掘算法、并行算法等。算法设计与分析的基本方法有蛮力法、分治法、动态规划、贪心算法等。并非所有问题都存在有效算法,对于NP完全问题是否存在有效算法是未知的。

下载前可以先看下教程 https://pan.quark.cn/s/a426667488ae 标题&ldquo;仿淘宝jquery图片左右切换带数字&rdquo;揭示了这是一个关于运用jQuery技术完成的图片轮播机制,其特色在于具备淘宝在线平台普遍存在的图片切换表现,并且在整个切换环节中会展示当前图片的序列号。 此类功能一般应用于电子商务平台的产品呈现环节,使用户可以便捷地查看多张商品的照片。 说明中的&ldquo;NULL&rdquo;表示未提供进一步的信息,但我们可以借助标题来揣摩若干核心的技术要点。 在构建此类功能时,开发者通常会借助以下技术手段:1. **jQuery库**:jQuery是一个应用广泛的JavaScript框架,它简化了HTML文档的遍历、事件管理、动画效果以及Ajax通信。 在此项目中,jQuery将负责处理用户的点击动作(实现左右切换),并且制造流畅的过渡效果。 2. **图片轮播扩展工具**:开发者或许会采用现成的jQuery扩展,例如Slick、Bootstrap Carousel或个性化的轮播函数,以达成图片切换的功能。 这些扩展能够辅助迅速构建功能完善的轮播模块。 3. **即时数字呈现**:展示当前图片的序列号,这需要通过JavaScript或jQuery来追踪并调整。 每当图片切换时,相应的数字也会同步更新。 4. **CSS美化**:为了达成淘宝图片切换的视觉效果,可能需要设计特定的CSS样式,涵盖图片的排列方式、过渡效果、点状指示器等。 CSS3的动画和过渡特性(如`transition`和`animation`)在此过程中扮演关键角色。 5. **事件监测**:运用jQuery的`.on()`方法来监测用户的操作,比如点击左右控制按钮或自动按时间间隔切换。 根据用户的交互,触发相应的函数来执行...
垃圾实例分割数据集 一、基础信息 &bull; 数据集名称:垃圾实例分割数据集 &bull; 图片数量: 训练集:7,000张图片 验证集:426张图片 测试集:644张图片 &bull; 训练集:7,000张图片 &bull; 验证集:426张图片 &bull; 测试集:644张图片 &bull; 分类类别: 垃圾(Sampah) &bull; 垃圾(Sampah) &bull; 标注格式:YOLO格式,包含实例分割的多边形点坐标,适用于实例分割任务。 &bull; 数据格式:图片文件 二、适用场景 &bull; 智能垃圾检测系统开发:数据集支持实例分割任务,帮助构建能够自动识别和分割图像中垃圾区域的AI模型,适用于智能清洁机器人、自动垃圾桶等应用。 &bull; 环境监控与管理:集成到监控系统中,用于实时检测公共区域的垃圾堆积,辅助环境清洁和治理决策。 &bull; 计算机视觉研究:支持实例分割算法的研究和优化,特别是在垃圾识别领域,促进AI在环保方面的创新。 &bull; 教育与实践:可用于高校或培训机构的AI课程,作为实例分割技术的实践数据集,帮助学生理解计算机视觉应用。 三、数据集优势 &bull; 精确的实例分割标注:每个垃圾实例都使用详细的多边形点进行标注,确保分割边界准确,提升模型训练效果。 &bull; 数据多样性:包含多种垃圾物品实例,覆盖不同场景,增强模型的泛化能力和鲁棒性。 &bull; 格式兼容性强:YOLO标注格式易于与主流深度学习框架集成,如YOLO系列、PyTorch等,方便研究人员和开发者使用。 &bull; 实际应用价值:直接针对现实世界的垃圾管理需求,为自动化环保解决方案提供可靠数据支持,具有重要的社会意义。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值