自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

白马负金羁

数据挖掘 | 统计分析 | 图像处理 | 程序设计

  • 博客(430)
  • 资源 (1)
  • 论坛 (1)
  • 收藏
  • 关注

原创 机器学习中的数学修炼(含勘误表!)

数学是机器学习和数据科学的基础,任何期望涉足相关领域并切实领悟具体技术与方法的人都无法绕过数学这一关。机器学习中的数学修炼——为你打开一道通往机器学习世界的数学之门:笔者系统地整理并介绍了机器学习中所涉及的必备数学基础,这些都是笔者从浩如烟海的数学知识中精心萃取的,在学习和研究机器学习技术时所必须的内容...

2020-08-03 10:21:42 7583 24

原创 欢迎订阅我的专栏,好文章一网打尽

博主当前围绕人工智能这个主题开设了三个专栏:【机器学习之术】、【机器学习之道】、【自然语言处理】,这些文章皆为以往博客中精华内容的汇总,已经收录的文章超过70篇(日后笔者还会适时更新),总计有近160万次点阅。希望这些内容可以帮助读者解开学习过程中的一些疑惑,使得订阅者能最大程度地从中收获新知

2020-04-15 05:55:17 12349 9

原创 图像处理中的数学修炼(第2版)上市:新旧版同时在售

自《图像处理中的数学修炼》原书第一版于2017年2月上市以来,加印重印多次,在京东和当当等主流在线购书网站上已经累计有超过3200个有效购买评论,并且在这两个网站上的好评度都超过99%。结合第一版书籍读者给出的反馈,同时为了适应相关技术的快速发展,在首版发行三年之后的2020年,笔者再度与清华大学出版社合作,乘势推出全新的《图像处理中的数学修炼》(第2版),现第一、二版同时在售

2020-04-06 08:38:37 11661 1

原创 机器学习中的数学原理详解(Python版)

Python机器学习中的数学修炼一书以机器学习为主导,系统地整理并介绍了机器学习中所涉及的必备数学基础。具体包括微积分、概率论与数理统计、数值计算、信息论、凸优化、泛函分析基础与变分法,以及蒙特卡洛采样等话题。为了帮助读者加深理解并强化所学,本书还从上述数学基础出发进一步介绍了回归、分类、聚类、流形学习、集成学习,以及概率图模型等机器学习领域中的重要话题。其间,本书将引领读者循序渐进地拆解各路算法的核心设计思想及彼此间的关联关系,并结合具体例子演示基于Python进行实际问题求解的方法

2015-12-09 15:42:53 11482 2

原创 深入理解二叉索引树:从LeetCode实践出发(题号307、315、327、493)

Fenwick Tree也叫做树状数组,或者二叉索引树(BIT,Binary Indexed Tree),由新西兰奥克兰大学的Peter Fenwick博士于1994年提出。Fenwick Tree用数组来表示一棵树(这样空间上更节约),所以它的结点中没有指向左右孩子的指针这样的设计。它可以用于对区间和(range sum)进行快速查询,其元素修改和区间查询的复杂度都是O(logn)。LeetCode上会用到Fenwick Tree的题目只要十几道,但是基本都是Hard级别的难题

2021-06-10 07:57:40 79

原创 高级数据结构之Fenwick Tree(Binary Indexed Tree)

Fenwick Tree也叫做树状数组,或者二叉索引树(BIT,Binary Indexed Tree),由新西兰奥克兰大学的Peter Fenwick博士于1994年提出。Fenwick Tree用数组来表示一棵树(这样空间上更节约),所以它的结点中没有指向左右孩子的指针这样的设计。它可以用于对区间和(range sum)进行快速查询,其元素修改和区间查询的复杂度都是O(log n)

2021-06-07 13:54:45 44

原创 高级数据结构之线段树(Segment Tree)

线段树(Segment Tree)也是一种树形的数据结构,只不过树中结点存储的值是一个区间或一个线段。 常用于区间内数值的查询操作,比如一个区间内的最大值(max),最小值(min),以及加和(sum)等等。该结构由美国计算机科学家Jon Bentley于1977年提出

2021-06-06 12:34:33 58

原创 深入理解数学计算问题:从LeetCode实践出发【3】(题号166、279)

本文是深入理解数学计算问题的第三篇。这些跟数学有关的编程题目的特点是,要么借助常规算法(例如动态规划)可以解决,要么在非常直接的数学算法实现中需要使用一些数据结构方面的基本知识(例如哈希)。因此,这些题目也比较具有代表性。与仅仅考察一些特殊的数学知识相比,它们其实更有意义

2021-06-05 11:35:53 48

原创 深入理解小众算法之妙用【2】:从Leetcode实践出发(题号99、215、272)Quick select与Morris traversal

LeetCode上面有些题目需要使用一些特殊的算法来解决,尤其是题目附带有特别的时间复杂度或空间复杂度时。需要使用这类算法来解决的LeetCode问题数量是不多的,因此,我把它们称之为小众算法。它们很多都是早已被提出的而且比较成熟的算法,例如Quick select、Morris traversal

2021-06-05 09:28:08 41

原创 算法之美与力扣实战专栏详解:订阅前必读

本专栏从LeetCode实践的角度出发,深入探讨算法设计与数据结构背后的原理。笔者希望透过本系列文章,不仅分享LeetCode经典例题的解题思路(配有大量图示辅助理解)和解题套路,同时循序渐进地讲解了动规、回溯、二分、哈希、DFS等算法设计方面的知识点。本专栏的终极目标是希望你能够在一个固定的地方,找到所需的、所有的、高质量的LeetCode题目解析

2021-05-26 10:41:08 887 1

原创 深入理解结构设计与实现:从Leetcode实践出发【2】(题号341、339、364、1381、1188)

高级程序设计语言中通常都已经提供了许多常用的数据结构实现(例如Python中的collection,或者C++中的STL)。LeetCode中广泛存在一种分类标签为'Design'类型的题目。它们往往会要求应试者在不使用内置函数库的情况下,自行实现某个数据结构(有时还是有特殊要求的数据结构)。这类题目更多考察的往往是面向对象程序设计(尤其是使用某种语言进行面向对象编程)的能力(算法方面的考察则往往不多

2021-05-22 05:14:55 73 4

原创 深入理解随机算法:从LeetCode实践出发【2】(题号478、470、382、710)

随机算法在计算机科学中有重要应用。常说的蒙特卡洛算法或拉斯维加斯算法都属于是随机算法。随机算法或与之相关的数据结构,会要求操作在一定概率下随机返回结果(或者随机执行),例如随机删除、随机访问等。而且,如果有Follow up要求的话,一般需要在一定的时间复杂度下实现算法,这会给求解带来挑战。本文将从LeetCode题目中筛选出一些非常具有代表性的题目,它们的共同特点在于需要用到一些特殊的算法(Reject Sampling、蓄水池采样等)来演示此类问题的解法

2021-05-20 07:00:55 49

原创 深入理解随机算法:从LeetCode实践出发【1】(题号380、381、398、528)

随机算法在计算机科学中有重要应用。常说的蒙特卡洛算法或拉斯维加斯算法都属于是随机算法。随机算法或与之相关的数据结构,会要求操作在一定概率下随机返回结果(或者随机执行),例如随机删除、随机访问等。这类题目,难度通常不大,主要应试者要熟悉语言的内置随机数生成方法。当然,如果有Follow up要求的话,一般需要在一定的时间复杂度下实现算法,那么此时会有一定挑战

2021-05-20 03:07:18 53

原创 深入理解结构设计与实现:从Leetcode实践出发【1】(题号225、232、155、716、706)

高级程序设计语言中通常都已经提供了许多常用的数据结构实现(例如Python中的collection,或者C++中的STL)。LeetCode中广泛存在的'Design'类型题目往往会要求应试者在不使用内置函数库的情况下,自行实现某个数据结构(有时还是有特殊要求的数据结构)。这类题目更多考察的往往是面向对象程序设计(尤其是使用某种语言进行面向对象编程)的能力(算法方面的考察则往往不多)。本文将挑选若干具有代表性的LeetCode题目,演示此类题目的求解思路

2021-05-20 01:29:12 67

原创 时间序列分析之AR、MA、ARMA、ARIMA详解(5)

时间序列分析是一种动态数据处理的统计方法。该方法基于随机过程理论和数理统计学方法,研究随机数据序列所遵从的统计规律,以用于解决实际问题。它包括一般统计分析(如自相关分析,谱分析等),统计模型的建立与推断,以及关于时间序列的最优预测、控制与滤波等内容

2021-05-14 10:56:01 175 2

原创 深入理解二叉树与递归:从LeetCode实践出发【2】(题号235、236、1026、1123、1650)

递归是强大的问题求解工具,是程序设计中的一种重要思想和机制。递归有助于写出清晰易懂的代码,能有效提高程序的整体风格。此外,很多算法的实现都有赖于递归函数,例如DFS、回溯、动态规划等。二叉树是一种典型的递归数据结构。因此,很多跟二叉树有关的问题用递归的代码来求解都是最方便的

2021-04-12 12:20:54 142 1

原创 深入理解二叉树与递归:从LeetCode实践出发【1】(题号1448、129、617、814、98、333、124)

递归是强大的问题求解工具,是程序设计中的一种重要思想和机制。递归有助于写出清晰易懂的代码,能有效提高程序的整体风格。此外,很多算法的实现都有赖于递归函数,例如DFS、回溯、动态规划等。二叉树是一种典型的递归数据结构。因此,很多跟二叉树有关的问题用递归的代码来求解都是最方便的。本文主要以LeetCode中的题目为例,演示利用递归的方法解决二叉树有关问题的技巧与方法

2021-04-12 08:54:10 525 1

原创 深入理解优先队列与堆:从Leetcode实践出发【2】(题号23、215、857、295)

堆是一种非常有用的数据结构类型,它可以用作执行优先级队列的存储结构,也可以用来实现堆排序。Python中对优先级队列和堆,都提供了很好的支持。LeetCode题库中有相当一部分会考察堆的使用与理解,本文将从LeetCode实战的角度出发,演示堆(或优先级队列)在问题求解中的具体应用

2021-04-08 17:46:03 226

原创 深入理解优先队列与堆:从Leetcode实践出发【1】(题号253、670、146、767)

在实际应用中,队列中的元素可能需要一定的优先级,每次从队列中取出具有特定优先级的元素。这种队列叫做优先级队列(Priority Queue)。实现优先级队列的方法有很多种,使用堆(Heap)来实现是一种比较常见且高效的方法。Python中对优先级队列和堆,都提供了很好的支持。LeetCode题库中有相当一部分会考察堆的使用与理解,本文将从LeetCode实战的角度出发,演示堆(或优先级队列)在问题求解中的具体应用

2021-04-08 12:14:41 269 13

原创 深入理解拓扑排序:从Leetcode实践出发(题号207、210、269、310)

在图论中,对于一个有向无环图(DAG, Directed Acyclic Graph)而言,拓扑排序(Topological Sorting)就是其所有顶点的线性序列,这种序列的先后顺序取决于顶点之间的依赖关系。本文会介绍拓扑排序的基本算法,并用其解决几道经典的LeetCode问题

2021-04-04 04:07:39 240 10

原创 深入理解Python超快速解题语法:从Leetcode实践出发(题号58、1312、1313、1431、1470、1512、1672)

人生苦短,我用Python。严格来说,本文所涉及之内容并不与具体的数据结构或算法相关,但不可否认,正确的使用Python中的特殊语法确实可以快速解决一些LeetCode题目。事实上,在之前的文章中,已经见识过使用Python中正则表达式模块来处理一些字符串问题会大大简化编程工作量。本文中的例子,大部分甚至只需要一行代码即可搞定

2021-04-03 05:57:47 100

原创 深入理解字典树:从Leetcode实践出发(题号208、211、720)

字典树,即Trie树(或前缀树),是为了快速检索单词而设计的一种特殊的树型搜索结构。本文将通过若干LeetCode题目来演示利用Trie树解决实际问题的基本方法,部分内容摘录引用自《算法之美:隐匿在数据结构背后的原理》一书

2021-04-02 04:09:05 334

原创 深入理解正则表达式:从Leetcode实践出发(题号65、1023)

正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。许多程序设计语言都支持利用正则表达式进行字符串操作,例如Python中的re模块,它提供Perl风格的正则表达式模式

2021-04-02 02:19:21 259 1

原创 深入理解并查集:从Leetcode实践出发【2】(题号924、990、684、261)

不相交集(Disjoint Set)又称并查集,是解决等价或划分问题的一种有效的数据结构(树和森林常常被用来描述不相交集)。前一篇文章已经介绍了关于这种特殊数据结构的基本知识,并采用Python3实现了并查集类。本文将继续以LeetCode题目为例来具体实践如何利用并查集这种特殊的数据结构解决实际问题

2021-03-29 19:36:09 278 3

原创 深入理解并查集:从Leetcode实践出发【1】(题号547、323、721)

不相交集(Disjoint Set)又称并查集,是解决等价或划分问题的一种有效的数据结构(树和森林常常被用来描述不相交集)。本文主要节选《算法之美:隐匿在数据结构背后的原理》一书中的相关章节来介绍并查集的基本原理和操作,此处会采用Python3重新实现相关算法。同时,本文还将以一道LeetCode题目为例来具体说明如何利用并查集这种特殊的数据结构解决实际问题

2021-03-27 09:32:00 103

原创 深入理解双指针类型问题:从Leetcode实践出发(题号15、16、18、209)

双指针类型题目的处理对象往往是线性表(例如数组、链表、字符串等),这种类型的题目在LeetCode中是比较普遍的,但难道往往不大。本文并不打算覆盖所有可能的子类型,仅抛砖引玉地讨论几道有一定代表性(同时也可能不太容易想到解法)的问题

2021-03-23 10:30:49 83

原创 深入理解归并与排序:从Leetcode实践出发(题号21、147、148)

排序是算法设计中最基本的问题之一。很多语言也都内置了排序函数,实际开发中需要手工编写排序函数的情况并不多见。但如果涉及到链表排序的话,通常内置函数就不能直接使用了。事实上,LeetCode题库中有相当多涉及排序的问题,也有很多操作链表的问题。本文主要讨论其中几个把链表和排序结合在一起的问题,并复习一下关于归并排序的知识

2021-03-21 12:56:39 78

原创 深入理解回溯法:从Leetcode实践出发【4】(题号51、52、37)

回溯法(Backtracking)是一种重要的算法设计思想。它常常借助深度优先遍历(DFS)来实现,另外一类常借助DFS来实现的算法是动态规划,因此,二者的编码往往会使用到递归。在Leecode上有很多会用到回溯法来解决的编程问题。本文是回溯法系列文章的最后一弹,其中选取的Leetcode题目难度级别为Hard,而且是非常经典的算法问题

2021-03-17 06:24:36 136

原创 深入理解二分查找:从LeetCode实践出发【2】(题号875、658、29、240、436、378)

二分查找(Binary Search)是数据结构与算法课程中应该讲到的一个非常重要的内容。通常,二分查找算法可以借由递归的结构来实现,也可以通过迭代来实现。但是在实际应用中二分查找可能变化出许多更为复杂的形式,面对这些变种题目时能否得心应手地来处理,便考察了你是否真正掌握了二分查找的精髓

2021-03-12 14:55:22 105

原创 深入理解栈结构:从Leetcode实践出发【2】(题号901、496、739、503、84、85、42)

栈是一种非常重要的线性数据结构,它的特点在于最后入栈的数据项也将是最先被处理的数据项。Leetcode中涉及很多与栈相关的题目。此外,像树的深度遍历除了使用递归以外,另外一种写法就是利用栈来迭代(循环)实现。而DFS(也包括回溯法)相关的题目在Leetcode中更是非常普遍。因此,牢固掌握栈的使用,并攻克相关类型题目也非常重要

2021-03-10 07:48:57 84

原创 深入理解栈结构:从Leetcode实践出发【1】(题号20、32、1249、150、735)

栈是一种非常重要的线性数据结构,它的特点在于最后入栈的数据项也将是最先被处理的数据项。Leetcode中涉及很多与栈相关的题目,而且可以基于栈实现的DFS(也包括回溯法)相关的题目在Leetcode中更是非常普遍。牢固掌握栈的使用,并攻克相关类型题目也非常重要。本文将基于Leetcode中的题目来实际展示一下栈的使用

2021-03-10 06:06:43 78

原创 深入理解深度优先搜索:从Leetcode实践出发【3】(题号785、207、797、802、1319)

在图中进行搜索是一个非常重要的话题,具体来说,又分为深度优先搜索(DFS,Depth First Search)和广度优先搜索(BFS, Breadth First Search)两种。其中,前者的理解难度要大于后者,而且在Leetcode解题中,前者应用得也更多。在涉及到回溯或动态规划时,往往也需要借助到DFS来编程实现。本文将从Leetcode题目求解的角度出发,通过实践来探讨一下DFS有关的一些话题

2021-03-06 17:53:50 611 5

原创 深入理解深度优先搜索:从Leetcode实践出发【2】(题号733、559、695、200、690、17)

在树(或者图)中进行搜索是一个非常重要的话题,具体来说,又分为深度优先搜索(DFS,Depth First Search)和广度优先搜索(BFS, Breadth First Search)两种。其中,前者的理解难度要大于后者,而且在Leetcode解题中,前者应用得也更多。在涉及到回溯或动态规划时,往往也需要借助到DFS来编程实现

2021-03-06 04:45:13 267 1

原创 深入理解回溯法:从Leetcode实践出发【3】(题号22、79、131、254、526、1079)

回溯法(Backtracking)是一种重要的算法设计思想。它常常借助深度优先遍历(DFS)来实现,另外一类常借助DFS来实现的算法是动态规划,因此,二者的编码往往会使用到递归。在Leecode上有很多会用到回溯法来解决的编程问题。本文将从Leetcode题目求解的角度出发,通过实践来探讨一下回溯法编程的基本套路

2021-03-05 08:12:17 103

原创 深入理解回溯法:从Leetcode实践出发【1】(题号46、47、78、90、784)

回溯法(Backtracking)是一种重要的算法设计思想。它常常借助深度优先遍历(DFS)来实现,另外一类常借助DFS来实现的算法是动态规划,因此,二者的编码往往会使用到递归。在Leecode上有很多会用到回溯法来解决的编程问题。本文将从Leetcode题目求解的角度出发,通过实践来探讨一下回溯法编程的基本套路import copyclass Solution:...

2021-03-01 03:56:41 103

原创 深入理解动态规划:从Leetcode实践出发【5】(题号198、213、983、416、322)

动态规划是一种非常重要的算法设计思想。历史上有很多著名的算法都是基于这种思想设计而来的,例如:Needleman–Wunsch算法、CYK算法、FFT算法、维特比算法等等。动态规划的核心思想有两个:首先是将一个大问题拆解为若干子问题;其次是将曾经计算过的结果储存起来以备多次使用。实践中,动态规划方面的编程题目,变化多端,难度较大。本系列教程,博主希望可以帮助读者做到从入门到精通,循序渐进地深入理解并掌握相关题目的求解技巧

2021-02-25 09:31:31 969

原创 深入理解动态规划:从Leetcode实践出发【4】(题号121、300、516、416、730)

动态规划是一种非常重要的算法设计思想。历史上有很多著名的算法都是基于这种思想设计而来的,例如:Needleman–Wunsch算法、CYK算法、FFT算法、维特比算法等等。动态规划的核心思想有两个:首先是将一个大问题拆解为若干子问题;其次是将曾经计算过的结果储存起来以备多次使用。实践中,动态规划方面的编程题目,变化多端,难度较大。本系列教程,博主希望可以帮助读者做到从入门到精通,循序渐进地深入理解并掌握相关题目的求解技巧

2021-02-23 17:17:17 92

原创 Carlini-Wagner的L0攻击(Adversarial Examples)

Nicholas Carlini与其导师David Wagner 在2017年IEEE Symposium on Security & Privacy上发表的论文中提出了后来以他们名字命名的AE生成算法——Carlini-Wagner攻击(或简称为CW攻击),论文也荣获当年度的会议最佳学生论文奖。论文中,作者提出了L0、L2、L_inf三种攻击方式,本文主要以ImageNet数据集为例演示其中L0攻击的效果

2021-02-23 13:39:26 374

原创 深入理解动态规划:从Leetcode实践出发【3】(题号1143、718)

动态规划是一种非常重要的算法设计思想。历史上有很多著名的算法都是基于这种思想设计而来的,例如:Needleman–Wunsch算法、CYK算法、FFT算法、维特比算法等等。动态规划的核心思想有两个:首先是将一个大问题拆解为若干子问题;其次是将曾经计算过的结果储存起来以备多次使用。实践中,动态规划方面的编程题目,变化多端,难度较大。本系列教程,博主希望可以帮助读者做到从入门到精通,循序渐进地深入理解并掌握相关题目的求解技巧

2021-02-23 13:38:36 119

原创 深入理解哈希:从Leetcode实践出发【2】(题号523、560、525、974)(前缀和类型题目)

前缀和类型题目是Leetcode中比较特别的且又比较普遍的一类题目。它隐式地使用了动态规划的思想,但是在具体编码实现时,又必须借助哈希表(字典)。因此,它同时考察了两方面知识的掌握情况。但是,前缀和相关问题的动规的部分通常状态转移方程是有定式的,所以真正考察的点更应该是如何定义字典

2021-02-23 09:19:44 365

在Word中写出像LaTeX一样的公式

Word中编辑数学公式的技巧(毕业论文排版必备),在Word中写出像LaTeX一样的的公式。

2015-12-21

白马负金羁的留言板

发表于 2020-01-02 最后回复 2020-07-24

空空如也

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

TA关注的人 TA的粉丝

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