随笔分类 - 1.Python基础 / 8.算法与设计模式
摘要:一、如何理解堆 1、堆是一个完全二叉树 2、大顶堆 对于每个节点的值都大于等于子树中每个节点值的堆 3、小顶堆 对于每个节点的值都小于等于子树中每个节点值的堆 二、如何实现一个堆 1、如何存储一个堆 从图中我们可以看到:1、数组中下标为 i 的节点的左子节点,就是下标为 i∗2 的节点,2、右子节点
阅读全文
摘要:什么是快排? 排序思路 排序代码 快速排序代码——第一步 怎么写partition函数 快速排序代码——第二步 还不理解partition函数? 效率性能 快排和冒泡算法性能比较 下面分别是10000和100000列表的时间 结论:元素越多,性能差距越明显 1、因为冒泡每一趟只完成一个元素的归位 2
阅读全文
摘要:一、Numpy简介 NumPy 是高性能科学计算和数据分析的基础包,它是pandas等其他各种工具的基础 1、主要功能 1、ndarray,一个多维数组结构,高效且节省空间 2、无序循环对整组数据进行快速预算的数学函数 3、*读写磁盘数据的工具以及用于操作内存映射文件的工具 4、*线性代数、随机数生
阅读全文
摘要:一、理解单例设计模式 1、什么是单例模式 单例模式的uml图 实现单例模式的一个简单方法是,使构造函数私有化,并且创建一个静态方法来完成对象的初始化,这样,对象将在一次调用时创建,此后,这个类将返回同一个对象 在使用python的时候,我们的实现方式要有所变通,因为它无法创建私有的构造函数 在许多实
阅读全文
摘要:一、简单工厂模式 1、内容 不直接向客户端暴露对象创建的实现细节,而是通过一个工厂类来负责创建产品类的实例 关注的是对象创建的细节 2、角色 1、工厂角色(Factory) 2、抽象产品角色(Product) 3、具体产品角色(Concrete Product) 4、完整的代码 3、uml 4、优点
阅读全文
摘要:一、什么是设计模式 1、设计模式的定义 2、注意事项 设计模式就是底层实现起来麻烦,上层调用简单 设计模式就是“有一个套路 ,分几个类,几个方法,几个属性” 3、为什么要有设计模式 在面向对象之前用的面向过程,小软件,需求不断增加,代码量爆增,大家的代码合并不了,几百万几千万的项目都不能交付,爆发了
阅读全文
摘要:一、暴力枚举 1、实现代码 2、输出 二、动态规划定义 1、什么是动态规划? 动态规划的英文名,是一种分阶段求解决策略的数学思想,它不止用于编程领域,也用于管理学,经济学、生物学 2、初始为1 实现代码 输出 2、初始为0 1、实现代码 2、输出 三、动态规划最长上升子序列 1、实现代码 2、输出结
阅读全文
摘要:一、定义 什么是贪心算法呢?所谓贪心算法是指,在对问题求解时,总是做出在当前看来最好的选择。也就是说,不从整体最优解出发来考虑,它所做出的仅是在某种意义上的局部最优解。 贪心算法不是对所有问题都能得到整体最优解,但对范围相当广泛的许多问题都能产生整体最优解或整体最优解的近似解。 贪心算法的基本思路如
阅读全文
摘要:一、二叉搜索树 二、二叉搜索树初步操作 1、创建 2、遍历 中序序列是直接排好序的 三、二叉树的查询、插入、删除 1、查询 2、插入 3、删除 动画演示地址:https://visualgo.net/en/bst 四、二叉搜索树的问题 1、随机化的二叉树搜索树 1、对列表先随机打乱 2、软后在建树
阅读全文
摘要:一、二叉树的定义 1、二叉树的链式存储 将二叉树的节点定义为一个对象,节点之间通过类似链表的链接方式来连接 2、节点的定义 3、二叉树图 二、前序遍历 1、实现代码 2、输出 实现代码 输出 三、中序遍历 1、实现代码 2、输出 四、后序遍历 1、实现代码 2、输出 五、层次遍历 1、实现代码 2、
阅读全文
摘要:一、哈希表 1、表查找 哈希表(HashTable,又称为散列表),是一种线性表的存储结构。通过把每个对象的关键字k作为自变量,通过一个哈希函数h(k),将k映射到下标h(k)处,并将该对象存储在这个位置。 例如:数据集合{1,6,7,9},假设存在哈希函数h(x)使得h(1) = 0, h(6)
阅读全文
摘要:一、什么是队列? 定义: 二、队列的实现 1、单向队列 输出结果 2、内置队列操作文件(相当于linux的tail功能) 1、代码 2、test 3、输出结果 三、队列的实现原理 四、环形队列
阅读全文
摘要:一、栈的应用——迷宫问题 1、解题思路 2、实现代码 二、队列的应用——迷宫问题 1、解题思路 2、实现代码
阅读全文
摘要:一、基本原理 桶排序假设输入数据服从均匀分布,防止所有元素集中在少数几个桶中,平均情况下它的时间代价为O(n)O(n) 。基本思想: 桶排序将[0,1)区间划分为n个相同大小的子区间,也就是桶,然后将n个输入数据分别放到各个桶中,为了得到输出结果,我们队每个桶中的数进行插入排序,最后遍历所有桶按照次
阅读全文
摘要:一、10算法分类 本文一共总结了10种排序算法,其中 基于比较的排序算法有 冒泡排序,插入排序,希尔排序,选择排序,归并排序,堆排序,快速排序; 线性时间排序算法包括 计数排序,基数排序,桶排序; 前边有提到过,基于比较的排序算法,时间复杂度最差达到O(nlogn)O(nlogn),无法突破这个界限
阅读全文
摘要:一、重排列 方法一: 方法二: 二、二维二分查找 方法一: 方法二: 三、 Two Sum 1、题目描述 2、方法一 3、方法二 https://leetcode.com/problems/two-sum/description/ 四、区域查询 方法一:
阅读全文
摘要:一、基本原理 计数排序的思想类似于哈希表中的直接定址法,在给定的一组序列中,先找出该序列中的最大值和最小值,从而确定需要开辟多大的辅助空间,每一个数在对应的辅助空间中都有唯一的下标。 限制:计数排序假设n个输入元素中的每一个元素都是在0到k区间内的一个整数,只可处理非负数;计数排序的基本思想:对每一
阅读全文
摘要:一、基本原理 基数排序是基于计数排序的,基数排序着眼于输入序列的每一位数,每一轮排序都是根据序列中的某一位数进行排序,从低位到高位各进行一次这种排序思想,最终序列便是有序的。由于输入序列每一位数都是有限的,比如十进制序列,每位数都是0~9的数字,于是可以选择计数排序对序列某一位数进行排序。同样,基数
阅读全文
摘要:一、详细调整过程(不打印li, low, mid, high) 1、实现代码 2、打印结果 1 "C:\Program Files\Python35\python.exe" E:/工作目录/python/test/heap.py 2 [5, 97] 3 [57, 20] 4 [5, 97, 57,
阅读全文
摘要:一、数组和列表的区别 区别一: 数组中存放的数据类型必须一致,可以存放基本类型数据 list中可以存放不同类型数据,但不能存放基本类型数据 区别二: 数组不能删除制定位置元素,除非重建数组对象 list移除某一元素后,后续元素会前移 区别三: 数组初始化后大小固定,且数据都已经被赋值 列表长度是根据
阅读全文