算法
文章平均质量分 53
少儿西笑
自然语言处理工程师
展开
-
每天一道算法题(2020.06.18)- 电话号码的字母组合
题目给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例:输入:“23”输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].说明:尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。思路应用回溯法,回溯是一种通过穷举所有可能情况来找到所有解的算法。代码 def letter_combinations(digits):原创 2020-06-18 17:00:46 · 364 阅读 · 0 评论 -
每天一道算法题(2020.06.15)-三数之和
题目给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。示例给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[ [-1, 0, 1], [-1, -1, 2]]思路排序,双指针:首先对数组进行排序,遍历数组中的每个数作为三元组中的一个数i,应用双指针获取当前数i之后的另外两个数。细节:如原创 2020-06-15 09:44:08 · 206 阅读 · 0 评论 -
每天一道算法题(2020.06.09)-最多盛水容器
题目描述给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且 n 的值至少为 2。示例输入:[1,8,6,2,5,4,8,3,7]输出:49思路算法流程: 设置双指针 i,j分别位于容器壁(数组)两端,根据规则移动指针,并且持续更新面积最大值 res,直到 i == j 时返回原创 2020-06-09 16:52:12 · 174 阅读 · 0 评论 -
每天一道算法题(2020.06.04)-正则匹配
题目描述给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。‘.’ 匹配任意单个字符‘*’ 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。说明:s 可能为空,且只包含从 a-z 的小写字母。p 可能为空,且只包含从 a-z 的小写字母,以及字符 . 和 *。示例 1:输入:s = “aa”p = “a”输出: false解释: “a” 无法匹配 “aa” 整个字符串。示例 2:输入:s =原创 2020-06-04 16:06:10 · 162 阅读 · 0 评论 -
numpy基本练习(三)
# translation of typez = np.arange(10,dtype=np.int32)print(z.dtype)z = z.astype(np.float32)print(z.dtype)# print index and elementz = np.arange(9).reshape(3,3)for index,value in np.ndenumerate...原创 2019-11-20 20:07:39 · 147 阅读 · 0 评论 -
numpy基本练习(二)
# constitute a matrix of (6,7,8), find the index of 100th elementprint(np.unravel_index(100,(6,7,8)))# normalizationhu_array = np.random.random((5,5))hu_max = hu_array.max()hu_min = hu_array.min...原创 2019-11-20 19:32:19 · 134 阅读 · 0 评论 -
numpy基本练习(一)
import numpy as np# print version of numpyprint(np.__version__)# constitute a matrix of zeros and print its sizez = np.zeros((5, 5))print("%d bytes"%(z.size * z.itemsize))# print the help fil...原创 2019-11-20 19:15:58 · 179 阅读 · 0 评论 -
一个文本纠错的小例子
文本纠错又称为拼写错误或者拼写检查,由于纯文本往往来源于手打或者OCR识别,很可能存在一些错误,因此此技术也是一大关键的文本预处理过程,一般存在两大纠错类型。Non-word拼写错误第一种是Non-word拼写错误,表示此词汇本身在字典中不存在,比如把“要求”误写为“药求”,把“correction”误拼写为“corrction”。操作步骤:这类问题的解决思路可分为两个步骤,首先找到字典中...原创 2019-11-15 16:31:32 · 1393 阅读 · 0 评论 -
Xavier的初始化推导
一般来说,参数初始化可以用高斯分布,均值为0,方差自定义。但是随着计算的进行,数据的分布极有可能发生变化,如果动荡太大,会使模型很难收敛。目的:所以呢,我们希望保持分布的稳定性Xavier Initialization呢,就是这么一种初始化方式,它的目的在于保持每一层的输入与输出的var相同接下来看如何推导出Xavier 的初始化方式首先,对于神经元的计算而言,有如下的算式,x表示输入,...原创 2019-11-15 16:25:56 · 624 阅读 · 0 评论 -
数组中求topK的元素
Q: 我们有N个没有排序的数列列原创 2019-02-18 21:02:17 · 733 阅读 · 0 评论 -
每天一道算法题(2019.2.24)
Q: 假设我们有binary search tree (BST), 请写出search, insert, printOrder, printMax 函数二叉搜索树(BST)基本特性:所有非叶子结点至多拥有两个儿子(Left和Right)所有结点存储一个关键字非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树python 代码:class Node(): def...原创 2019-02-24 12:45:09 · 159 阅读 · 0 评论 -
求平方根
Q:对于给定的整数 n >0, 请求出它的平⽅方根(sqrt(n)), 保留留⼩小数点后⼀一位,不不要使⽤用任何built-in function。思路1: 用二分法求,每次取中间值,查看中间值的平方与给定整数的大小,如果差值小于0.1, 则停止计算。python代码:def sqrt1(n): if n<0: return -1 low = 0 high = n m...原创 2019-02-19 10:15:40 · 415 阅读 · 0 评论 -
Python实现两个排序数组的中位数
Q: 目前有两个已经排序好的数组(从⼩小到⼤大) A,B, 请求出两个数组合并之后 的median。思路:当两个数组合并后的总元素长度是奇数时,中位数的下标是n/2。 当两个数组合并后的总元素个数是偶数时,中位数是下标n/2-1和下标n/2两个元素的平均值。运用递归法求A,B中第k个值。class Solution: """ @param A: An integer array...原创 2019-02-19 11:01:37 · 592 阅读 · 0 评论 -
array和linked list的区别
Q:array和linked list在数据结构中的区别是什什么?在查找,删除,增加操作中的复杂度分别是多少?ArrayList和LinkedList都实现了List接口,他们有以下的不同点:LinkedList比ArrayList更占内存,因为LinkedList为每一个节点存储了两个引用,一个指向前一个元素,一个指向下一个元素。ArrayList是基于索引的数据接口,它的底层是数...原创 2019-02-19 13:55:32 · 3726 阅读 · 0 评论 -
利用动态规划求解编辑距离
概念字符串的编辑距离,又称为Levenshtein距离,由俄罗斯的数学家Vladimir Levenshtein在1965年提出。是指利用字符操作,把字符串A转换成字符串B所需要的最少操作数。其中,字符操作包括:删除一个字符 a) Insert a character插入一个字符 b) Delete a character修改一个字符 c) Replace a ch...原创 2019-02-19 16:24:24 · 665 阅读 · 0 评论 -
模型的评估
一些基本概念:错误率:如果在m个样本中有a个样本分类错误,那么错误率=a/m精度:1-错误率误差:实际预测输出与样本的真实输出之间的差异训练误差/经验误差:学习器在训练集上的误差,在很多情况下,我们都可以学得一个经验误差很小,在训练集上表现很好的学习器泛化误差:在新样本上的误差,我们希望得到的是一个泛化误差很小的学习器,但这点不能通过训练误差来保证过拟合:训练误差很小但是泛化误差很...原创 2019-02-20 17:15:11 · 155 阅读 · 0 评论 -
正则化
Q:关于正则,我们⼀般采⽤L2或者L1, 这两个正则之间有什么区别? 什么时候需要用L2, 什么时候需要用L1?首先,过拟合的问题通常发生在变量(特征)过多的时候。这种情况下训练出的方程总是能很好的拟合训练数据。但是,这样的曲线在新的数据样本中表现不一定好。也就是说,经验误差很小,泛化误差很大的时候,过拟合就产生了。而正则化是解决过拟合的一种常用手段。正则化是一种回归的形式,它将系数估计朝零的...原创 2019-02-20 17:42:06 · 201 阅读 · 0 评论 -
每天一道算法题(2019.3.5)
Q:给定一个序列,求最大子序列思路1: 暴力求解法:把所有可能的子序列列出来作比较,利用双层循环,复杂度为O(n^2)。def maxSubArray(list): res = list[0] for i in range(length(list)):#the start index of subArray maxTmp = 0 for j in range(i, length(l...原创 2019-03-05 17:36:54 · 148 阅读 · 0 评论 -
PCA过程
PCA(Principal Component Analysis),也称为主成分分析。降维可以解决三类问题:缓解维度灾难在压缩数据的同时让信息损失最小化维度少的数据通过可视化更容易理解从数学的角度来看,PCA的目标是什么呢?它的目标是通过某种线性投影,将高维的数据映射到低维的空间中,即把原先的n个特征用数目更少的m个特征取代,并且,我们希望在所投影的维度上数据的方差最大,尽量使新的m个...原创 2019-02-21 10:44:31 · 775 阅读 · 2 评论 -
每天一道算法题(2019.3.8)
Q:Roman numerals are represented by seven different symbols: I, V, X, L, C, D and M.Symbol ValueI 1V 5X 10L 50C 100D ...原创 2019-03-08 18:39:20 · 195 阅读 · 0 评论 -
每天一道算法题(2019.3.14)
Q:最长回文子串给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为1000。示例 1:输入: “babad”输出: “bab”注意: "aba"也是一个有效答案。示例 2:输入: “cbbd”输出: “bb”思路:利用动态规划的方法,拆解为子问题,并解析问题间的关系。其中dp(i,j)表示当s[i:j]子串是否是回文串。当j-i<=1时,如...原创 2019-03-14 10:39:55 · 160 阅读 · 0 评论 -
每天一道算法题(2019.3.7)
Q:给定一个范围为 32 位 int 的整数,将其颠倒。例如,给定123,返回321;给定-12, 返回-21;给定120,返回21 。思路:为了解决负数的问题,先取整数的绝对值;对于超出范围的数进行条件判断(-2^31, 2^31-1);每次取整数的最后一位,把其放到新数的末尾。python代码实现:def reverse(x): a = abs(x) n = 0 while(a!=...原创 2019-03-07 13:42:05 · 178 阅读 · 0 评论 -
每天一道算法题(2019.3.25)
题目:判断一颗二叉树是否为二叉查询树。思路:查看每一个节点是否满足两个条件(并且用递归来实现):左节点及以下节点的值比它小右节点及以下节点的值比它大python代码:class solution: def isValidBST(self, root): """ type root: TreeNode rtype: boolean """ return self....原创 2019-03-25 20:32:08 · 174 阅读 · 0 评论 -
每天一道算法题(2019.3.25)
题目:求二叉树是否平衡(每一个结点的两个子树的深度差不能超过1)思路:应用递归算法python代码:class solution: def isBalancedTree(self, root): def get_height(root): if not root: return 0 left_height, right_height = get_height(r...原创 2019-03-25 21:06:25 · 155 阅读 · 0 评论 -
主成分分析的课堂小结(2)
前面所说的都是只有二位的数据,现在我们把问题普遍化,将高维数据微量低维数据映射的问题。 假设样本X的数量有m个,特征数目有k个,也就是m*k大小的样本,希望降维之后变成m*n,也就是说,降维到n维的空间内。简单地说,我们需要找前n个主成分。用矩阵表示如下: 下面用代码封装一个降维工具:class PCA: def __init__(self, n_components)...原创 2018-08-16 19:40:01 · 172 阅读 · 0 评论 -
堆排序
堆排序也是一种选择排序。每趟从待排序的记录中选出关键字最小的记录,顺序放在已排序的记录序列末尾,直到全部排序结束为止。跟简单选择排序不同的是待排序的待排序列是利用二叉树这种数据结构存储的。那么,堆是什么呢?堆是一课顺序存储的完全二叉树,有大根堆和小根堆。若每个结点的的key不小于其孩子结点的key, 则叫大根堆;若每个结点的的key不大于其孩子结点的key, 则叫小根堆。例如,存在序列{k1,...原创 2019-02-18 12:27:02 · 118 阅读 · 0 评论 -
归并排序
归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;注意要先使每个子序列有序,再使子序列段间有序。例如:有数列{6,202,100,301,38,8,1}初始状态:6,202,100,301,38,8,1第一次归并后:{6,202},{100,301...原创 2019-02-18 09:31:45 · 87 阅读 · 0 评论 -
快速排序算法
Q: 请实现快速排序算法,算法的时间复杂度是多少? 最坏情况下时间复杂度多少?#quick sortdef quickSort(array): if len(array) &lt; 2: # 基线条件(停止递归的条件) return array else: # 递归条件 baseValue = array[0] # 选择基准值 ...原创 2019-02-17 14:51:59 · 102 阅读 · 0 评论 -
自然语言处理中的关键词抽取模型(TF—IDF)
关键词提取能让我们快速地了解一篇文章,或者从大量的语料中快速找到其想说明的主题。在自然语言处理中,提取关键词是很重要的数据预处理部分。这里要介绍的是TF-IDF(term frequency-inverse document frequency)算法来提取关键词,它的实现简单,并且效果显著,所以应用很广。别看它的名字这么复杂,其实原理很简单,是一种统计方法,一个词的重要性随着它在文件中出现的次数...原创 2018-11-26 20:12:14 · 1191 阅读 · 0 评论 -
每天一道算法题(2018.11.25)
题目:给定一个整数数组和一个目标值,找出数组中和为目标值的两个数(找出一组即可)。示例:mums = [2,3,5,6,7]target = 10nums[1]+nums[4]=3+7=10返回[1,4]猛地一想,这不是很简单么,每次取两个数,加起来看看是不是等于target就好了。具体地来说,就是遍历数组中的每个数,让其与之后的数相加,看结果是否等于target。比如,取2, 分别...原创 2018-11-25 11:52:58 · 4630 阅读 · 22 评论 -
关于一款心理辅导机器人的调研(Woebot)
引子Woebot是一款Facebook Messenger聊天机器人,基于认知行为疗法(Cognitive Behavior Therapy,CBT )来帮助精神抑郁人群。这是一个有基于3亿抑郁患者庞大目标用户群的市场。新科技的应用能在许多方面扩展心理治疗工具,以及使用规模和疗效,如今该领域将注意力转入了人工智能技术。AI+心理健康(从认知行为治疗出发)认知行为治疗始于上世纪60年代,其逐渐...原创 2018-11-13 14:15:10 · 3868 阅读 · 0 评论 -
UNE BASE SIMPLE MAIS PARFAITE POUR SENTENCE EMBEDDINGS(一个简单但很难超越的Sentence Embedding基线方法)
法语简介: ABSTRAIT Le succès des méthodes de réseau de neurones pour le calcul des intégrations de mots a conduit à des méthodes activées pour générer des enchaînements sémantiques de textes plus longs,...翻译 2018-09-12 10:19:53 · 400 阅读 · 0 评论 -
动态规划算法例题
题目: 有一个序列[3,-5, 9,0,-2,8,-3,9,5,-9,-2,8],取其中不相邻子序列,求可能的最大值是多少?思路: 用动态规划来求解。 对于最后一个元素,可以分成两种情况,取还是不取。如果取,那么我们在8的基础上再加上前10个元素组成的序列求得的最大值,如果不取,那么我们考虑前11个元素组成的序列即可。假设opt(i)表示(序列长度为i)根据题意所求的最大值。 则有,o...原创 2018-08-18 19:48:45 · 889 阅读 · 0 评论 -
梯度下降法课堂笔记
什么是梯度下降法? 这是一个在机器学习领域来求一个目标函数的最小值的搜索方法。 对于有些函数,我们找到的可能是局部最优解,应该怎么办呢? 下面我们用程序来模拟梯度下降的过程:import numpy as npimport matplotlib.pyplot as pltplot_x = np.linspace(-1,6,141)plot_y = (plot_x-2.5...原创 2018-08-18 13:04:46 · 192 阅读 · 0 评论 -
一些基本的算法题的整理(1)
整理的内容来源于小象学院的算法网络课程:https://www.bilibili.com/video/av17664182?from=search&amp;seid=10695542251210958364用头插法做链表翻转的问题,时间复杂度为O(n) 链表的划分问题 拓扑排序问题 括号匹配问题 遇到左括号就存起来;遇到右括号看看栈顶是不是相应的左括号;先进来的后出...原创 2018-08-13 17:44:55 · 1375 阅读 · 0 评论 -
数据结构与算法(1)
出自网络公开课 https://www.bilibili.com/video/av22774520?from=search&amp;seid=10695542251210958364 的课堂笔记 课程算法是什么? 根据问题,借助工具,有一套固定的程序步骤来解决问题。算法的有穷性? 一个看着正确的程序不一定是算法。需要考虑程序是否会陷入死循环。什么样的算法才是好算法? 正确;健壮...原创 2018-08-13 12:42:47 · 188 阅读 · 0 评论 -
一些基本的算法题的整理(2)
整理的内容来源于小象学院的算法网络课程:https://www.bilibili.com/video/av17664182?from=search&seid=10695542251210958364 这次整理的是关于字符全排列的非递归算法题将一串数字全排列,那么如果我们按从小到大的顺序来排列,也不会漏掉其中任意一个了。 以最小的值为起点,找到比当前值更大的值里面的最小值,如此反复操...原创 2018-08-15 11:13:20 · 202 阅读 · 0 评论 -
每天一道算法题(2018.11.27)
今天的算法题是:给定一个字符串,找出不含重复项的最长子串的长度。比如:输入“abcddf”, 输出4输入“dddf”, 输出2输入“abcccddf”, 输出3首先是暴力求解法,以每一个字符为起始位置查看最长的无重复序列是多长,有多少个字符就进行多少轮。在每一轮中,如果遇到有重复的字符就停止,并且比较上一轮中的最长字符串得到当前的最长字符串。示意图如下:显然这种猛一想就能想到的算法是...原创 2018-11-27 11:07:30 · 786 阅读 · 6 评论 -
为什么信息熵要定义成-Σp*log(p)
作者:西贝链接:https://www.zhihu.com/question/30828247/answer/64816509来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。我从一个非常直观的角度来解释一下熵的定义为什么如题主所示。第一,假设存在一个随机变量x,可以问一下自己当我们观测到该随机变量的一个样本时,我们可以接受到多少信息量呢?毫无疑问,当我们被告...转载 2018-11-27 11:50:33 · 578 阅读 · 0 评论 -
每天一道算法题(2018.12.2)
题目:给定一个只包含&amp;quot;(&amp;quot;, “)”, ”[“,”]“, ”{“, &amp;quot;}&amp;quot;的字符串,判断字符串是否有效,有效字符串需要满足:左括号必须用相同类型的右括号闭合;左括号必须以正确的顺序闭合。例子:输入:{}{}[]输出:true输入:{[}{]}输出:false输入:{[()]}输出:true刚刚看到题的时候,感觉还是挺复杂的,不过动原创 2018-12-02 20:33:26 · 2241 阅读 · 3 评论