
算法
文章平均质量分 72
梦在未名湖畔
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
c语言指针
一、指针的介绍1.1 c语言的优点c语言之所以这么强大的原因有两个: 1、c语言是编译型语言 2、c语言有指针!!!!TIPS(一下都是科普,看着玩)TIPS.1、字节码:我们的计算机是不能理解高级语言的,计算机只能理解的是机器语言(听名字就是机器才能明白的语言),我举个简单的例子(大概是这个意思但是并不严谨): 我们知道在计算机中都是存储的二进制数字,因为计算机实际上就是由一个个开关(后来是二极管)组成的,反正就是计算机的基...原创 2020-11-09 16:41:26 · 1850 阅读 · 1 评论 -
递归
1、递归基本概念 递归的意思就是不停的调用自己,但是我们要知道的是我们的计算机资源是有限的,一般来说递归的层数不能太深(特别是自己写的程序有问题容易资源耗尽!)。递归通常来说是程序写着简洁但是人的思维量比较大同时计算机的执行效率没有直接写的代码效率高,因为存在函数的不停调用,在计算内部调用函数是开销比较大的。什么是递归什么是自己调用自己,举个简单的例子:int mul(int x){ x--; mul(x);}我们能够清晰的看见上面的程序存在自己调用自己的情况,...原创 2020-11-03 23:35:25 · 19722 阅读 · 1 评论 -
AOP的理解
1、AOP基本概念 为什么会诞生AOP呢?实际上在我们的面相对象的编程中,我们通常都是将世界抽象成类,但是如果类中有重复的事情需要处理,比如日志、权限认证或者一些其他的东西,那么我们就得入侵代码并且添加相应的类,在每个需要调用的类的地方调用。举例说明如下: 我们现在有如下的三个类,我们有新需求想在3个类的方法调用前和后都实现日志的打印,那么1、传统最笨的处理方法就是在每个类中添加是、两个方法,一个是调用前打印,一个是调用后打印!!2、单独申请一个日志类,然后写两...原创 2020-11-03 21:13:17 · 445 阅读 · 0 评论 -
2020-10-28
解题思路1、紧紧抓住条件,课程编号只有1-n,那么实际上每个课程最后只会放入数组相应的下标,比如有数据:3 4 5 2 1那么最后课程编号3只能被放入第三个位置,课程编号1只能放入第一个位置。因此首先有个绝对不可能成功的判定条件:那就是奇数课程编号只能放在奇数的下标位置、偶数的课程编号只能放在偶数的下标位置!!!!因为每次换是隔一个的。if(a[i]%2 != (i+1)%2){ printf("-1\n"); tag = 1; break...原创 2020-10-28 23:02:13 · 142 阅读 · 0 评论 -
找到数组中唯一或者唯二的数
1、找出数组中唯一或者唯二的数解题思路1、位运算因为对于异或运算有:相同为0不同为1,举例说明:5 ---》0 1 0 111---》1 0 1 1然后 5 XOR 10 = 1110那么利用这个,因为数组中的数据一样的会存在两个(单的数据先不管),那么这些数据两两异或必然会是0,也就是:a XOR a = 0特别的:0 XOR a = a因此:int first = 0;for(int i = 0;i < N;i++) first = firs原创 2020-10-26 10:41:00 · 3216 阅读 · 0 评论 -
DP状态转移方法--leetcode115
Leetcode115题:Given a stringSand a stringT, count the number of distinct subsequences ofSwhich equalsT.A subsequence of a string is a new string which is formed from the original string by de...原创 2020-04-27 22:22:04 · 343 阅读 · 0 评论 -
python处理大型数据的csv
在训练机器学习模型的过程中,源数据常常不符合我们的要求。大量繁杂的数据,需要按照我们的需求进行过滤。拿到我们想要的数据格式,并建立能够反映数据间逻辑结构的数据表达形式。最近就拿到一个小任务,需要处理70多万条数据。我们在处理CSV文件时,经常使用的大熊猫,可以帮助处理较大的CSV文件。大熊猫中处理CSV文件的函数主要为read_csv()状语从句:to_csv()这两个,其中read...转载 2019-12-02 15:26:34 · 4928 阅读 · 1 评论 -
P问题、NP问题、NPC问题
还是先用几句话简单说明一下时间复杂度。时间复杂度并不是表示一个程序解决问题需要花多少时间,而是当问题规模扩大后,程序需要的时间长度增长得有多快。O(n)代表的是计算机解决的问题随着规模的增大时间的增加程度和问题的增加规模是相等的。同理O(n^2)意思就是消耗时间规模增长速度是问题规模增长的平方。因此,我们会说,一个O(0.01*n^3)的程序的效率比O(100*n^2)的效率低,尽管...转载 2019-07-31 11:16:27 · 330 阅读 · 0 评论 -
KMeans、PAM、CLARA、CLARANS聚类算法和代码
聚类算法的最终目的是: result = MAX{集合内的相似度}/{集合间的相似度}需要帮忙写任何算法、课程设计、论文算法实现、都可以找我企鹅:10284345471、K均值聚类算法,也叫KMeans聚类算法。 该算法的基本思想是和我们人进行物品分类的思想是相同的,就是通过距离来进行衡量。那么我们首先就需要知道我们要分成几个类,然后就找到几个类的相应的中心点,然后就把其...原创 2019-06-25 10:54:08 · 10265 阅读 · 9 评论 -
SIFT和SURF算法的版权问题
遇到该问题时,网友多是建议补个包,即pip install opencv-contrib-python我在补完之后又出现下面这样的错误:OpenCV(3.4.3) C:\projects\opencv-python\opencv_contrib\modules\xfeatures2d\src\sift.cpp:1207: error: (-213:The function/feature i...转载 2018-12-22 14:33:05 · 4026 阅读 · 4 评论 -
无向图的连通性的判断
对于一个无向图的连通性的判断,我们可以通过读入的边对得出邻接矩阵,然后可以采用Warshall算法得到可达矩阵,那么就可以很简单的判断图的连通性,只要所有的点之间都是相互可达的,那么图就是连通的,反之则不连通。 不过本文想介绍的不是该种方法,下面我们将用Union-find算法来进行图的连通性的判断。该算法的数学基础思想是:我们根据读入的边对进行集合的划分,读...原创 2018-09-14 23:55:46 · 16523 阅读 · 0 评论 -
LeetCode Sum Question
Question 1.两个数求和问题,找出求和等于target的数对,只有一对。Given an array of integers, return indices of the two numbers such that they add up to a specific target.You may assume that each input would have exactly o...原创 2018-09-14 23:45:46 · 238 阅读 · 0 评论 -
C语言中的数据溢出
1、char是一个字节,8bit,我们在采用unsigned char的数据类型的情况下,如果我们数据产生溢出(超过2^8)那么我们最终得到的结果将对2^8(256)取余,如:unsigned char x = 0xff;x++;printf("%d\n",++x);输出的结果将是1;而不是257.2、对于signed的整数的溢出,C语言的定义是Undefined Overflow,...原创 2018-09-07 20:40:23 · 29230 阅读 · 0 评论 -
Boyer_Moore算法(多数投票算法)
该算法的原理非常的巧妙,主要是利用主要元素要在数组中超过半数,所以就可以这样操作:设置一个计数器,每次遇见主要元素加1,遇见其他任何的元素就减1,可想而知,因为多数元素是主要元素,最后肯定会是一个正数,那么利用这个就可以找出那个主要元素。那么问题就是如何让主要元素等于1,其他的元素等于-1.举例说明:[7, 7, 5, 7, 5, 1 | 5, 7 | 5, 5, 7, 7 | 7, 7, 7, ...原创 2018-03-05 11:00:53 · 913 阅读 · 0 评论 -
算法的时间复杂度分析
对于算法的分析我相信大部分的初学者都是一知半解的。对于时间复杂度我们先介绍简单的概念,简而言之就是找到重复频率最高的语句,并观察该语句随着输入数据个数的增加而增加的速度的规模。比如我们常以:n,n^2,n^3等速度级别来衡量。首先我们来分析比较简单的时间复杂度:那么我们不得不从最基础的循环来讲起:for(int i = 0;i < n;i++) for(int j = 0;...原创 2018-04-03 09:47:08 · 944 阅读 · 0 评论 -
简单的几个排序算法
1.首先介绍最简答的冒泡排序算法,顾名思义就是像水中冒泡一样,每次把当前混乱集合中的第一个数据依次和后面的数据进行比较,然后依次往后面行进。那么每次排一个数据,则需要n-1次排序,每次要和n-1个数据比较void Sort(int *number,int numberSize){ int i,j,temp; for(i = 0;i < numberSize-1;i...原创 2018-04-10 17:14:42 · 384 阅读 · 0 评论 -
数据结构链表例题
给定一个链表L,链表中的整数数据是唯一的。给定一个数组G,G中的数据全是链表L中的数,但是顺序可能是打乱的。现在要判断G中的数据在对应链表中的数据位置是否是连接上的,并求出链接上的组数。例如:L:0->7->2->9->4G:{0,9,7,4}结果返回:2,因为{0,7}在L中式连续的,{9,4}在L中是连续的,3个连续或者更多同样算一个。当最后只有一个的情况下是视为一个连...原创 2018-07-09 21:54:19 · 1011 阅读 · 0 评论 -
数据结构链表例题(二)
--------------------------------------------例题9----------------------------------------------给定链表L给定一个区间,要求逆置区间的数据。Solution 1利用插入排序的思想,吧需要逆置的区间视为一个逆序的数组需要进行插入排序。public ListNode reverseBetween(ListNode...原创 2018-07-09 22:00:08 · 432 阅读 · 0 评论 -
AVL(自平衡二叉树)树的实现(C语言)
AVL树是可以在插入、删除节点之后进行自平衡的树,平衡的定义是结点的左子树和右子树的深度差不超过1,也就:| Deep(LeftChild) - Deep(RightChild)| <= 1,整棵树的平衡也就是树的每个结点都是满足上述情况。那么下面我们要解决问题就是当树在插入数据和删除数据的时候,如果树不平衡了我们该怎么办。上面就是我们在插入或者删除的时候可能导致的树的不平衡的所...原创 2018-07-23 16:25:38 · 5274 阅读 · 0 评论 -
AVL树、B-树、RB树、B+树、B*树比较
一:AVL树 也就是平衡二叉树,该二叉树为了优化查找的性能,会让每个结点的左右子树的高度差维持在1以内,也就是小于等于1。因为我们在二叉查找树上查找数据的时候,是类似二分法的,那么我们每次折半的区间长度就会决定了我们查找的效率,从概率的角度讲,在未知的情况下肯定是一半一半获得的效率最高。所以在二叉查找树中,决定查找效率就是树的高度,为什么呢? 其实我们可以这样想,因...原创 2018-07-24 09:53:26 · 1724 阅读 · 0 评论 -
B-树的实现(一)
B-树(多路平衡搜索树)的定义虽然比较简单,寥寥几条:1.m阶B-树,最多只能有m个分支。2.m阶B-树的关键字个数要介于[m/2](向上取整)-1和m-1之间(根节点除外)3.关键字内部按升序排列4.所有叶子节点一定在同一层根据定义来实现B-树的难点在第二条,这就会导致分裂和合并的情况。图文讲解可以看下面这个博客,非常的详细: http://www.cnblogs.c...原创 2018-07-18 20:35:49 · 363 阅读 · 0 评论 -
B-树的实现(二)C语言实现
虽然前面把伪代码进行了阐述,但是想要真正的编写出来还是非常的不容易,鉴于能力有限,本人的实现版本如下(和伪代码差距有点大,码力差距还是和别人有很大)#include <stdio.h>#include <stdlib.h>#define m 4//B_树的数据结构typedef struct node{ int Numbers; int val[m+1...原创 2018-07-18 20:48:46 · 598 阅读 · 0 评论 -
红黑树及实现(c语言)
本人看的是《算法》这本书,所以红黑树的理解是一下这样的:个人认为这样比结点标红黑更好理解。很好下面是红黑树的定义:1、红黑树其实是2-3结点树的二叉平衡表示形式。2、红链接均为左连接(左倾红黑树)3、没有任何结点同时连接着两条红链4、红黑树是完美平衡的,也就是任何空连接(NULL)到根节点经过的黑色分支数量是相等的其中2、3都是为了维持是2-3树的二叉平衡形式,4、是为...原创 2018-07-20 21:18:15 · 5723 阅读 · 0 评论 -
BST的例题
例题一、查找任意BST树的第K小的结点。Solution 1:思想是采用中序遍历int SupkthSmallest(struct TreeNode* root, int k,int *count,bool *flag){ int result = 0; if(!root) return result; result ...原创 2018-07-26 20:36:13 · 386 阅读 · 0 评论 -
算法的时间复杂度和空间复杂度-总结
算法的时间复杂度和空间复杂度-总结 通常,对于一个给定的算法,我们要做 两项分析。第一是从数学上证明算法的正确性,这一步主要用到形式化证明的方法及相关推理模式,如循环不变式、数学归纳法等。而在证明算法是正确的基础上,第二部就是分析算法的时间复杂度。算法的时间复杂度反映了程序执行时间随输入规模增长而增长的量级,在很大程度上能很好反映出算法的优劣与否。因此,作为程序员,掌握基本的算法时间...转载 2018-02-09 17:03:05 · 229 阅读 · 0 评论