算法&数据结构
文章平均质量分 86
Charles.zhang
朝闻道,夕死可矣。路漫漫其修远兮,吾将上下而求索。
展开
-
斐波那契数列的5种python写法
斐波那契数列的5种python写法斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)斐波那契数列,难点在于算法,还有如果变成生成器,gene...转载 2020-05-09 17:51:53 · 13232 阅读 · 0 评论 -
lintcode练习-229. 栈排序
描述请设计一种方法将一个栈进行升序排列 (最大的数在最上面)。你可以使用另外一个栈来辅助操作,但不可将这些数复制到另外一个数据结构中 (如,数组)。O(n^2) time is acceptable.您在真实的面试中是否遇到过这个题? 是样例给一个栈:| ||3||1||2||4| -排序之后:| ||4||3||2||1| -...原创 2018-07-24 21:15:50 · 465 阅读 · 0 评论 -
lintcode练习-224. 用一个数组实现三个栈
描述用一个数组实现三个栈。你可以假设这三个栈都一样大并且足够大。你不需要担心如果一个栈满了之后怎么办。您在真实的面试中是否遇到过这个题? 是样例ThreeStacks(5) // create 3 stacks with size 5 in single array. stack index from 0 to 2push(0, 10) // push 10 in the ...原创 2018-07-24 23:13:51 · 757 阅读 · 0 评论 -
lintcode练习-104. Merge K Sorted Lists
描述合并k个排序链表,并且返回合并后的排序链表。尝试分析和描述其复杂度。您在真实的面试中是否遇到过这个题? 是样例给出3个排序链表[2->4->null,null,-1->null],返回 -1->2->4->null解题思路:顾名思义,这个最好的解法是使用归并排序,还有一种方法是堆排序。mergesort:#归并排序的思想...原创 2018-07-24 23:19:31 · 178 阅读 · 0 评论 -
lintcode练习-127. 拓扑排序
描述给定一个有向图,图节点的拓扑排序被定义为: 对于每条有向边A--> B,则A必须排在B之前 拓扑排序的第一个节点可以是任何在图中没有其他节点指向它的节点 找到给定图的任一拓扑排序 你可以假设图中至少存在一种拓扑排序您在真实的面试中是否遇到过这个题? 是说明Learn more about representation of graphs...原创 2018-07-25 11:42:17 · 373 阅读 · 0 评论 -
AOV/AOE网及其算法
用图中的顶点表示某个有一定规模的“工程”里的不同活动,用图中的边表示各项活动之间的先后顺序关系。这样的有向图成为活动顶点网(active on vertex network)AOV网。对于给定的AOV网N, 如果N中的所有顶点能排成一个线性序列 S = v0,v1,v2,v3...vn,满足:如果N中存在从顶点Vi到顶点Vj的路径,那么S里Vi就排在Vj之前,则S称为N的一个拓扑序列,而构造拓...原创 2018-07-25 15:10:29 · 2980 阅读 · 1 评论 -
什么是矩阵的迹
在学习andrew ng的深度学习公开课里,可看到一段与数据的矩阵相关的,这里提出了求trace的算法以及规则,虽然学习过高数,线代,概率论,还有数理方程等等,但还是没有什么印象,一脸迷茫。这段相关的文本,我放到这里,如下:只能先百度一下:在线性代数中,一个n×n的对角矩阵A的主对角线(从左上方至右下方的对角线)上各个元素的总和被称为矩阵A的迹(或迹数),一般记作tr(A)。例子如...转载 2018-07-21 08:13:09 · 9828 阅读 · 0 评论 -
字典和哈希表
字典是支持基于关键码的数据存储与检索的数据结构,也被成为查找表、映射或关联表。有关检索效率的评价标准,通常考虑的是在一次完整检索过程中比较关键码的平均次数,通常称为平均检索长度(Average Search Length, ASL),其定义是(其中n为字典中的数据项数):ASL = ∑p*c,(从i=0,n-1),其中c和p分别为第i项数据元素的检索长度和检索概率。如果字典中各元素的...原创 2018-07-26 11:06:53 · 5183 阅读 · 0 评论 -
lintcode练习-128. 哈希函数
描述在数据结构中,哈希函数是用来将一个字符串(或任何其他类型)转化为小于哈希表大小且大于等于零的整数。一个好的哈希函数可以尽可能少地产生冲突。一种广泛使用的哈希函数算法是使用数值33,假设任何字符串都是基于33的一个大整数,比如:hashcode("abcd") = (ascii(a) * 333 + ascii(b) * 332 + ascii(c) *33 + ascii(d)) % ...原创 2018-07-26 11:33:52 · 269 阅读 · 0 评论 -
lintcode练习-56. 两数之和
描述给一个整数数组,找到两个数使得他们的和等于一个给定的数 target。你需要实现的函数twoSum需要返回这两个数的下标, 并且第一个下标小于第二个下标。注意这里下标的范围是 0 到 n-1。你可以假设只有一组答案。您在真实的面试中是否遇到过这个题? 是样例给出 numbers = [2, 7, 11, 15], target = 9, 返回 [0, 1].挑战...原创 2018-07-26 13:34:33 · 178 阅读 · 0 评论 -
lintcode练习- 487. 姓名去重
描述给一串名字,将他们去重之后返回。两个名字重复是说在忽略大小写的情况下是一样的。您在真实的面试中是否遇到过这个题? 是说明你可以假设名字只包含大小写字母和空格。样例给出:[ "James", "james", "Bill Gates", "bill Gates", "Hello World", "HELLO WORLD", &q原创 2018-07-26 19:45:17 · 344 阅读 · 0 评论 -
lintcode练习-488. 快乐数
描述写一个算法来判断一个数是不是"快乐数"。一个数是不是快乐是这么定义的:对于一个正整数,每一次将该数替换为他每个位置上的数字的平方和,然后重复这个过程直到这个数变为1,或是无限循环但始终变不到1。如果可以变为1,那么这个数就是快乐数。您在真实的面试中是否遇到过这个题? 是样例19 就是一个快乐数。 1^2 + 9^2 = 828^2 + 2^2 = 686^2...原创 2018-07-26 20:46:28 · 235 阅读 · 0 评论 -
lintcode练习-521. 去除重复元素
描述给一个整数数组,去除重复的元素。你应该做这些事1.在原数组上操作2.将去除重复之后的元素放在数组的开头3.返回去除重复元素之后的元素个数不需要保持原数组的顺序您在真实的面试中是否遇到过这个题? 是样例给出 nums = [1,3,1,4,4,2],你需要做以下操作1.将重复元素扔在最后面 => nums = [1,3,4,2,?,?].2.返回个数 4...原创 2018-07-26 21:20:02 · 1239 阅读 · 0 评论 -
lintcode练习-547. 两数组的交
描述返回两个数组的交Each element in the result must be unique. The result can be in any order.您在真实的面试中是否遇到过这个题? 是样例nums1 = [1, 2, 2, 1], nums2 = [2, 2], 返回 [2].挑战可以用三种不同的方法实现吗?实现方法:一:class...原创 2018-07-26 23:23:04 · 219 阅读 · 0 评论 -
lintcode练习-548. 两数组的交 II
描述计算两个数组的交每个元素出现次数得和在数组里一样答案可以以任意顺序给出您在真实的面试中是否遇到过这个题? 是样例nums1 = [1, 2, 2, 1], nums2 = [2, 2], 返回 [2, 2].挑战What if the given array is already sorted? How would you optimize your algor...原创 2018-07-27 09:51:28 · 180 阅读 · 0 评论 -
关于哈希表和数据结构的一点随笔
1. 哈希法的概念或原理: 思想是通过一定的手段以达到能通过关键字K直接找到存储以关键字为K的K-V键值对,这个手段就是哈希函数:(便于计算,地址分布均匀,冲突少),而构造出的结果是一张哈希表。2. 哈希函数的构造方法:1、直接寻址法2、取模法3、数字分析法4、折叠法5、平方取中法6、除留余数法7、随机数法8、单旋转法 3. 处理冲突的方法原因:因为无论不同的构...原创 2018-08-05 09:33:24 · 652 阅读 · 0 评论 -
lintcode练习-66.67.68.二叉树的三种递归遍历和非递归遍历
二叉树的先序, 中序, 后序遍历 都是属于深度优先遍历。 直接上代码:先序遍历: class TreeNode: def __init__(self, val): self.val = val self.left, self.right = None, Noneclass Solution: """...原创 2018-07-06 16:48:06 · 189 阅读 · 0 评论 -
lintcode练习-40. 用栈实现队列
描述正如标题所述,你需要使用两个栈来实现队列的一些操作。队列应支持push(element),pop() 和 top(),其中pop是弹出队列中的第一个(最前面的)元素。pop和top方法都应该返回第一个元素的值。您在真实的面试中是否遇到过这个题? 是样例比如push(1), pop(), push(2), push(3), top(), pop(),你应该返回1,2和2挑战仅使用两个栈来实现它...原创 2018-07-12 23:31:15 · 300 阅读 · 0 评论 -
lintcode练习-12. 带最小值操作的栈
描述实现一个带有取最小值min方法的栈,min方法将返回当前栈中的最小值。你实现的栈将支持push,pop 和 min 操作,所有操作要求都在O(1)时间内完成。如果堆栈中没有数字则不能进行min方法的调用您在真实的面试中是否遇到过这个题? 是样例如下操作:push(1),pop(),push(2),push(3),min(), push(1),min() 返回 1,2,1实现代码:思路:定义两...原创 2018-07-12 18:28:17 · 222 阅读 · 0 评论 -
lintcode练习-175.翻转二叉树
描述翻转一棵二叉树您在真实的面试中是否遇到过这个题? 是样例 1 1 / \ / \2 3 => 3 2 / \ 4 4挑战递归固然可行,能否写个非递归的?#递归版本:"""Definition of TreeNode:class TreeNode: def __init__(self, val)...原创 2018-07-08 15:40:16 · 208 阅读 · 0 评论 -
lintcode练习-177.把排序数组转换为高度最小的二叉搜索树
描述给一个排序数组(从小到大),将其转换为一棵高度最小的排序二叉树。There may exist multiple valid solutions, return any of them.您在真实的面试中是否遇到过这个题? 是样例给出数组 [1,2,3,4,5,6,7], 返回 4 / \ 2 6 / \ / \1 3 5 7挑战可能有多个答...原创 2018-07-08 16:15:25 · 183 阅读 · 0 评论 -
lintcode练习-69. 二叉树的层次遍历
描述给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问)您在真实的面试中是否遇到过这个题? 是样例给一棵二叉树 {3,9,20,#,#,15,7} : 3 / \9 20 / \ 15 7返回他的分层遍历结果:[ [3], [9,20], [15,7]]挑战挑战1:只使用一个队列去实现它挑战2:用DFS算法来做实现代码:# Definition of ...原创 2018-07-08 16:18:32 · 217 阅读 · 0 评论 -
lintcode练习-70. 二叉树的层次遍历 II
描述给出一棵二叉树,返回其节点值从底向上的层次序遍历(按从叶节点所在层到根节点所在的层遍历,然后逐层从左往右遍历)您在真实的面试中是否遇到过这个题? 是样例给出一棵二叉树 {3,9,20,#,#,15,7}, 3 / \ 9 20 / \ 15 7按照从下往上的层次遍历为:[ [15,7], [9,20], [3]]实现代码:思路:网上大部分的...原创 2018-07-08 16:24:41 · 190 阅读 · 0 评论 -
lintcode练习-71. 二叉树的锯齿形层次遍历
描述给出一棵二叉树,返回其节点值的锯齿形层次遍历(先从左往右,下一层再从右往左,层与层之间交替进行) 您在真实的面试中是否遇到过这个题? 是样例给出一棵二叉树 {3,9,20,#,#,15,7}, 3 / \ 9 20 / \ 15 7返回其锯齿形的层次遍历为:[ [3], [20,9], [15,7]]实现代码:思路:从题目描述也可以清楚的看...原创 2018-07-08 16:27:20 · 224 阅读 · 0 评论 -
lintcode练习-72. 中序遍历和后序遍历树构造二叉树
描述根据中序遍历和后序遍历树构造二叉树你可以假设树中不存在相同数值的节点您在真实的面试中是否遇到过这个题? 是样例给出树的中序遍历: [1,2,3] 和后序遍历: [1,3,2]返回如下的树: 2 / \1 3实现代码:思路:代码:"""Definition of TreeNode:class TreeNode: def __init__(self, val): s...原创 2018-07-08 16:32:11 · 224 阅读 · 0 评论 -
lintcode练习-73. 前序遍历和中序遍历树构造二叉树
根据前序遍历和中序遍历树构造二叉树.样例给出中序遍历:[1,2,3]和前序遍历:[2,1,3]. 返回如下的树: 2 / \1 3"""Definition of TreeNode:class TreeNode: def __init__(self, val): self.val = val self.left, self.right = None, N...原创 2018-07-08 16:33:25 · 229 阅读 · 0 评论 -
lintcode练习-97. 二叉树的最大深度
给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的距离。样例给出一棵如下的二叉树: 1 / \ 2 3 / \ 4 5这个二叉树的最大深度为3."""Definition of TreeNode:class TreeNode: def __init__(self, val): self.val = val self.le...原创 2018-07-08 16:35:08 · 182 阅读 · 0 评论 -
lintcode练习-201.线段树的构造
线段树是一棵二叉树,他的每个节点包含了两个额外的属性start和end用于表示该节点所代表的区间。start和end都是整数,并按照如下的方式赋值:根节点的 start 和 end 由 build 方法所给出。对于节点 A 的左儿子,有 start=A.left, end=(A.left + A.right) / 2。对于节点 A 的右儿子,有 start=(A.left + A.right) /...原创 2018-07-09 18:42:20 · 218 阅读 · 0 评论 -
lintcode练习-202. 线段树的查询
描述对于一个有n个数的整数数组,在对应的线段树中, 根节点所代表的区间为0-n-1, 每个节点有一个额外的属性max,值为该节点所代表的数组区间start到end内的最大值。为SegmentTree设计一个 query 的方法,接受3个参数root, start和end,线段树root所代表的数组中子区间[start, end]内的最大值。在做此题之前,请先完成 线段树构造 这道题目。您在真实的面...原创 2018-07-09 18:59:39 · 189 阅读 · 0 评论 -
lintcode练习-203. 线段树的修改
描述对于一棵 最大线段树, 每个节点包含一个额外的 max 属性,用于存储该节点所代表区间的最大值。设计一个 modify 的方法,接受三个参数 root、 index 和 value。该方法将 root 为根的线段树中 [start, end] = [index, index] 的节点修改为了新的 value ,并确保在修改后,线段树的每个节点的 max 属性仍然具有正确的值。在做此...原创 2018-07-09 19:11:38 · 200 阅读 · 0 评论 -
字符串匹配的KMP算法
字符串匹配是计算机的基本任务之一。 举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD"?许多算法可以完...原创 2018-07-03 15:35:09 · 170 阅读 · 0 评论 -
顺序表和链表的区别及其优缺点
1.顺序表存储(典型的数组) 原理:顺序表存储是将数据元素放到一块连续的内存存储空间,相邻数据元素的存放地址也相邻(逻辑与物理统一)。 优点:(1)空间利用率高。(局部性原理,连续存放,命中率高) (2)存取速度高效,通过下标来直接存储。 缺点:(1)插入和删除比较慢,比如:插入或者删除一个元素时,整个表需要遍历移动元素来重新排一次顺序。 ...转载 2018-07-03 21:06:01 · 14884 阅读 · 0 评论 -
二叉树与树的理解
1. 树形结构 vs 线性结构树形结构是复杂数据结构中最为简单的一类结构;树形结构不但本身很有用,还反映了许多计算过程的抽象结构;树形结构的结点形成一种层次结构;树和链表、队列、栈等结构一样,也是一些基本元素的汇集,单元素之间不是简单的线性关系(在一个包含 n 个元素的数据结构里),可能存在更为复杂的联系。这种情况下,在一个包含 n个元素的数据结构里,元素之间的最远距离就不是 n,可能小得多。树形...原创 2018-07-05 16:15:23 · 1141 阅读 · 0 评论 -
GPU共享内存:pycuda使用教程
最近在学习pycuda,因为资料比较少,而且杂乱,所以我就拷贝到了自己的博客使用Python写CUDA程序有两种方式: * Numba* PyCUDAnumbapro现在已经不推荐使用了,功能被拆分并分别被集成到accelerate和Numba了。例子numbaNumba通过及时编译机制(JIT)优化Python代码,Numba可以针对本机的硬件环境进行优化,同时支持CP...转载 2018-07-18 07:42:50 · 7815 阅读 · 2 评论 -
GPU共享内存问题
其实这两天一直不知道什么叫bank conflict冲突,这两天因为要看那个矩阵转置优化的问题,里面有讲到这些问题,但是没办法,为了要看懂那个bank conflict冲突,我不得不去找资料,说句实话我现在不是完全弄明白,但是应该说有点眉目了,现在我就把网上找的整理一下,放在这边,等哪天完全弄明白了我就在修改里面的错误。 Tesla 的每个 SM 拥有 16KB 共享存储器,用于同一个线...转载 2018-07-18 07:58:05 · 5564 阅读 · 0 评论 -
lintcode练习-155.二叉树的最小深度
描述给定一个二叉树,找出其最小深度。二叉树的最小深度为根节点到最近叶子节点的距离。您在真实的面试中是否遇到过这个题? 是样例给出一棵如下的二叉树: 1 / \ 2 3 / \ 4 5 这个二叉树的最小深度为 2解题思路:利用了二叉树的层次遍历的思想,在每一层的遍历中都判断一下是否有叶子结点,如果有叶...原创 2018-07-08 15:01:12 · 273 阅读 · 0 评论