![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法分析
文章平均质量分 74
lishichengyan
zju过气涂鸦爱好者
展开
-
分析几个写Python代码犯的错误
原题是lc320Java代码:public class Solution { public List<String> generateAbbreviations(String word){ List<String> ans = new ArrayList<String>(); backtrack(ans, new...原创 2020-02-28 13:01:58 · 436 阅读 · 0 评论 -
算法题中常见的C++ STL
会不定期更新一、不定长数组:这个已经用得比较熟了,暂时不写二、栈同上三、队列同上四、优先队列同样在头文件中,是一个很有用的模板类,与queue的区别在于他不是按照入队顺序出队。priority_queue通常后两个参数可以省略。五、集合原创 2017-08-27 23:00:11 · 427 阅读 · 0 评论 -
【算法复习】算法基础:渐进式分析、分治法
最近在看MIT的公开课复习算法,参考书是《算法导论》1、Asymptotic AnalysisΘ、O、Ω、o、ω的含义(类比数学上的=,<=,>=,<,>)在渐进式分析中,等于符号“=”不具有自反性,如n=O(n^2),不能反过来写作O(n^2)=n。还应注意:事实上,这些符号刻画的不是等于关系,而更像是集合中的属于关系,例如,上式写成n∈O(n^2)就不会引起太多疑惑(因...原创 2018-02-09 01:06:47 · 1511 阅读 · 0 评论 -
再解Maximum Subarray
Find the contiguous subarray within an array (containing at least one number) which has the largest sum.For example, given the array [-2,1,-3,4,-1,2,1,-5,4],the contiguous subarray [4,-1,2,1] has the ...原创 2018-02-09 19:27:51 · 257 阅读 · 0 评论 -
深入理解递归
你怀疑过递归代码的正确性吗——看起来它似乎什么都没干,怎么能给出问题的解呢?为了打消这种疑虑,你也许会尝试着在草稿纸上一步步推演递归函数的执行过程,但当递归深度很深或者代码逻辑较复杂时,这样的尝试往往是徒劳的。“递归”的概念并不难懂(如果你连基本概念都不知道,可以访问这里),但实际应用却无法写出代码,相信这是困扰过很多人的问题。1、我们是怎么入门的?当不能很好地理解一个概念时,有必要回溯到第一次接...原创 2018-02-11 21:40:59 · 398 阅读 · 0 评论 -
跳跃表(skip list)基本原理及C/C++实现
1、基本原理不想好好写字走的freestyle......其实可以直接看代码,我的注释还是很详细的,后面也有说明性的插图。后面关于时间复杂度的分析证明没有贴(总之我们都知道它性能棒棒哒就行了)。2、C/C++实现比较符合MIT公开课的实现是这篇博文:跳跃表实现而其他多数人都是抄袭这个实现:另一种实现下面是自己的实现,因为最难的操作就是insert,所以目前只写了insert:#include<...原创 2018-02-24 23:08:08 · 3285 阅读 · 0 评论 -
【PAT甲级题解】1051 Pop Sequence
代码如下:#include <iostream>#include <stack>#include <vector>using namespace std;int M, N, K;stack<int> s; bool isPopSeq(vector<int>& seq){ int cnt = 0; // c...原创 2018-09-29 13:42:27 · 256 阅读 · 0 评论 -
【PAT甲级题解】1020 Tree Traversals
代码如下:#include <iostream>#include <stack>#include <queue>#include <vector>using namespace std;struct TreeNode{ int val_; TreeNode* left_; TreeNode* right_; TreeNod...原创 2018-09-29 16:05:04 · 156 阅读 · 0 评论 -
详解Selection Problem
1 问题描述选择问题(Selection Problem):有n个整数,给定一个整数k,找出n个数中第k大的数。我们可以先从以下角度进行思考:n和k的大小关系是怎么样的? n个整数的分布情况是怎么样的?对于第1点,如果k比n大,答案显然不存在;对于第2点,如果n个整数的分布比较特殊(例如都在0到10之间),那么可能会影响到解题策略。这些情况需要事先和面试官确认。2 不同的解法...原创 2019-04-27 18:10:12 · 1278 阅读 · 0 评论 -
Kadane's algorithm(Kadane算法)
在刷LeetCode的时候遇到了。。查了一下维百,Kadane是卡内基梅隆大学的教授,这个算法是为了解决最大子序列的和(maximum subarray)提出的。以下资料全部来自维基百科:1、什么是maximum subarray problem?In computer science, the maximum subarray problem is the task of f原创 2017-08-13 21:09:24 · 13768 阅读 · 5 评论 -
【Sort】75. Sort Colors(计数排序、荷兰国旗问题)
Given an array with n objects colored red, white or blue, sort them so that objects of the same color are adjacent, with the colors in the order red, white and blue.Here, we will use the integers原创 2017-10-13 21:11:50 · 443 阅读 · 0 评论 -
算法设计技巧:dovetailing
在读Elements of the Theory of Computation一书时看到了一个词叫做“dovetailing”,查资料后发现这是一个设计算法的技巧。Dovetailing, in algorithm design, is a technique that interweaves different computations, performing them esse原创 2017-09-22 11:57:06 · 829 阅读 · 0 评论 -
图的表示(邻接矩阵和邻接表)
图的表示有邻接矩阵、关联矩阵、邻接表等方式。下面用代码实现邻接矩阵和邻接表。#include#include#define MAX 50//maximum number of verticestypedef char VertexType;typedef enum{DG,UDG}GraphType;//0 for directed and 1 undirectedtypede原创 2017-08-07 19:48:09 · 1964 阅读 · 1 评论 -
栈和队列
都可以用数组来模拟,复习一下:栈: int stack[Max],top=-1; stack[++top]=num;//push num=stack[top--];//pop队列: int queue[Size]; int front=0,rear=0; queue[rear++]=num;//enqueue num=queue[front++];//dequeue i原创 2017-08-09 16:43:21 · 138 阅读 · 0 评论 -
最短路径算法
供自己复习用1、Floyd-Warshall算法适用于多源最短路径,稠密图,和顶点关系密切,时间复杂度O(n^3)思想是动态规划核心代码:for(int k=0;k<n;k++) for(int i=0;i<n;i++) for(int j=0;j<n;j++) if(e[i][k]e[i][k]+e[k][j]) e[i][j]=e[i][k]+e[k原创 2017-08-08 21:21:04 · 2235 阅读 · 0 评论 -
详解动态规划法
看了刘汝佳的紫书:一、从经典的三角形数问题开始。。53 57 9 1012 81 6 2(。。自我吐槽一下这个排版。。)一个由非负整数组成的三角形,它的第一行有1个数,这个数的左下和右下各有一个数,以此类推...现在从第一行的数开始,每次往左下或者右下走一格,直到到达三角形底部,要求所走的数字最后加起来最大。考虑用二维数组储存数据,每个格子可以这样编号:(原创 2017-08-09 00:12:05 · 286 阅读 · 0 评论 -
单链表的头插法和尾插法
单链表的实现可以用数组或者指针,前者叫做顺序表示,后者叫链式表示。链式表示常用的建表方法分头插法和尾插法,头插法的特点是输入数据的顺序与数据在链表中的存储顺序是反的,比如插入1,2,3,但是链表是3->2->1,尾插法则与头插法相反。为了方便,单链表常被加上哨兵节点(sentinel),或者叫dummy head,哑结点。下面是带有dummy head的头插法:#include#原创 2017-08-06 16:53:35 · 4118 阅读 · 0 评论 -
单链表的数组实现(未完)
链表实现不一定用指针,可以用数组#include#define MAX 100typedef int DataType;int main(){ int i,n,index=1; DataType dt[MAX],right[MAX]; printf("Please enter the number of elements you want to store:\n"); scan原创 2017-08-07 15:14:19 · 511 阅读 · 0 评论 -
快慢指针
题目来自Leetcode141. Linked List CycleGiven a linked list, determine if it has a cycle in it.Follow up:Can you solve it without using extra space?class Solution {public: boolhasCycle(ListNo原创 2017-08-07 15:18:07 · 158 阅读 · 0 评论 -
单链表反转的递归与非递归解法
题目来自Leetcode206. Reverse Linked ListReverse a singly linked list.Hint:A linked list can be reversed eitheriteratively or recursively. Could you implement both?classSolution {public: Lis原创 2017-08-07 15:23:30 · 355 阅读 · 0 评论 -
图论算法:拓扑排序(Topological Sort)
拓扑在计算机科学中的意思是能够把对象进行安排,使得它们可以被边连接。从一个偏序(自反的、反对称的和传递的关系)构造一个相容的全序(集合中每对元素都可比,即每对元素都满足所定义的偏序关系R)叫做拓扑排序,这里的R可以定义为:元素a,b是需要执行的任务,b开始当且仅当a结束。下面是伪代码:Procedure topological sort((S, k:=1while S ak原创 2017-08-08 00:00:04 · 1597 阅读 · 0 评论 -
详解深度优先搜索
在图、树有关的问题中用处很大。1、基本框架对于初学者《啊哈!算法》(纪磊著,人民邮电出版社)是一本不错的书,比较儿童化,例子很形象,这里的一些东西摘录自这本书,在此致谢。。。但是我要吐槽一下作者使用数组居然是从1开始的。。。这。。。。。。很不计算机=。=基本框架:/*DFS的框架*/void dfs(int step){ judge the border//判断边界 fo原创 2017-08-08 00:17:38 · 196 阅读 · 0 评论 -
树的基本知识点(未完)
3、二叉树(1)基本性质(其实很多是树的性质)①除了叶子之原创 2017-08-14 23:24:05 · 582 阅读 · 0 评论 -
详解广度优先搜索(顺便学习C++的队列STL,也有一部分深搜的东西)
一、C++的队列STL广度优先搜索一般是用队列来实现的,首先学习一下C++自己带的queue:queue模板类定义在头文件中,用queue q申明一个元素类型是data_type的队列基本操作:(1)q.empty();判断队列是不是为空,若为空返回1(2)q.size();返回队列长度(3)q.push(x);入队(4)q.pop();出队(5)q.front()原创 2017-08-22 13:20:51 · 1617 阅读 · 0 评论 -
常用的排序算法
排序算法有很多,是一个很杂但是很重要的知识点,复习一下:笼统地来说,排序分为内部排序(Internal Sorting)和外部排序(External Sorting),我们讨论的一般是内部排序。从实现方式上讲,排序又可以分为比较排序和非比较排序,前者的时间复杂度在O(nlogn)——O(n^2)之间,后者均为O(n),在文章末尾有关于各种排序算法时间复杂度、空间复杂度、是否稳定等性质的总结。原创 2017-08-23 23:58:37 · 249 阅读 · 0 评论 -
图的基本知识点
1、Definition: A graph G =(V,E)consists of a nonempty set V of vertices (or nodes) and a set E of edges.Each edge has either one or two vertices associated with it, called itsendpoints. An edge原创 2017-08-07 19:01:10 · 612 阅读 · 0 评论