![](https://img-blog.csdnimg.cn/20190918140012416.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
算法/数据结构
文章平均质量分 61
啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦
浩波的笔记
微信公众号:浩波的笔记
展开
-
LeetCode栈专题-1(go/py3/c++)
每个专题5道,一天一道232. 用栈实现队列地址:https://leetcode-cn.com/problems/implement-queue-using-stacks/解题思路1两个数据结构的概念:栈:后进先出队列:先进先出题目让我们用两个栈来实现一个队列,就是要让两个栈实现一个先进先出的数据结构。思路:「输入栈」会把输入顺序颠倒;如果把「输入栈」的元素逐个弹出放到「输出栈」,再从「输出栈」弹出元素的时候,则可以负负得正,实现了先进先出。具体做法:可以把一个栈当做「输入栈」原创 2021-04-28 20:25:26 · 191 阅读 · 1 评论 -
kd树介绍(KNN算法引出)
kd 树的结构kd树是一个二叉树结构,它的每一个节点记载了 [特征坐标, 切分轴, 指向左枝的指针, 指向右枝的指针] 。 其中, 特征坐标是线性空间 Rn\mathbb{R}^{n}Rn 中的一个点 (x1,x2,…,xn)∘\left(x_{1}, x_{2}, \ldots, x_{n}\right)_{\circ}(x1,x2,…,xn)∘切分轴由一个整数 rrr 表示, 这里 1≤r≤n,1 \leq r \leq n,1≤r≤n, 是我们在 nnn 维空间中沿第 rrr 维进行一次分原创 2020-09-16 13:18:39 · 828 阅读 · 0 评论 -
leetcode169. 多数元素——py&go
题目来源:169. 多数元素:https://leetcode-cn.com/problems/majority-element/方法一:妙用排序法(不推荐)class Solution: def majorityElement(self, nums: List[int]) -> int: nums.sort() a = -((-len(nums))// 2) - 1 return nums[a]方法二:摩尔投票法根据上述的算法思想,原创 2020-08-25 19:08:27 · 187 阅读 · 0 评论 -
leetcode53. 最大子序和详解——py&go
题目连接:53. 最大子序和https://leetcode-cn.com/problems/maximum-subarray/之前有总结过C++实现:最大子段和问题——详解(C++):https://blog.csdn.net/weixin_44023658/article/details/105928520下面给出py和go方法动态规划方法pyclass Solution(object): def maxSubArray(self, nums): """原创 2020-08-25 17:00:54 · 127 阅读 · 0 评论 -
动态规划
动态规划常常适用于有重叠子问题和最优子结构性质的问题,动态规划方法所耗时间往往远少于朴素解法。主要思想若要解一个给定问题,我们需要解其不同部分(即子问题),再根据子问题的解以得出原问题的解。动态规划往往用于优化递归问题,例如斐波那契数列,如果运用递归的方式来求解会重复计算很多相同的子问题,利用动态规划的思想可以减少计算量。动态规划法仅仅解决每个子问题一次,具有天然剪枝的功能,从而减少计算量,一旦某个给定子问题的解已经算出,则将其记忆化存储,以便下次需要同一个子问题解之时直接查表。动态规划模板步骤:原创 2020-08-23 23:26:30 · 177 阅读 · 1 评论 -
leetcode50:Pow(x, n)详解——py&go
leetcode50:https://leetcode-cn.com/problems/powx-n/解题思路:求 xnx^{n}xn 最简单的方法是通过循环将 nnn 个 xxx 乘起来, 依次求 x1,x2,…,xn−1,xn,x^{1}, x^{2}, \ldots, x^{n-1}, x^{n},x1,x2,…,xn−1,xn, 时间复杂度为 O(n)O(n)O(n)快速幂方法可将时间复杂度降低至 O(log n),以下从“二分法”和“二进制”两个角度解析快速景法。快速审解析(二进制角度):原创 2020-08-23 17:45:30 · 374 阅读 · 0 评论 -
分治算法
分治MapReduce(分治算法的应用) 是 Google 大数据处理的三驾马车之一,另外两个是 GFS 和 Bigtable。它在倒排索引、PageRank 计算、网页分析等搜索引擎相关的技术中都有大量的应用。尽管开发一个 MapReduce 看起来很高深,感觉遥不可及。实际上,万变不离其宗,它的本质就是分治算法思想,分治算法。如何理解分治算法?为什么说 MapRedue 的本质就是分治算法呢?主要思想分治算法的主要思想是将原问题递归地分成若干个子问题,直到子问题满足边界条件,停止递归。将子问题逐原创 2020-08-19 22:48:28 · 140 阅读 · 0 评论 -
Goalng笔记——排序和查找
排序的基本介绍冒泡排序的思路分析func BubbleSoet(arr *[5]int) { fmt.Println("排序前:arr",(*arr)) temp := 0 for i := 0; i < len(*arr) - 1; i++{ for j := 0; j<len(*arr) - 1 - i; j++{ if (*arr)[j] > (*arr)[j+1]{ temp = (*arr)[j] (*arr)[j] = (*arr)[j原创 2020-07-30 15:00:20 · 115 阅读 · 0 评论 -
批处理作业调度问题 ——回溯法详解
1、问题描述每一个作业Ji都有两项任务分别在2台机器上完成。每个作业必须先有机器1处理,然后再由机器2处理。作业Ji需要机器j的处理时间为tji。对于一个确定的作业调度,设Fji是作业i在机器j上完成处理时间。则所有作业在机器2上完成处理时间和f=F2i,称为该作业调度的完成时间和2、简单描述对于给定的n个作业,指定最佳作业调度方案,使其完成时间和达到最小。区别于流水线调度问题:批处理作业调度旨在求出使其完成时间和达到最小的最佳调度序列;流水线调度问题旨在求出使其最后一个作业的完成时原创 2020-06-18 08:59:26 · 4793 阅读 · 0 评论 -
双机流水作业调度问题——Johnson算法
概述流水作业是并行处理技术领域的一项关键技术,它是以专业化为基础,将不同处理对象的同一施工工序交给专业处理部件执行,各处理部件在统一计划安排下,依次在各个作业面上完成指定的操作。流水作业调度问题是一个非常重要的问题,其直接关系到计算机处理器的工作效率。然而由于牵扯到数据相关、资源相关、控制相关等许多问题,最优流水作业调度问题处理起来非常复杂。已经证明,当机器数(或称工序数)大于等于3时, 流水作业调度问题是一个NP-hard问题(e.g分布式任务调度)。粗糙地说,即该问题至少在目前基本上没有可能找到多项原创 2020-06-17 22:31:43 · 4325 阅读 · 0 评论 -
最长公共子序列LCS(动态规划)—详解
一.基本概念1、 子序列(subsequence): 一个特定序列的子序列就是将给定序列中零个或多个元素去掉后得到的结果(不改变元素间相对次序)。例如序列<A,B,C,B,D,A,B><A,B,C,B,D,A,B>的子序列有:<A,B><A,B>、<B,C,A><B,C,A>、<A,B,C,D,A><A,B...原创 2020-05-08 15:51:44 · 15329 阅读 · 1 评论 -
最优二叉查找树(动态规划)——详解
最优二叉查找树(1)二叉查找树(二分检索树)二叉搜索树T是一棵二元树,它或者为空,或者其每个结点含有一个可以比较大小的数据元素,且有:T的左子树的所有元素比根结点中的元素小;T的右子树的所有元素比根结点中的元素大;T的左子树和右子树也是二叉搜索树。(2)最优二叉搜索树给定一个n个关键字的已排序的序列K=<k 1 ,k 2 ,…,k n >( 不失一般性,设k 1 &...原创 2020-05-07 09:46:29 · 34351 阅读 · 13 评论 -
动态规划(DP)——通俗易懂!
转自:阮行止1. 从一个生活问题谈起先来看看生活中经常遇到的事吧——假设您是个土豪,身上带了足够的1、5、10、20、50、100元面值的钞票。现在您的目标是凑出某个金额w,需要用到尽量少的钞票。依据生活经验,我们显然可以采取这样的策略:能用100的就尽量用100的,否则尽量用50的……依次类推。在这种策略下,666=6×100+1×50+1×10+1×5+1×1,共使用了10张钞票。这种...转载 2020-05-06 21:10:52 · 2856 阅读 · 0 评论 -
棋盘覆盖问题——详解(C++)
【问题描述】在一个 2 ^k × 2 ^k 个方格组成的棋盘中,若有一个方格与其他方格不同,则称该方格为一特殊方格,且称该棋盘为一个特殊棋盘.显然特殊方格在棋盘上出现的位置有4^k 种情形.因而对任何k≥0,有4^k种不同的特殊棋盘.下图中的特殊棋盘是当k=3时64个特殊棋盘中的一个:在棋盘覆盖问题中,要用下图中 4 中不同形态的** L 型骨牌覆盖一个给定的特殊棋牌上除特殊方...原创 2020-05-06 15:37:55 · 17560 阅读 · 2 评论 -
N皇后问题——通俗易懂地讲解(C++)
注:参考程序猿小灰,hackbuteer1八皇后问题,是一个古老而著名的问题,是回溯算法的典型例题。该问题是十九世纪著名的数学家高斯1850年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上(斜率为1),问有多少种摆法。高斯认为有76种方案。让我们来举个栗子,下图的绿色格子是一个皇后在棋盘上的“封锁范围”,其他皇后不得放置在这些...原创 2020-05-06 08:33:29 · 15951 阅读 · 4 评论 -
Hanoi 汉诺塔——通俗易懂地讲解(c++)
通俗易懂的解释~游戏规则:有A,B,C三根针,将A针上N个从小到大叠放的盘子移动到C针,一次只能移动一个,不重复移动,小盘子必须在大盘子上面。问题:总的移动次数是多少?分析:首先明确,我们的目标是将A针上所有N个盘子移动至C针。而对于B针,我们可以将之看成一个中转站。这个问题,顺向思维或者逆向思维道理是相同的,都太麻烦。我们不妨从中间开始思考||: 规则要求小盘子必须在大盘子之上...原创 2020-05-05 23:22:10 · 1518 阅读 · 0 评论 -
哈夫曼(Huffman)编码问题(C++)
一、题目描述哈夫曼编码是广泛地用于数据文件压缩的十分有效的编码方法。其压缩率通常在20%~90%之间。哈夫曼编码算法用字符在文件中出现的频率表来建立一个用0,1串表示各字符的最优表示方式。一个包含100,000个字符的文件,各字符出现频率不同,如下表所示:有多种方式表示文件中的信息,若用0,1码表示字符的方法,即每个字符用唯一的一个0,1串表示。若采用定长编码表示,则需要3位表示一个字符,整...原创 2020-05-05 12:47:20 · 12565 阅读 · 1 评论 -
子集和数问题——回溯法(C++)
问题描述已知(w1, w2, …, wn)和M,均为正数。要求找出wi的和数等于M的所有子集。例如:若n=4,(w1,w2,w3,w4)=(11,13,24,7),M=31,则满足要求的子集是(11,13,7)和(24,7).分析子集和数问题解的一种表示方法解由n-元组(x1, x2, …, xn)表示;显式约束条件xi∈{0,1},1≤i≤n,如果没有选择Wi,则xi=0;如果选择...原创 2020-05-05 11:27:13 · 8355 阅读 · 6 评论 -
最大子段和问题——详解(C++)
最大子段和或称为最大部分和(maximum subtotal)问题,以下简称MS。MS:给定一类特定的数据类型的序列:[x1,x2,x3,x4,x5,x6],从该序列截取一段连续的子序列,如果这个子序列和满足整个序列的任意序列的最大值,我们称之为最大子段和。 Sample:sequence:{6, -3, -4, 7, -1, 5, -3, -4, 8, -2}; subSequen...原创 2020-05-05 10:34:00 · 7626 阅读 · 0 评论 -
最小延迟调度问题——贪心算法(C++实现)
1.最小延迟调度问题描述f(i) 表示某任务 开始的时间。ti 表示 某任务 加工的时间di 表示 某任务 要求完成的时间延迟: f(i)+ti-di如果 实际完成的时间 小于 规定完成时间,那么,就没有 延迟。延迟就是拖延,如果你在规定时间内(<=规定时间),那么,就说明没有延迟,没有拖延。由于有很多用户,所以,会有很多不同的拖延值,我们的目标是,求得所有拖...原创 2020-05-04 09:56:21 · 7366 阅读 · 0 评论 -
Gray Code(格雷码) C++多方法实现
简介在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码(Gray Code),另外由于最大数与最小数之间也仅一位数不同,即“首尾相连”,因此又称循环码或反射码。在数字系统中,常要求代码按一定顺序变化。例如,按自然数递增计数,若采用8421码,则数0111变到1000时四位均要变化,而在实际电路中,4位的变化不可能绝对同时发生,则计数中可能出现短暂的其它代码(1100...原创 2020-04-30 23:36:41 · 3721 阅读 · 1 评论 -
矩阵连乘问题——算法笔记——详解
1、动态规划法问题简述:给定n个矩阵{A1A2…An},其中Ai和Ai+1是可乘的,考察这n个矩阵的连乘积A1A2…An。由于矩阵的乘法满足结合律,故计算矩阵的连乘积有许多不同的计算次序,而不同的计算次序,所需要计算的连乘次数也是不同的,求解连乘次数最少的矩阵连乘最优次序。举例说明矩阵结合方式对数乘次数的影响:矩阵连乘积A1A2A3,3个矩阵的维数分别为10x100,100x5和5x50,...原创 2020-04-24 18:50:13 · 28950 阅读 · 1 评论 -
入门讲解:使用numpy实现简单的神经网络(BP算法)
用pytorch跟tensorflow实现神经网络固然爽。但是想要深入学习神经网络,光学会调包是不够的,还是得亲自动手去实现一个神经网络,才能更好去理解。一、问题介绍传说中线性分类器无法解决的异或分类问题。我们就拿它来作为我们神经网络的迷你训练数据。把输入数据拼成一个矩阵X:...原创 2020-04-22 21:56:44 · 6045 阅读 · 5 评论 -
动态规划(装配线调度)
装配线问题:某个工厂生产一种产品,有两种装配线选择,每条装配线都有n个装配站。可以单独用,装配线1或2加工生产,也可以使用装配线i的第j个装配站后,进入另一个装配线的第j+1个装配站继续生产。现想找出通过工厂装配线的最快方法。装配线i的第j个装配站表示为Si,jSi,j,在该站的装配时间是ai,j如果从 Si,jSi,j装配站生产后,转移到另一个生产线继续生产所耗费的时间为ti,jti,j...原创 2020-04-17 18:52:01 · 782 阅读 · 0 评论 -
如何将不规整的dataframe中特定的值去掉
原本样例train_list = train_test.values.tolist()#去除0元素for i in range(len(train_list)): length = len(train_list[i]) x = 0 while x < length: if train_list[i][x] == 0: t...原创 2020-03-25 18:55:21 · 1480 阅读 · 0 评论 -
将一个列表的奇数列赋值到另外一个列表
原始数据def trn(value): return value for i in range(len(train_list)): for j in range(len(train_list[i])): if j % 2 == 0: weight.append(is_in(train_list[i][j])) e...原创 2020-03-25 18:48:03 · 864 阅读 · 0 评论 -
数据结构-指针基础
数据结构=个体+个体的关系算法=对存储结构的操作(狭义)衡量算法的标准1、时间复杂度大概程序执行的次数2、空间复杂度算法执行过程中大概占用的最大内存3、难易程度4、健壮性一、指针基础int * p //p是个变量名字,int * 表示该p变量只能存储int型变量的地址定义:地址:内存单元的编号范围:0——FFFFFFF【4G-1】指针:指针就是地址 地址就是指针指针...原创 2020-04-03 10:26:11 · 330 阅读 · 0 评论 -
关于快速排序的一些理解
#include<iostream>#include<ctime>using namespace std;/**快速排序 *1、所选问题描述:给定一个无序数组序列,将其按降序排列 例如输入【10, 43, 52, 6, 8, 2, 23, 1, 67, 89, 90, 27】,输出【90 89 67 52 43 27 23 10 8 6 ...原创 2020-04-02 22:18:58 · 257 阅读 · 0 评论