数据结构与算法

时间复杂度问题

因为在刷leecode的时候涉及时间复杂度的问题,还是需要把本科学习的数据结构基础知识进行整理

1.4 算法及其复杂性

  1. 算法的复杂性
    时间复杂性: 算法中基本操作重复执行的次数是问题规模n的某个函数f(n),随着问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐进时间复杂性,
    ** 一个算法在执行过程中消耗的时间取决于下面的因素:**
    (1)算法所需数据输入的时间
    (2)算法编译为可执行程序的时间
    (3)计算机执行每条指令所需的时间
    (4)算法语句重复执行的次数
    主要时间度量: 算法语句重复执行的次数

  2. O后面的括号中有一个函数,指明某个算法的耗时/耗空间与数据增长量之间的关系。其中的n代表输入数据的量。
    2.1 比如时间复杂度为O(n),表示数据量增大几倍,耗时也增大几倍,常见的遍历算法
    2.2 时间复杂度为O(n^2), 表示数据量增大n倍,耗时增大n的平方,比先行更高的时间复杂度。比如冒泡排序、选择排序, 对n个数排序,需要扫描n*n次,
    2.3 比如O(logn),当数据量增大n倍时,耗时增大logn倍数(以2为底)比如,当数据增大256倍时,耗时只增大8倍,是比线性还要低的时间复杂度,二分法查找就是O(logn)的算法,每找一次排除一半的可能,256个数据中,只需要查找8次就可以找到目标

    同理O(nlogn)同理,就是n乘以logn,当数据增大256倍时,耗时增大256*8倍,这个复杂度高于线性,地域平方。归并排序就是O(nlogn)的时间复杂度。快速排序算法

    2.4 O(1)就是最低的时空复杂度了,也就是耗时/耗空间与输入数据大小无关,无论输入数据增大多少倍,耗时/耗空间都不变。 哈希算法就是典型的O(1)时间复杂度,无论数据规模多大,都可以在一次计算后找到目标(不考虑冲突的话)

  3. Hash 算法
    哈希表就是一种以**键-值(key-indexed)**存储数据的结构,只需要输入带查找的值即key ,即可查找对应的值
    使用哈西查找的两个步骤:

    3.1 使用哈希函数将被查找的键转换为数组的索引。在理想的情况下,不同的键会被转换为不同的索引值,但是有些情况下我们需要处理多个键被哈希到一个索引值的情况,因此哈希的第二个步骤处理冲突

    3.2. 处理哈西碰撞冲突:拉链法和线性探测法
    哈希表是在时间和空间上做出权衡的经典例子,如果没有内存限制,可以直接将键作为数组的索引,那么所有的查找时间复杂度为O(1):如果没有没存限制,可以使用无序数组并进行顺序查找,这样只需要很少的内存。哈希表使用了适度的空间和时间在两个极端找到了平衡。

构造哈希表的方法:这里博客https://blog.csdn.net/tanggao1314/article/details/51457585
介绍的很清楚,不再赘述:直接定址法,数字分析法,折叠法,平方取中法,减去法,基数转换法,除留余数法,随机数法,随机乘数法;字符串数值哈希法;旋转法

哈希处理冲突的方法

  • 开放定址法(再散列法),基本思想是:当关键字key的哈希地址p=H(key)出现冲突时,以p为基础,产生另一个哈西地址p1,如果p1仍然冲突,再以p为基础,产生另一个哈西地址p2 ,,,,直到找到一个不冲突的哈希地址pi,将相应元素存入其中。这种方法有一个通用的再散列函数形式:
  •       Hi=(H(key)+di)% m   i=1,2,…,n
    

其中H(key)为哈希函数,m为表长,di为增量序列。增量序列的取值方式不同,相应的再散列方式也不同。主要有以下三种:

  1. 线性探测再散列:dii=1,2,3,…,m-1
  2. 二次探测再散列: di=12,-12,22,-22,…,k2,-k2 ( k<=m/2 )
  3. 伪随机探测再散列:di=伪随机数序列。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
图像识别技术在病虫害检测中的应用是一个快速发展的领域,它结合了计算机视觉和机器学习算法来自动识别和分类植物上的病虫害。以下是这一技术的一些关键步骤和组成部分: 1. **数据收集**:首先需要收集大量的植物图像数据,这些数据包括健康植物的图像以及受不同病虫害影响的植物图像。 2. **图像预处理**:对收集到的图像进行处理,以提高后续分析的准确性。这可能包括调整亮度、对比度、去噪、裁剪、缩放等。 3. **特征提取**:从图像中提取有助于识别病虫害的特征。这些特征可能包括颜色、纹理、形状、边缘等。 4. **模型训练**:使用机器学习算法(如支持向量机、随机森林、卷积神经网络等)来训练模型。训练过程中,算法会学习如何根据提取的特征来识别不同的病虫害。 5. **模型验证和测试**:在独立的测试集上验证模型的性能,以确保其准确性和泛化能力。 6. **部署和应用**:将训练好的模型部署到实际的病虫害检测系统中,可以是移动应用、网页服务或集成到智能农业设备中。 7. **实时监测**:在实际应用中,系统可以实时接收植物图像,并快速给出病虫害的检测结果。 8. **持续学习**:随着时间的推移,系统可以不断学习新的病虫害样本,以提高其识别能力。 9. **用户界面**:为了方便用户使用,通常会有一个用户友好的界面,显示检测结果,并提供进一步的指导或建议。 这项技术的优势在于它可以快速、准确地识别出病虫害,甚至在早期阶段就能发现问题,从而及时采取措施。此外,它还可以减少对化学农药的依赖,支持可持续农业发展。随着技术的不断进步,图像识别在病虫害检测中的应用将越来越广泛。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值