数据结构与算法
liuchunming033
关注软件的自动化测试与持续集成,平时的主要工作包括接口测试、性能测试、APP测试、WEB测试、测试平台开发等。可以关注我的个人公众号《明说软件测试》接收最新文章
展开
-
测试开发基础之算法(15):字符串匹配算法——BF算法和RK算法
掌握程度:能实践 BF 算法,能看懂 RK 算法原创 2020-03-20 21:18:43 · 667 阅读 · 0 评论 -
测试开发基础之算法(13):堆、堆排序及应用(优先级队列、Top k、中位数)
能代码实现堆、堆排序,并且掌握堆的三种应用(优先级队列、Top k、中位数)原创 2020-03-19 23:30:26 · 659 阅读 · 0 评论 -
测试开发基础之算法(12):支持动态数据集合快速插入、删除、查找的二叉查找树
并发编程会给我们的程序带来极大的性能提升,并发编程具有非常广泛的应用,比如服务器、网络爬虫、性能测试等。Python中并发编程的实现方式有:多线程、多进程以及协程。本文主要介绍多线程和多进程。1. 几个重要概念在python并发编程之前,我们需要明确和掌握几个重要的概念,并发与并行,同步和异步,阻塞与非阻塞。1.1 并发执行和并行执行并行(parallel): 指的是互不干扰的在同一时刻...原创 2020-01-11 16:42:26 · 742 阅读 · 2 评论 -
测试开发基础之算法(11):二叉树的三种遍历算法及典型题解
二分查找 https://www.cnblogs.com/longyunfeigu/p/9316082.html散列表 python的dict二叉树堆 python的heapq字符串匹配图贪心、分治、回溯和动态规划原创 2019-12-25 10:17:22 · 3931 阅读 · 0 评论 -
测试开发基础之算法(10):Hash算法的常见应用
想象一下,在软件测试实践中,测试上传下载图片或者文件的接口时,我们如何对上传或者下载的图片和文件的正确性进行校验呢?带着这个问题,我们开启hash算法的学习。hash算法在软件编程中应用非常广泛,常见的比如MD5、SHA等。我们一般不会动手写一个hash算法,更多的是拿现成的来用。我们这篇文章也是重点介绍,如何运用hash算法解决现实问题。1. 什么是hash算法?前面提到的散列表数据结构,...原创 2019-12-24 19:59:35 · 736 阅读 · 0 评论 -
测试开发基础之算法(9):散列表原理及在Python中的应用
我们知道,数组具有一个特别强大的特性是,能够根据下标随机访问数组元素,时间复杂度是O(1)。散列表(Hash表)正是列用了数组的这一特性,对数组进行了扩展,实现了针对非整型下标的高效存储和访问。1. 散列思想举个简单例子,假设运动员编码是6位数字,要想将99名运动员的姓名按照运动员编号存入数组a中,数组下标对应运动员编号的后两位,也就是数组下标1的位置a[1]存放编号为030101的运动员姓名...原创 2019-12-23 20:32:04 · 531 阅读 · 0 评论 -
测试开发基础之算法(8):二分查找的6种常用应用场景
二分查找是针对有序数据集合的查找算法,一种非常简单易懂的快速查找算法,查找效率非常高,时间复杂度达到O(logn)。日常生活中经常会用到二分查找算法,比如猜数字游戏,查找字典的某一页等。拿查找字典中某一页为例,假设一个字典一共500页,你想查找第200页的内容,那么你先随机翻开字典,如果翻开的页码比200小,则在字典的后半部分继续查找,如果翻开的页面比200大,则在字典的前半部分继续查找。之后,...原创 2019-12-11 22:21:16 · 5746 阅读 · 0 评论 -
测试开发基础之算法(7): 如何编写递归代码
递归其实一点不神秘,在日常生活中具有广泛的应用。比如,你想打听小D同学的地址,但是你不认识小D,但认识小A,只能向小A打听小D同学的地址,但是小A也不认识小D,但认识小B,只能向小B打听小D同学的地址,同样悲剧的是,小B不认识小D,但认识小C,只能向小C打听小D同学的地址。正好小C认识小D,问到了小D的地址,就将小D的地址告诉了小B,小B又将地址告诉了小A,小A将地址告诉你了。我们把打听地址的动...原创 2019-12-11 09:40:21 · 431 阅读 · 0 评论 -
测试开发基础之算法(6):队列的操作及应用
队列是一种常见的线性表数据结构,它的典型特征是先进先出。即先入队列的先出队,后入队列的后出队。队列有两个基本操作:入队(enqueue),即将一个数据放入到队列的尾部,出队(dequeque),即将一个数据从对头移除。队列的数据接口可以用下图表示队列可以用数组实现,也可以用链表实现。用数组实现的队列是顺序队列,用链表实现的队列是链式队列。1.用Python列表实现队列下面的代码是用Py...原创 2019-12-04 19:18:43 · 531 阅读 · 0 评论 -
测试开发基础之算法(5):栈的基础操作及应用
1. 栈的概念栈是一种“操作受限”的线性表,支持两种基础操作,入栈和出栈。特点是先进后出,后进先出,也就说是先入栈的数据后出栈,后入栈的数据先出栈。栈有几个概念需要我们了解:栈大小:就是栈的容量,表示最多可以放多少个数据。栈中元素:栈中的数据栈顶:栈的最上面的元素栈底:栈中最下面的元素入栈:将新的数据放入栈顶出栈:将数据从栈顶取出来2.实现一个栈栈可以用数组来实现,也可以...原创 2019-12-02 15:53:07 · 397 阅读 · 0 评论 -
测试开发基础之算法(4):单链表的操作与应用
本篇文章介绍了链表的存储结构,单链表的常见操作,并对leetcode上关于链表的比较容易的题目进行了编程实现,另外还介绍了双向链表、循环链表的特点。原创 2019-11-27 10:09:35 · 601 阅读 · 0 评论 -
测试开发基础之算法(3):8种经典排序算法
最经典的、最常用的:冒泡排序、插入排序、选择排序、归并排序、快速排序、计数排序、基数排序、桶排序。他们的时间复杂度如下:1、如何评价一个排序算法的优劣?主要有三种角度:1、最好、最坏和平均时间复杂度,另外要知道最好、最坏时间复杂对应的原始数据是什么样的2、实际的软件开发中,排序的往往是小规模数据,所以要考虑时间复杂度的系数、常数 、低阶3、在基于比较的排序算法中,要考虑比较的次数和...原创 2019-11-15 20:22:16 · 764 阅读 · 1 评论 -
测试开发基础之算法(2):数组的特点及相关算法
数组是一种线性表结构,用一段连续的内存存储相同数据类型的数据。时间复杂度:因为在内存中是连续存储的,所以利用寻址公式,它支持时间复杂度为O(1)的随机访问操作,但是插入和删除的操作因为涉及到数据搬移,所以平均情况时间复杂度为 O(n)在使用数组时,要警惕数组越界,特别在C语言中访问越界的数据也不会报错。但是像Python、Java语言则会做越界检查。下面通过一些Leetcode上有关数组的操...原创 2019-11-12 19:46:00 · 391 阅读 · 0 评论 -
测试开发基础之算法(1):复杂度分析方法
时间复杂度表示代码的执行时间随着数据规模增长的趋势。使用O()表示【假设】每一行代码执行的时间都一样,都是unit_time。所有代码的总执行时间 T(n) 与每行代码的执行次数成正比。1、只关注循环执行次数最多的一段代码def calc(n): """ 分析这个代码执行时间,(3+2n)*unit_time,去掉低阶,去掉高阶的系数,从而得出时间复杂度就是O(n) ...原创 2019-11-07 20:09:11 · 626 阅读 · 0 评论