算法
一只tobey
中国,广州,从城中到乡下,再从乡下进城里,保持努力!
展开
-
离群点检测和新奇检测之离群点检测
一、噪音和离群点(异常值)的区别:离群点是一个数据对象,它显著不同于其他数据对象,好像它是被不同的机制产生的一样。有时也称非离群点为“正常数据”,离群点为“异常数据”。离群点不同于噪声数据。噪声是被观测变量的随机误差或方差。一般而言,噪声在数据分析(包括离群点分析)中不是令人感兴趣的。如在信用卡欺诈检测,顾客的购买行为可以用一个随机变量建模。一位顾客可能会产生某些看上去像“随机误差”或“方差”的噪声交易,如买一份较丰盛的午餐,或比通常多要了一杯咖啡。这种交易不应该视为离群点,否则信用卡公司将因验证太转载 2020-07-29 11:44:36 · 5091 阅读 · 0 评论 -
根据输入创建得到一棵二叉树或者单链表
python创建链表class SingleNode(object): # 默认是object,下面的类也同理,可使用class SingleNode: def __init__(self,value): self.val=value self.next=None# 创建单链表class LinkedList(object): def _...转载 2020-05-04 02:07:51 · 1051 阅读 · 0 评论 -
找出n个数中的前k个数
如果按照牛客网的剑指offer里面的做法,采用改进的快排,那么时间复杂度是O(n)如果是基本排序的排法,就选择堆排序更快,分析如下:1、快速排序:在最理想的情况下,即划分可以使得每次分到n/2 的两个序列,复杂度为o(nlogn)。2、堆排序:无论什么情况都是o(nlogn),当然还有建堆的时间o(n),所以为n+nlogn,但是,本题只是要前五十个,所以堆排序只需要执行5...原创 2019-11-28 21:36:46 · 1286 阅读 · 0 评论 -
将N条长度均为M的有序链表进行合并,合并以后的链表也保持有序,时间复杂度为()?
1. 在每一个链表中取出第一个值,然后把它们放在一个大小为N的数组里,然后把这个数组当成heap建成小(大)根堆。此步骤的时间复杂度为O(N):N个数构建一个堆的复杂度是O(N)2. 取出堆中的最小值(也是数组的第一个值), 然后把该最小值所处的链表的下一个值放在数组的第一个位置。如果链表中有一个已经为空(元素已经都被取出),则改变heap的大小。此步骤的时间复杂度为O(lg N)。...原创 2019-11-28 20:58:22 · 3655 阅读 · 0 评论 -
庄园主掰金子付钱给农民
这道题主要点在于:不是给出去的就收不回来了,可以用交换的方法。分析:总共要组成的数字转化成二进制,查看二进制的位数,就分成几部分,然后就知道要掰断的次数总共7天,那么二进制是111,同位数最大是111,因此可以取的位数是三位,分别是1,2,4总共三个部分,那么需要掰断2次若总共6天,那么二进制是110,同位数最大是111,因此可以取的位数是三位,分别是1,2,3其中3是...原创 2019-11-28 20:20:51 · 287 阅读 · 0 评论 -
0/1背包问题
问题描述:原创 2019-11-26 21:01:01 · 477 阅读 · 0 评论 -
回溯法,分支限界法, 贪心算法
求解目标不同,搜索方式也不同回溯法的求解目标是找出T中满足约束条件的所有解,而分支限界法的求解目标则是找出满足约束条件的一个解,或是在满足约束条件的解中找出使某一目标函数值达到极大或极小的解,即在某种意义下的最优解。回溯法以深度优先的方式搜索解空间树T,而分支限界法则以广度优先或以最小耗费优先的方式搜索解空间树T。回溯法 1)(求解目标)回溯法的求解目标是找出解空间中满足约束条...原创 2019-11-26 20:59:59 · 903 阅读 · 0 评论 -
图算法:一种比线性表和树更复杂的数据结构
线性表中,数据元素叫做元素,仅有线性关系,每个元素之间只有一个前驱和一个后继。树形结构中,数据元素叫做结点,结点之间有明显的层次关系,结点只有一个父节点,但是可以有多个子结点。图是一种比线性结表和树更加复杂的数据结构,可以表示多对多的数据关系。一、基本概念:1.图的定义:图是由顶点的有穷非空集合和顶点之间边的集合组成。通用表示为G(V,E),其中G表示一个图(graph),V是图中2顶点集...原创 2019-11-26 17:18:44 · 884 阅读 · 0 评论 -
KMP字符串匹配算法
一.KMP算法KMP算法应该是每一本《数据结构》书都会讲的,算是知名度最高的算法之一,KMP是三位大牛:D.E.Knuth、J.H.Morris和V.R.Pratt同时发现的。取了每个人的第一个字母所以叫KMP咯。KMP算法要解决的问题就是在字符串(也叫主串)中的模式(pattern)定位问题。说简单点就是我们平时常说的关键字搜索。模式串就是关键字(接下来称它为P),如果它在一个主串(接下...转载 2019-11-20 01:03:22 · 128 阅读 · 0 评论 -
哈夫曼编码( huffman编码),哈夫曼树(也翻译赫夫曼)
解决的问题:带权路径长度WPL最小的二叉树称作赫夫曼树(也叫做最优二叉树)。赫夫曼树构造方法:1.先把有权值的叶子结点按照从小到大的顺序排列成一个有序序列2.取头两个最小权值的结点作为一个新结点N1的两个子结点,注意相对较小的是左孩子3.将N1替换它的子结点,插入有序序列中,保持从小到大排序4.重复步骤2和3直到得到根结点,完成赫夫曼树的构造。赫夫曼编码解决的问题...原创 2019-11-20 00:56:20 · 1184 阅读 · 0 评论 -
算术表达式的前缀表达式,中缀表达式和后缀表达式
这里所谓的前缀,中缀,后缀是根据操作符的位置来定的,如果操作符在操作数前面,则称为前缀表达式,例如“- + 1 × + 2 3 4 5”;如果操作符在操作数之间,则称为中缀表达式,例如“1+((2+3)×4)-5”;如果操作符在操作数后面,则称为后缀表达式,例如“1 2 3 + 4 × + 5 -”。原因:虽然中缀表达式符合人类的日常思维习惯,但是计算机在存储中缀表达式时,需要使用...转载 2019-11-19 22:10:16 · 5754 阅读 · 0 评论 -
两个单链表的求和,将矩阵元素全部对换
def lengthNum(head): length = 0 pt = head while pt: length += 1 pt = pt.next return lengthdef computeSum(pt1, pt2, count): if pt1 == None or pt2 == None: ...原创 2019-10-30 10:18:27 · 178 阅读 · 0 评论 -
动态规划问题
一些例子和实现代码原创 2019-10-23 01:37:35 · 591 阅读 · 0 评论 -
八皇后问题的解题思路
关于八皇后问题以及回溯递归思想回溯法---n皇后问题 是回溯递归思想的展现。回溯法和枚举法的区别回溯法与穷举法有某些联系,它们都是基于试探的。穷举法要将一个解的各个部分全部生成后,才检查是否满足条件,若不满足,则直接放弃该完整解,然后再尝试另一个可能的完整解,它并没有沿着一个可能的完整解的各个部分逐步回退生成解的过程。而对于回溯法,一个解的各个部分是逐步生成的,当发现当前生成的...原创 2019-10-23 01:37:04 · 1126 阅读 · 0 评论 -
最小二乘法解的矩阵形式推导,以及BN(batch normalization)的求导公式
求解下列最小二乘的解: ,其中解法一:由基本的实值函数对向量的求导公式推导解法二:使用线性变换的求导公式解法三:元素法,网上搜索的绝大部分推导过程都是此法下面只对上面两种解法解析,具体如下:求解BN的反向传播公式1.BN算法的计算过程如下:其中m是批的...原创 2019-10-22 13:37:02 · 2191 阅读 · 0 评论 -
最小的k个数或者最大的k个数
原创 2019-10-18 11:40:27 · 112 阅读 · 0 评论 -
排序算法的时间复杂度汇总
可参考:时间复杂度和空间复杂度简单排序中的 冒泡排序思想:两两相邻数值比较,如果逆序则交换,直到没有逆序的记录为止;复杂度分析:最好的情况是待排序表是正序,不需要交换,复杂度是O(n);最坏情况待排序表是逆序,每次都要交换,复杂度是O(n^2);平均是O(n^2)。辅助空间O(1)快速排序思想:通过一趟排序将代排记录分割成独立的前后两部分,其中一部分的值均比另一部分小,接着又可...原创 2019-10-18 11:08:52 · 2424 阅读 · 0 评论 -
数据项组成数据元素,数据元素组成数据
数据元素:是组成数据的、有一定意义的基本单位。数据项:一个数据可以由若干个数据项组成。数据项是数据不可分割的最小单位。数据元素:字段、域、属性数据项:元素、结点、顶点、记录数据项组成数据元素,数据元素组成数据顺序存储:查找结点O(1),删除结点O(n)链式存储:查找结点O(n),删除结点O(1)删除操作前,如果包括查找操作,那么是一样的;若不包括,则不同...原创 2019-10-18 11:00:23 · 5946 阅读 · 0 评论 -
算法的空间复杂度
原创 2019-10-18 10:56:07 · 240 阅读 · 0 评论 -
数据结构中的线性结构
线性结构是一个有序数据元素的集合。数据结构中线性结构指的是数据元素之间存在着“一对一”的线性关系的数据结构。常用的线性结构有:线性表,栈,队列,双队列,数组(一维数组),串。相对应于线性结构,非线性结构的逻辑特征是一个结点元素可能对应多个直接前驱和多个后继。如树,表,多维数组等广义表是非线性结构的,它也是线性表的一种推广。二叉树是树状结构。稀疏矩阵常用来存储图。串,...原创 2019-10-18 10:50:40 · 4441 阅读 · 0 评论 -
汉诺塔问题(递归)
汉诺塔问题不管在任何编程语言里都是经典问题,是采用递归算法的经典案例,该问题可以抽象如下:一 3根圆柱A,B,C,其中A上面串了n个圆盘二 这些圆盘从上到下是按从小到大顺序排列的,大的圆盘任何时刻不得位于小的圆盘上面三 每次移动一个圆盘,最终实现将所有圆盘移动到C上 利用Python语言接近自然语言的特性,开发者可以更容易的将递归算法翻译成程序语句,需要的...原创 2019-10-17 22:22:11 · 807 阅读 · 0 评论 -
递归、分治、动态规划、贪心、回溯、分支限界几大相似算法比较
可参考:算法高级(28)-递归、分治、动态规划、贪心、回溯、分支限界几大相似算法比较递归算法是一种直接或者间接地调用自身算法的过程。在计算机 编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解。递归算法解决问题的特点:(1) 递归就是在过程或函数里调用自身。(2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。(3) 递归算...原创 2019-10-17 21:18:42 · 393 阅读 · 0 评论 -
递归算法时间复杂度分析(master公式使用)
可参考:递归算法的时间复杂度终结篇原创 2019-10-17 20:32:35 · 401 阅读 · 0 评论 -
数组中出现次数超过一半的数字
数组中出现次数超过一半的数字题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0# 方法1;常见方法,使用字典的方法def MoreThanHalfNum_Solution(numbers): len1 = len(n...原创 2019-10-12 14:44:24 · 98 阅读 · 0 评论 -
寻找100以内的质数
寻找100以内的质数定义:一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数定理1:从2开始到比自己小的数都不能被整除(2是质数,除外)定理2: 一个合数一定可以分解成几个质数的乘积,也就是说,一个数如果能被一个质数整除就是合数¶# 使用定理1的方法#方法1n = 100for i in range(2, n): for j in range(2...原创 2019-10-12 14:41:04 · 1011 阅读 · 0 评论 -
反转链表,Two Sum 给定一个列表和目标值,找出列表里面两个数使得相加为目标值
# 反转链表class Node: def __init__(self,data=None,nod=None): self.data = data self.next = nod def rev(link): pre = link cur = link.next pre.next = None while...原创 2019-10-12 14:38:53 · 149 阅读 · 0 评论 -
斐波那契数列,递归函数的用例
斐波那契数列斐波那契数列的特征:f2=f1=1,fn=fn-1 + fn-2 ; n>=3 例如:1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, ...# 方法1 定义法 但是效率最低:O(1.618^n)# 该方法也适合产生类斐波那契数列a=time()def fb(n): if n==1 or n==2: ...原创 2019-10-12 14:37:40 · 744 阅读 · 0 评论 -
排序算法
排序算法1.冒泡法排序2.快速排序3.简单选择排序4.堆排序5.直接插入排序6.希尔排序7.归并排序,强调其非递归方法使用以上7种是基本排序8.基数排序9.计数排序10.桶排序基于比较的排序算法有:(1)直接插入排序;(2)冒泡排序;(3)简单选择排序;(4)希尔排序;(5)快速排序;(6)堆排序;(7)归并排序。分配式排序:基数排序、桶排序简单排序中的 冒泡排序...原创 2019-10-12 14:34:08 · 296 阅读 · 0 评论 -
二叉树的问题汇总
给定二叉树T(树深度不超过H<=10,深度从1开始,节点个数N<1024,节点编号1~N)的层序和中序遍历,输出T从左向右叶子节点以及树先序和后序遍历序列输入两行,分别代表层序和中序遍历结果,节点编号按单个空格分开依次输出 从左向右叶子节点 ,先序, 后序 遍历 。 节点编号按空格分开例如:输入3 5 4 2 6 7 12 5 3 6 4 7 1输出2 6 13 5...原创 2019-10-12 14:34:39 · 397 阅读 · 0 评论 -
二分查找
def binarySearch(alist, item): first = 0 last = len(alist) - 1 while first <= last: mid = (first + last)//2 print(mid) if alist[mid] > item: las...原创 2019-10-12 14:35:01 · 119 阅读 · 0 评论