自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

跟一大桃一起学习

每天更新一个知识点,领域涉及数据库、算法等。

  • 博客(37)
  • 收藏
  • 关注

原创 TensorFlow 2 学习笔记02 | TensorFlow 2 开发环境搭建

安装升级pip: python -m pip install --upgrade pip使用速度比较快的pip源:pip install pip -U pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple pip insgall tensorflow==2.2.0rc4安装Jupyter: pip install jupyterlabJupyter lab提前设置好config文件后,使用jupy..

2020-07-18 22:28:08 165

原创 数据结构与算法之美 | 学习笔记29 —— 字符串匹配BM算法

BL和RK算法中,当遇到模式串与主串不匹配时,模式串往后滑一位。当模式串和主串某个字符不匹配的时候,能够跳过一些肯定不会匹配的情况,将模式串往后多滑动几位。一、BM算法原理1. 坏字符规则对于模式串匹配的时候,倒着匹配。当发现某个字符没法匹配时,把这个没有匹配的字符叫作坏字符(主串中的字符)。正常情况:BM算法:2. 好后缀规则...

2020-07-09 17:40:01 201

原创 数据分析 学习笔记03 | Python计算Numpy

一、Numpy优势原生Python的List元素时分散存储,而Numpy中数组是连续内存块中存储。Numpy中的矩阵运算可以采用多线程的方式;使用时避免使用隐式拷贝,而是直接采用就地操作模式:例如x*=2,而不是y=x*2.二、 ndarray对象(N-dimensional array object)创建数组:import numpy as npa = np.array([1, 2, 3])b = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])b[1

2020-06-21 23:41:57 219

原创 数据分析 学习笔记02| Python基础语法

这一节很简单,就当做复习了。注意代码缩进。一、输入与输出name = raw_input("What's your name?")sum = 100+100print ('hello,%s' %name)print ('sum = %d' %sum)运行结果:What's your name?dataohello,cysum = 200二、判断if score>= 90: print 'Excellent'else: if score &l.

2020-06-18 23:56:54 181

原创 数据分析 学习笔记01| 数据分析总说

一、数据分析学习方法1. MAS学习方法Multi-Dimension: 从多个角度认识事物。Ask: 不懂就问。Sharing: 最好的学习就是分享,用自己的语言讲出来,是对知识的进一步梳理。2. 知识连接基础概念掌握;工具运用;题库帮助回想、查缺补漏。3. 推荐书《思维简史:从丛林到宇宙》《数据挖掘:概念与技术》《Pentaho Kettle解决方案》《精益数据分析》《Small Data》《利用Python进行数据分析》二、数据分析全景图其中,据说八爪鱼很好用:

2020-06-12 18:02:47 245 1

原创 数据结构与算法之美 | 学习笔记28 —— 单模式字符串匹配基础

一、BF算法(Brute Force)也叫暴力匹配算法,或朴素匹配算法。暴力、简单、好懂、性能不高。先明确主串和模式串两个烤串的概念:在A中找B,那么A是主串,长度为n,B是模式串,长度为m。n>m。BF算法在主串中,依次检查起始位置为0到n-m,且长度为m的n-m+1个子字符串,看是否与模式串匹配。最坏情况下,没有匹配到,需要对比n-m+1次,因此最坏情况时间复杂度为O(n∗m)O(n*m)O(n∗m)。实际情况下BF算法应用比较常用:大部分情况下主串和模式串长度都不长,大部分情况

2020-06-12 17:00:11 138

原创 TensorFlow 2 学习笔记01 | TensorFlow核心模块

数据处理tf.data负责数据管理,支持多种数据来源:本地文件、分布式文件系统(数据集很大,HDFS, NFS)、对象存储系统(更大的数据集,S3, OBS, OSS等);支持多种数据格式:图像文件、文本文件、CSV文件,NumPy数组,Python生成器,TFRecord等;支持多种数据处理:图像解码,Shuffle, py_function, 重采样tf.keras:相对于原生keras,有分布式和高性能的优势在TensorFlow中也能写keras,构建和训练模型的高层次APIA

2020-06-10 00:29:20 359

原创 机器学习 | 关联规则概念

关联规则是无监督机器学习方法,用于知识发现,而非预测;虽然不用打标签,但缺点是很难对关联规则学习器进行模型评估,一般用肉眼观测模型是否合理。主要用于发现pattern,比如购物篮分析,或者电影推荐、新闻推荐或药物间的相互副作用等。...

2020-06-08 22:42:04 475

原创 数据结构与算法之美 | 学习笔记27 —— 深度和广度优先搜索

图的搜索算法,可以理解为在图中找出一个顶点出发,到另一个顶点的路径。首先,图的代码实现:public class Graph { // 无向图 private int v; // 顶点的个数 private LinkedList<Integer> adj[]; // 邻接表 public Graph(int v) { this.v = v; adj = new LinkedList[v]; for (int i=0; i<v; ++i) {

2020-06-05 17:26:01 175

原创 数据结构与算法之美 | 学习笔记26 —— 图的表示

一、图(Graph)的定义除了树之外,另一种非线性数据表结构:图。图中的元素叫顶点(vertex),顶点与其他的顶点建立的连接关系叫边(edge)。跟顶点连接的边的条数为度(degree)。无向图:有向图:入度(In-degree):表示有多少条边指向这个顶点;入度(Out-degree):表示有多少条边以这个顶点为起点指向其他顶点;带权图(Weighted graph):二、图的存储1. 邻接矩阵(Adjacency Matrix)存储一个二维数组,如果顶点i和顶点j之间有边,对应

2020-06-04 17:42:30 386

原创 数据结构与算法之美 | 学习笔记25 —— 堆的应用

应用一:优先级队列在优先级队列中,数据的出队顺序按照优先级来,优先级最高的最先出队。用堆来实现优先级队列比较高效。因为往优先级队列中插入元素,相当于往堆中插入一个元素;从优先级队列中取出优先级最高的元素,相当于取出堆顶元素。优先级队列可以应用于赫夫曼编码、图的最短路径、最小生成树算法;Java的PriorityQueue, C++的priority_queue等。1. 合并有序小文件将100个存有有序字符串的100M小文件合并为一个大的有序文件:思路比较像归并排序中的合并过程。先从100个文件中各取

2020-06-03 18:00:36 150

原创 SQL Server | 数据库快照的理解

今天听同事谈论数据库快照,想到前几天建发布订阅中的快照发布(Snapshot Publication)和事物发布(Transactional Publication),以为是同一个东西,其实不尽然。于是查了下数据库快照的内容。一、数据库快照用于制作报表时的数据源,比如月结报表等等,这类报表要求某个时间的数据情况。而数据库快照可以很好解决这一需求:相当于在那个时刻为数据库拍了一张“照片”。快照的速度一般很快,对于一个上百G的数据库,一般10分钟左右就可以完成,最后生成的.ss文件和备份数据库的文件大.

2020-06-02 18:15:12 829

原创 数据结构与算法之美 | 学习笔记24 —— 堆与堆排序

一、堆(Heap)1. 定义堆是一个完全二叉树,并且堆中每个节点的值都大于等于(或小于等于)子树每个节点的值。对于大于等于的情况,叫大顶堆,反之则是小顶堆。上图1,2是大顶堆,3是小顶堆,4不是堆(因为顶点没有靠左排列)。2. 堆的实现因为堆是二叉树结构,适合用数组来存储:插入元素先将元素放到堆的最后,再对堆进行堆化(heapify)。堆化的过程就是,顺着节点所在的路径,向上或向下进行对比交换。上图就是向上堆化的例子。在与父节点向上对比的过程中,如果不满足小于等于父节点的关系,就互换

2020-06-01 15:19:22 226

原创 SQL Server | 发布订阅&一些踩过的坑

一个看起来很简单的

2020-05-29 11:10:41 1967

原创 数据结构与算法之美 | 学习笔记23 —— 递归树

一、递归树基础借助递归树分析递归算法的时间复杂度。把待解决的问题一层层分解画成图,就形成了一颗递归树。将归并排序算法画成递归树,是一颗满二叉树:二、递归树应用1. 分析快速排序的时间复杂度例如,对于快速排序,假设平均情况下,每次分区的大小比例为1:k,当k=9时,如果用递推公式,则为T(n)=T(n10)+T(9n10)+nT(n)=T(\frac {n}{10} )+T(\frac {9n}{10})+nT(n)=T(10n​)+T(109n​)+n,如果用递归树,整个遍历的时间复杂度为O(

2020-05-28 17:41:09 1326

原创 数据结构与算法之美 | 学习笔记22 —— 红黑树实现

一、红黑树的基本思想按照固定的调整规则来操作,遇到什么样的节点排布,我们就对应去调整。1. 左旋(rotate left)&右旋(rotate right)2. 插入红黑树规定,插入的节点必须是红色的。并且二叉查找树中新插入的节点都放在叶子节点上。如果插入节点的的父节点是黑色,无需任何操作。如果插入节点是根节点,直接改变其颜色,将其变为黑色。除以上两种之外,插入节点时都要进行调整,例如左右旋转或改变颜色。红黑树的平衡调整过程中,把正在处理的节点叫关注节点,最开始的关注节点就是新插

2020-05-27 01:03:13 136

原创 数据结构与算法之美 | 学习笔记21 —— 红黑树基础

在二叉查找树的频繁动态更新过程中,可能会出现树高远大于log2nlog_2nlog2​n的情况。平衡查找二叉树可以解决这个问题。一、红黑树1. 平衡二叉查找树定义平衡二叉查找树:二叉树中任意一个节点的左右子树的高度相差不能大于1. 完全二叉树、满二叉树都是平衡二叉树,但是非完全二叉树也有可能是平衡二叉树。对于定义,有些平衡二叉查找树没有完全遵循。2. 红黑树(Red-Black Tree)定义红黑树是个明星树,是一种不严格符合定义的平衡二叉查找树。对于一颗红黑树:根节点是黑色的;每个叶子

2020-05-25 17:42:52 188 1

原创 数据结构与算法之美 | 学习笔记20 —— 二叉查找树

一、二叉查找树(Binary Search Tree)二叉查找树,也叫二叉搜索树,要求树中任意一个节点,左子树中每个节点的值,小于这个节点的值;右子树节点的值都大于这个节点的值。1. 二叉查找树的查找操作查找二叉树的的查找操作,先取根节点,根据节点数据的大小决定下一步向左子树还是右子树递归查找,最后返回相等的值。public class BinarySearchTree { private Node tree; public Node find(int data) { Node

2020-05-22 17:41:33 161

原创 数据结构与算法之美 | 学习笔记19 —— 二叉树基础

一、树首先明确概念:A是B的父节点,B是A的子节点,B、C、D相互为兄弟节点,没有父节点的E叫根节点,没有子节点的G、H、I、J、K、L叫叶子节点。这里有一些个举例:二、二叉树(Binary Tree)二叉树,每个结点最多有两个子节点,分别为左子节点和右子节点。上图中编号2除叶子结点外,每个都有2个子节点,为满二叉树,编号3除了最后一层,结点个数都达到最大,最后一层叶子结点靠左排列,为完全二叉树。1. 存储二叉树链式存储法每个节点有三个字段,一个存储数据,另两个指向左右子节点的指针

2020-05-21 18:08:09 185

原创 数据结构与算法之美 | 学习笔记18 —— 哈希算法在分布式中的应用

上节的数据结构与算法之美 | 学习笔记17 —— 哈希算法(散列函数)应用中,介绍了安全加密、数据校验、唯一标识和散列函数四个应用,这节的三个应用都与分布式系统有关。一、应用五:负载均衡我们需要在同一个客户端上,在一次会话中的所有请求都路由到同一个服务器上,也就是实现一个会话粘滞(session sticky)的负载均衡算法。最直接的方法是针对客户端IP或会话ID与服务器编号形成映射,每次客户端的请求都对应查找服务器编号。但是:对于客户端数量大的情况,映射表会过大,浪费内存空间;客户端下线、上线

2020-05-20 16:50:38 174

原创 数据结构与算法之美 | 学习笔记17 —— 哈希算法(散列函数)应用

一、哈希算法哈希算法需要满足的几点要求:从哈希值不能反向推导出原始数据(所以也叫单向哈希算法);(重要)即使原始数据发生很小改变,得到的哈希值大不相同;散列冲突的概率小;(重要)算法执行效率高效,对较长的文本,也能快速计算出哈希值;例如,MD5算法的哈希值是128位的Bit长度,对任何长度的文本都会得到相同的哈希值:MD5("今天我来讲哈希算法") = bb4767201ad42c74e650c1b6c03d78faMD5("jiajia") = cd611a31ea969b908932

2020-05-19 18:07:45 330

原创 数据结构与算法之美 | 学习笔记16 —— 散列表和链表组合应用

一、LRU缓存淘汰算法LRU缓存淘汰算法,通过链表实现时,当要缓存某数据时,先在链表中从头到尾查找这个数据,找到时直接将它移动到链表尾部,如果找不到则直接将数据放入链表尾部。因为涉及遍历查找所以单纯用链表实现的时间复杂度为O(n)O(n)O(n)。一个缓存系统主要包含添加、删除、查找数据的操作,这些都涉及到查找操作。如果将散列表和链表结合使用,可以将时间复杂度降低到O(1)O(1)O(1)。图中每个结点在两条链中,一个是双向链表,另一个是散列表中的拉链。其中,hnext指针将结点串联在散列表的拉链中

2020-05-18 17:32:54 169

原创 数据结构与算法之美 | 学习笔记15 —— 散列表设计

对于简单的散列表,网络攻击者可能会精心构造数据,使所有数据经过散列函数后到同一个槽中,当我们用链表法解决冲突时,这时散列表就会退化为链表,查询复杂度由O(1)O(1)O(1)退化到O(n)O(n)O(n)。导致查询时消耗大量CPU或线程资源,导致系统无法响应其他请求,从而达到拒绝服务攻击(DoS)的目的。一、设计散列函数散列函数不能过于复杂,不然会消耗很多计算时间;散列函数生成的值尽量随机分布;...

2020-05-15 13:54:15 189

原创 数据结构与算法之美 | 学习笔记14 —— 散列表基础

一、散列表(Hash Table)散列表是数组的一种扩展,用的是数组支持按照下标随机访问的特性。假设二、散列冲突

2020-05-14 15:52:19 256

原创 数据结构与算法之美 | 学习笔记13 —— 跳表

对于链表不能采用二分查找方法,这时我们将链表稍加改造为跳表(Skip list),就可支持类似“二分”的查找算法。一、跳表对原始链表建立多级索引结构,每两个结点提取一个结点到上面一层级,将抽出来的这个层级叫索引或索引层。图中down表示down指针,指向下一结点。查找时,先从顶层的索引层遍历,通过down指针下降层级,直到原始链表。时间复杂度如果链表里有n个结点,每两个结点抽出一个作为上一级索引的结点,那么第一级索引的结点个数为n2\frac n22n​,第二层为n4\frac n44n​,依

2020-05-13 11:48:18 172

原创 数据结构与算法之美 | 学习笔记12 —— 二分查找

一、二分查找(Binary Search)针对有序的数据集合,每次都跟区间中间的元素对比,直到找到元素,或待查找的区间缩小为0。时间复杂度:每次查找后数据都为原来的一半:n,n2,n4,...n2k,n, \frac n2, \frac n4,...\frac {n}{2^k},n,2n​,4n​,...2kn​,,每次缩小操作只涉及两个数据的比较,因此经过k次区间缩小操作,时间复杂度为O(k)O(k)O(k),通过n2k=1\frac {n}{2^k}=12kn​=1,时间复杂度为O(logn)O(

2020-05-12 17:34:11 168

原创 数据结构与算法之美 | 学习笔记11 —— 排序优化:探究排序函数的底层算法

一、选择合适的排序算法对于小规模数据可以选择时间复杂度为O(n2)O(n^2)O(n2)的算法,大规模的数据一般选择O(nlogn)O(nlog_n)O(nlogn​)的算法。其中归并排序不是原地排序,空间复杂度为O(n)O(n)O(n),数据规模大时占用内存空间大。C语言使用快速排序来实现排序函数。应对堆栈溢出的方法,一个是设置最深的层数,超过即报错;另一个是通过在堆上模拟实现一个函数调用栈,手动模拟递归压栈、出栈的过程。二、优化快速排序如果数据本来是接近有序的,每次分区点pivot都是最后一个

2020-05-12 09:55:30 134

原创 数据结构与算法之美 | 学习笔记10 —— 线性排序:桶排序、计数排序与基数排序

桶排序、计数排序和基数排序的时间复杂度都为O(n)O(n)O(n),是线性的,因此叫做线性排序(Linear sort)。一、桶排序(Bucket sort)桶排序的思想是将要排序的数据分到几个有序的桶里,每个桶里的数据再单独进行排序,最后将桶里的数据按照顺序依次取出。时间复杂度分析:n个要排序的数据均匀划分到m个桶内,每个桶里有k=nmk=\frac nmk=mn​个元素,每个桶内使用快速排序,时间复杂度为O(klogk)O(klog_k)O(klogk​),m个桶的时间复杂度为O(m∗klogk)

2020-05-12 09:20:41 488

原创 数据结构与算法之美 | 学习笔记09 ——归并排序&快速排序

归并排序和快速排序都用到了分治思想,的时间复杂度都为O(nlogn)O(nlogn)O(nlogn),适合大规模的数据排序。一、归并排序(Merge Sort)1. 归并排序实现分治算法一般都是用递归来实现的,分治是解决问题的处理思想,递归是一种编程技巧。用递归来代码实现归并排序,首先写出递推公式的伪代码:递推公式:merge_sort(p…r) = merge(merge_sort(p…q), merge_sort(q+1…r))//下标p到r之间的数组排序,转化为p到q和q+1到r的数组排

2020-05-11 11:31:46 279

原创 数据结构与算法之美 | 学习笔记08 —— 冒泡、插入和选择排序

插入、冒泡和选择排序的时间复杂度都为O(n2)O(n^2)O(n2),代码简单,对小规模排序比较高效。一、分析排序算法1. 算法的执行效率最好、最坏和平均情况时间复杂度:对于有序度不同的数据,要清楚排序算法在不同数据下的性能表现。时间复杂度的系数、常数、低阶:对于规模小的数据,在对比同一阶时间复杂度的算法时要考虑到。比较次数和交换或移动次数。2. 算法的内存消耗除了用空间复杂度衡量,对排序算法还引入原地排序的概念,也就是空间复杂度为O(1)O(1)O(1)的算法。3. 排序算法的稳定性

2020-05-09 14:47:05 156

原创 数据结构与算法之美 | 学习笔记07 ——递归

一、递归1.实现递归去的过程为递,回的过程为归。递归要满足的三个条件:一个问题可以分解为几个子问题的解;问题与子问题,除了数据规模不同,求解思路完全一样存在递归终止条件关键:写出递推公式,找到终止条件。示例:n个台阶,每次可以跨1或2个台阶,请问走这n个台阶有多少种走法?求解:递推公式:根据第一步的走法把所有走法分两类:第一类是第一步走了1个台阶,之后的走法就是n-1个台阶的...

2020-05-07 21:15:10 246

原创 数据结构与算法之美 | 学习笔记06 ——队列

一、队列队列:先进者先出,在队尾插入元素,在队头删除元素。基本操作为入队enqueue()和出队dequeue()。1. 顺序队列和链式队列队列与栈一样,可以用数组或链表来实现。顺序队列:用数组实现的队列。链式队列:用链表实现的队列。基于数组的队列实现方法队空判定条件为head == tail,队满判定条件为tail == n。// 用数组实现的队列public class Ar...

2020-05-07 00:34:30 191

原创 数据结构与算法之美 | 学习笔记05 —— 栈

一、栈定义:当某个数据集合只涉及在一端插入和删除数据,并且满足后进先出、先进后出的特性,我们就应该首选“栈”这种数据结构。用数组实现的栈,叫顺序栈;用链表实现的栈,叫链式栈。顺序栈的实现:// 基于数组实现的顺序栈public class ArrayStack { private String[] items; // 数组 private int count; //...

2020-05-06 00:38:52 207

原创 数据结构与算法之美 | 学习笔记04 ——链表代码技巧

技巧一:指针与引用下列都表示存储所指对象的存储地址:有指针概念:C语言类似于指针的“引用”概念:Java, Python将变量赋值给指针,即将变量的地址赋值给指针。例如:p->next=q,意思是p结点中的next指针存储了q结点的内存地址。p->next=p->next->next,意思是p结点的next指针存储了p结点的下下个结点的内存地址。技巧二:...

2020-04-30 23:30:15 163

原创 数据结构与算法之美 | 学习笔记03 ——链表

一、链表跟数组需要一块连续的存储空间不同,链表通过“指针”将一组零散的内存块串联起来使用。内存块称为链表的“结点”,每个链表的结点除了存储数据外,还存储下一个节点地址,即后继指针NEXT。1. 单链表如上图,其中,头结点记录链表的基地址,尾结点指向空地址NULL。对于链表的插入和删除操作,只需考虑相邻结点的指针改变,对应时间复杂度为O(1)O(1)O(1)(单、双向链表不同,后边会讲到...

2020-04-28 23:52:15 127

原创 数据结构与算法之美 | 学习笔记二 —— 数组

一、数组数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。线性表:同样是线性表结构的数据结构例如链表、队列、栈等。非线性表的数据结构例如二叉树、堆、图等。随机访问:因为存储为连续内存空间和相同类型的数据。但这造成删除、插入数据很低效,要做大量的数据搬移工作。随机访问数组的寻址公式:a[i]_address = base_address + ...

2020-04-27 22:22:37 142

原创 数据结构与算法之美 | 学习笔记一 —— 复杂度分析

数据结构与算法之美 | 学习笔记一 —— 复杂度分析数据结构与算法之美 | 学习笔记一 —— 复杂度分析事后统计法干扰因素多,例如处理器速度、测试数据规模等。因此采用复杂度分析。时间复杂度1.大O时间复杂度表示法大O表示代码执行时间随数据规模增长的变化趋势,所以叫渐进时间复杂度(asymptotic time complexity)。所有代码的执行时间T(n)与每行代码的执行次数成正比,...

2020-04-24 00:20:29 244 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除