
算法
文章平均质量分 91
vivian_ll
这个作者很懒,什么都没留下…
展开
-
LeetCode总结——从2Sum、3Sum、3Sum Closest、4Sum到kSum
leetcode求和问题描述(K sum problem):给你一组N个数字(nums), 然后给你一个常数(target) ,我们的目标是在这一堆数里面找到K个数字,使得这K个数字的和等于target。注意事项(constraints):注意这一组数字可能有重复项:比如 1 1 2 3 , 求3sum, 然后 target = 6, 你搜的时候可能会得到 两组1 2 3, 1 2 3,1...原创 2020-02-12 11:42:34 · 290 阅读 · 0 评论 -
五大经典算法(贪婪、动态规划、分治、回溯、分支限界法)及其联系和比较
一、贪心法贪心算法的定义:贪心算法(也叫贪婪算法)是指在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,只做出在某种意义上的局部最优解。贪心算法不是对所有问题都能得到全局最优解,得到的是局部最优解,关键是贪心策略的选择,不同的贪婪策略会导致得到差异非常大的结果。选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。解题的一般...原创 2019-11-27 20:28:55 · 19350 阅读 · 0 评论 -
LeetCode10:正则表达式匹配(python版)
题目描述:请实现一个函数用来匹配包括’.’和’*’的正则表达式。模式中的字符’.’表示任意一个字符,而’*’表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串”aaa”与模式”a.a”和”ab*ac*a”匹配,但是与”aa.a”和”ab*a”均不匹配思路1——递归:本题就是很直观的字符串的匹配,难点在于当遇到模式中两个特殊字符怎么处理和对于...原创 2019-02-26 16:07:54 · 1771 阅读 · 1 评论 -
面试准备——常问代码题
题目一:1.给定一个数组,升序数组,将他构建成一个BST思路:升序数组,这就类似于中序遍历二叉树得出的数组,那么根节点就是在数组中间位置,找到中间位置构建根节点,然后中间位置的左右两侧是根节点的左右子树,递归的对左右子树进行处理,得出一颗BST# Definition for a binary tree node.# class TreeNode(object):# def __...原创 2019-03-15 00:43:55 · 519 阅读 · 0 评论 -
面试准备——排序算法归纳
1.快速排序排序的时间复杂度最坏情况:以大O记号形式表示的时间复杂度,给出了一个算法的最坏情况,即--对于规模为n的任意输入,算法的运行时间都不会超过O(f(n))最好情况 :大 Ω记号-->如果存在正的常数c和函数g(n),对任意n>>2,有T(n) > c * g(n),即认为:在n足够 大后,g(n)给出了T(n)的一个下界,记为:T(n) =Ω (g(n))...原创 2019-03-19 19:24:34 · 262 阅读 · 0 评论 -
面试准备——动态规划(1):编辑距离及其回溯路径
一、求编辑距离(Leetcode 72)编辑距离(Edit Distance),是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。允许对字符串中的字符进行的的操作只有替换、插入、删除三种操作。编辑距离是自然语言处理中的重要的文本比较算法之一。也是从多个相似的字符串组中提取字符串的有利的武器。编辑距离算法,也称为LD算法。LD算法就是自然语言处理(NLP)里的“编辑距离”算法。俄国科学家...原创 2019-06-21 10:39:49 · 3303 阅读 · 1 评论 -
面试准备——动态规划(2):八皇后问题/n皇后问题
题目:在8×8的国际象棋上摆放八个皇后,使其不能相互攻击,即任意两个皇后不得处在同一行、同一列或者同一对角斜线上。下图中的每个黑色格子表示一个皇后,这就是一种符合条件的摆放方法。请求出总共有多少种摆法。(leetcode51、52)解法一:回溯法由于每次都是遍历下一行,所以两个皇后的行肯定不同;因此判断当前列是否已经占用,和判断对角线的位置。用三个数组来表示列、正反对角线的占用情况。一行行的...原创 2019-06-21 11:01:59 · 3397 阅读 · 2 评论 -
FST(Finite State Transducers, 有限状态转换器)简介及示例
一、简介Finite State Transducers 简称 FST, 中文名:有穷状态转换器。FST目前在语音识别和自然语言搜索、处理等方向被广泛应用。例如,在自然语言处理中,经常会遇到一些针对某些内容法则做出修改的操作,比如:如果c的后面紧接x的话,则把c变为b,FST则是基于这些规则上的数学操作,来把若干个规则整合成一个单程的大型规则,以有效提高基于规则的系统(rule-based s...原创 2019-07-08 15:55:55 · 17328 阅读 · 7 评论 -
面试准备——动态规划(4):合并石头的最低成本 & 击爆气球
题目:有 N 堆石头排成一排,第 i 堆中有 stones[i] 块石头。每次移动(move)需要将连续的 K 堆石头合并为一堆,而这个移动的成本为这 K 堆石头的总数。找出把所有石头合并成一堆的最低成本。如果不可能,返回 -1 。(leetcode1000题)示例1:输入:stones = [3,2,4,1], K = 2输出:20解释:从 [3, 2, 4, 1] 开始。合并...原创 2019-08-26 16:26:59 · 772 阅读 · 0 评论 -
面试准备——python 十大经典排序算法
本文转载自:python 十大经典排序算法 排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。用一张图概括: 关于时间复杂度:平方阶 (O(n...转载 2019-03-05 16:42:39 · 595 阅读 · 0 评论 -
面试准备——栈和队列
栈的特点就是后进先出,需要O(N)的时间才能找到栈中的最值。队列和栈刚好相反,是先进先出,表面上和栈是一对矛盾体,但实际上,都可以利用对方来实现自己。1.用两个栈实现一个队列思路:入队:元素进栈A出队:先判断栈B是否为空,为空则将栈A中的元素 pop 出来并 push 进栈B,再栈B出栈,如不为空则栈B直接出栈改进:入队:元素进栈A出队:先判断栈B是否为空,为空则将栈A中的n-1个...原创 2019-03-05 16:14:01 · 236 阅读 · 0 评论 -
面试准备——链表
链表链表是一种动态的数据结构,因为在创建链表时,我们不需要知道链表的长度,当插入一个结点时,只需要为该结点分配内存,然后调整指针的指向来确保新结点被连接到链表中。所以,它不像数组,内存是一次性分配完毕的,而是每添加一个结点分配一次内存。正是因为链表的内存不是一次性分配的,所以它没有闲置的内存,比起数组,空间效率更高。单向链表:class ListNode: def __init__(...原创 2019-03-05 15:52:10 · 217 阅读 · 0 评论 -
欧氏距离和余弦相似度
参考自: 欧氏距离与余弦相似度 欧氏距离和余弦相似度 在数据分析和数据挖掘的过程中,我们经常需要知道个体间差异的大小,进而评价个体的相似性和类别。最常见的是数据分析中的相关分析,数据挖掘中的分类和聚类算法,如K最近邻(KNN)和K均值(K-Means)。 来衡量两者的差异的方法,主要分为距离度量和相似度度量。 距离度量 距离度量(Distance)用于衡量个体在空间上存在的距离,距离越转载 2017-03-11 11:31:36 · 4378 阅读 · 0 评论 -
《数学之美》阅读笔记part1——第1章到第15章
第1章 文字和语言vs数字和信息1 信息用声音来传播信息是通信的一种方式,发出的声音对信息进行编码,声音在空气(信道)中传播到达人耳,人对听到的声音解码得出信息。2 文字和数字罗塞塔石碑的启示:(1) 信息的冗余是信息安全的保障。(2) 语言的数据,我们称之为语料,尤其是双语或者多语的对照语料对翻译至关重要,是我们从事机器翻译研究的基础。数字的解原创 2017-06-03 12:15:12 · 1210 阅读 · 0 评论 -
《数学之美》阅读笔记part2——第16章到第31章
第16章 信息指纹及其应用1 信息指纹将5000亿个网址随机地映射到128位二进制即16个字节的整数空间中,这16个字节的随机数就称作该网址的信息指纹。伪随机数产生器算法PRNG:最早的冯诺依曼将一个数的平方掐头去尾取中间的几位数,现在常用梅森旋转算法。信息指纹具有不可逆性,也就是说无法根据信息指纹推出原有信息。如cookie在互联网上加密要使用基于加密的伪随机数产生器(C原创 2017-06-03 16:16:36 · 2608 阅读 · 0 评论 -
算法初步
算法what?有穷性、确定性、可行性、输入&输出How?穷举(万能算法)求N个数的全排列8皇后问题分而治之(减而治之)二分查找——减而治之归并排序——分而治之贪心最小生成树单源最短路...原创 2018-07-27 16:30:22 · 823 阅读 · 0 评论 -
用c++实现一个n*n矩阵,矩阵沿着45度递增,形成zigzag数组
程序员面试宝典上的一道题:输入n,求一个nXn矩阵,规定矩阵沿45度递增,形成一个zigzag数组(JPEG编码里取像素数据的排列顺序),请问如何用C++实现?(中国台湾著名硬件公司2007年11月面试题)(自程序员面试宝典第五版95页)觉得这道题比较经典,难度适中,因此记录下来。zigzag数组形状如下:/*打印zigzag数组 1 5 6 14 15 27 ...原创 2018-10-17 16:40:41 · 1818 阅读 · 0 评论 -
用C++实现两个元素相同但顺序不同的等长数组的正确匹配
《程序员面试宝典》第五版第96页题目如下:有两等长数组A,B,所含元素相同,但顺序不同,只能取得A数组某值和B数组某值进行比较,比较结果为大于,小于,等于,但是不能取得同一数组A或者B中两个数进行比较,也不能取得某数组中的某个值。写一个算法实现正确匹配(即A数组中某值与B数组中某值等值)。最简单的方法:循环加判断,复杂度O(n^2)代码如下:#include <iostream...原创 2018-10-17 17:36:10 · 1684 阅读 · 1 评论 -
面试准备——二叉树
二叉树1.前序:根-左-右# 先序打印二叉树(递归)def preOrderTraverse(node): if node is None: return None print(node.val) preOrderTraverse(node.left) preOrderTraverse(node.right)# 先序打印二叉树(非递归)d...原创 2019-03-05 11:51:24 · 501 阅读 · 0 评论 -
面试准备——其他算法
百元百鸡用100文钱买一百只鸡,其中公鸡,母鸡,小鸡都必须要有,问公鸡,母鸡,小鸡要买多少只刚好凑足100文钱。分析:不定方程可以得出如下的不定方程,x+y+z=100,5x+3y+z/3=100,下面再看看x,y,z的取值范围。由于只有100文钱,则5x<100 => 0<x<20, 同理 0<y<33,那么z=100-x-y,# 时间复...原创 2019-03-05 12:08:35 · 232 阅读 · 0 评论 -
论文笔记:Do we Need Hundreds of Classifiers to Solve Real World Classification Problems
Abstract179个分类器17个类别(判别分析,贝叶斯,神经网络,支持向量机,决策树,基于规则的分类器,boosting,bagging,stacking,随机森林和其他集成方法,广义线性模型,近邻算法,偏最小二乘(PLS)和主成分回归,逻辑和多项式回归,多元自适应回归样条函数和其他方法)。121个数据集(the whole UCI data base)性能最好的是: 1. RF——原创 2017-03-10 16:41:21 · 2122 阅读 · 0 评论