数据结构-算法
文章平均质量分 56
aaajj
求职中,欢迎联系
展开
-
八数码问题回顾
下面的处理,就是从目标图形开始,把所有的节点都遍历出来,使用了一个map保存每个图形对应的存储index,再查找每个节点的pre节点,直到终点(目标图形),就可以得到每条路径了,这样的方式得到的还是最短路径。对于八数码问题这样的拼图处理,由于数量不是太大,(所有图形种类是181440种),可以采用广度优先遍历的方式,以前考虑过拼图问题的处理,可以考虑把下面的几个格子排好后,再采用类似八数码问题的处理排列上面的几个方块。如果需要频繁的查找,可以一次把所有的节点路径都找出来,原创 2022-11-19 20:56:08 · 127 阅读 · 0 评论 -
【数据结构】线段树学习
对原始数据区间进行一分为二的组织架构,这样总的树深度是lgN,每次数据修改,也去修改相应的索引值,在进行区间操作的时候,从上到下去查找,利用已有的区间索引值来替代遍历操作。这种树结构,看上去和堆排序有些相似,其实也可以用来实现堆排序求前k大的数据,在整个区间找到最大的数后,将其变为一个标记数,如0,再更新索引数据,就可以得到新的最大值。考虑这样一个问题:k个人排列在一起,每个人的财富值会变化,求连续x人的财富值总和(或者最大值)如果区间比较小,比如大小为2,这个时候,可以遍历区间,不去使用索引结构。原创 2022-09-27 20:57:16 · 158 阅读 · 0 评论 -
【算法练习】使用map类处理单调栈问题的一个思路
使用map处理单调栈问题的一个思路原创 2022-07-24 10:12:53 · 144 阅读 · 0 评论 -
【算法练习】LeetCode-2322. 从树中删除边的最小分数
树结构中直系关系的判断原创 2022-06-30 21:26:32 · 542 阅读 · 0 评论 -
[算法练习]leetcode-6050. 字符串的总引力
题目链接力扣字符串的 引力 定义为:字符串中 不同 字符的数量。例如,"abbca" 的引力为 3 ,因为其中有 3 个不同字符 'a'、'b' 和 'c' 。给你一个字符串 s ,返回 其所有子字符串的总引力 。子字符串 定义为:字符串中的一个连续字符序列。示例 1:输入:s = "abbca"输出:28解释:"abbca" 的子字符串有:- 长度为 1 的子字符串:"a"、"b"、"b"、"c"、"a" 的引力分别为 1、1、1、1、1,总和为 5 。- 长度为 2 的原创 2022-05-04 23:53:06 · 330 阅读 · 0 评论 -
堆排序使用练习--力扣6039. K 次增加后的最大乘积
力扣(leetcode)6039. K 次增加后的最大乘积,这题有些意思,题目如下给你一个非负整数数组 nums 和一个整数 k 。每次操作,你可以选择 nums 中 任一 元素并将它 增加 1 。请你返回 至多 k 次操作后,能得到的 nums的 最大乘积 。由于答案可能很大,请你将答案对 109 + 7 取余后返回。示例 1:输入:nums = [0,4], k = 5输出:20解释:将第一个数增加 5 次。得到 nums = [5, 4] ,乘积为 5 * 4 = 20原创 2022-04-10 23:02:48 · 381 阅读 · 0 评论 -
[算法练习]Leetcode-132 分割回文串
题目如下,力扣这个题目可以往我们更容易理解,更常见的问题上去类比,想象一下跳台阶,或者扔骰子游戏,每个台阶k上可以跳的次数记录在数组{}中,求怎样最少的次数跳到终点,这样就很好理解了,从开始位置出发,在每一个位置上,把可以跳到的位置上标记一下步数,就可以得到最小步数了...原创 2022-03-13 15:57:08 · 8227 阅读 · 0 评论 -
算法练习-《115.不同的子序列》
题目如下:力扣参考解法是动态规划,但是有些不好理解。这里从更常规的方式去处理,转换成一个单向层次图问题来看,这里我们抽象出一个盖章问题:有M个部门,每个部门人员有不同的级别,都可以按部门盖章,一个部门的人盖章后,把文件转给下一个部门级别比自己低的人再盖章,现在有个文件需要每个部门盖章,从第一个部门开始,求有多少种盖章方式。以下图为例,我们找出匹配位置后,当前节点的可选下一个节点的高度应该低于当前节点,这样我们来设置一个场区值来标识到下一个节点的方案,节点根据自身所处的场区值就是到节点自身原创 2022-02-20 17:41:40 · 241 阅读 · 0 评论 -
递归练习0208-Leetcode-95不同的二叉搜索树
递归的练习,快速排序的反向过程。题目在下面,大意是求1-n的数字构成的二叉排序树的所有数据情形。这个题目还是值得注意的,最直观的方法是求得全排列,再构造排序树,但是这样的方案不是最优的,比如1-2-3和3-2-1的排序树结构是一样的,考虑一下快速排序的实现,快速排序是对一个排列,进行排序,这里的处理有些类似。取一个数字出来,作为中间父节点,左边的数据作为左子树,右边的数据作为右子树,左右再一次递归,实现出完整的树,看起来还比较清晰,需要注意的是,由于左子树和右子树是独立展开的,需要用集合..原创 2022-02-08 22:15:48 · 224 阅读 · 0 评论 -
星形线再回顾--切线(点)构成曲线
在之前的星形线探索中,【深度学习导数回顾】滑竿问题--导数求极值--星形线【深度学习导数回顾】滑竿问题--导数求极值--星形线_aaajj的专栏-CSDN博客我们了解到,星形线的方程可以描述为参数方程,y=(cost)^3x=(sint)^3这里,星形线可以看成是滑竿滑过面积的边界,滑竿(直线)是星形线的切线么?我们从曲线方程来进行反推。星形线上一点p,其切线为 y = ax + b其中 a为斜率,即a = dy/dx = (dy/dt) ...原创 2022-01-31 17:13:37 · 2624 阅读 · 0 评论 -
算法练习0115-《85-最大矩形》
力扣 85-最大矩形问题题目的意思可以理解为一个棋盘上,放了一些棋子,求这些棋子组成的最大面积的矩形面积。题目如下Given a rows x colsbinary matrix filled with 0's and 1's, find the largest rectangle containing only 1's and return its area.Example 1:Input: matrix = [["1","0","1","0","0"],["1","0".原创 2022-01-15 15:20:19 · 403 阅读 · 0 评论 -
从微软2022bug回顾int范围
微软的时间bug,竟然使用整数来表示格式YYMMDDHHMI,估计在使用的时候,使用取模来得到各位数字,或者是调用整数转字符串,再取各字段,有很好的Date类型数据,竟然没有使用。https://baijiahao.baidu.com/s?id=1720816030020807320&wfr=spider&for=pc这个bug加深了我们对int范围的印象,以前基本上是要算一下,大概知道是几十亿,现在可以知道了,2^31 -1 ,即2147483647,在21亿和..原创 2022-01-09 21:34:28 · 317 阅读 · 0 评论 -
算法练习109-《84. 柱状图中最大的矩形》
这个题目里,把每个柱子各自构成的矩形面积找出来,再计算最大的即可。如果遍历每个柱子,分别左右查找其左右边界,不是最优方法。比如每个柱子高度都一样。观察可以发现,如果右边的柱子高度小于等于左边的柱子,那么左边的柱子就可以退出舞台了(折叠),一个比较好理解的方式是每个柱子用一个存储空间去保存被其折叠的柱子数量,其面积为两个柱子间的所有柱子数量以及折叠的数量和*高度,一个很巧妙的地方是,这个数量和,其实就是编号的距离,这里有点绕,本质是累加计算转换为了减法计算,比如,2累计++ 7次到9,..原创 2022-01-09 19:20:44 · 202 阅读 · 0 评论 -
算法练习-2021-12-19
算法理解,很多算法优化的本质就是利用潜在的信息,减少判断的次数,如快速排序,堆排序。有时候我们可以用实际应用的例子去理解算法,比如对于“就地hash”:在原数组的基础上进行元素替换,我们可以使用分发作业本的例子去理解,一堆作业本,怎么排序呢,最直观的方式是hash方法,依次按照学号放到指定位置。对于指定位置放错位的情况,依次处理即可,从1号位开始,把上面作业本放到其对应的序号上,但那个上面已经有一个了,把这个再放到其正确的位置上,依次进行。下面也是一个比较有趣的例子,力扣原创 2021-12-19 20:51:25 · 88 阅读 · 0 评论 -
带约束条件树(减枝)的使用练习
递归,回溯,递推在算法处理中,递归实现比较方便,有些像责任链的处理方式,一层层的去处理复杂的流程。下面的例子比较经典,22. 括号生成力扣数字 n代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。示例 1:输入:n = 3输出:["((()))","(()())","(())()","()(())","()()()"]示例 2:输入:n = 1输出:["()"]来源:力扣(LeetCode)链接:https:.原创 2021-12-12 15:47:30 · 810 阅读 · 0 评论 -
动态规划,完全背包问题学习
最近练习了下算法题,里面有比较多的技巧,而一些思路转化为程序语言,也需要多练习实现方式。动态规划,完全背包问题例子在以前的选票问题讨论中,使用了0-1背包方式的规划实现,同样是数字和问题,如果每个数字可以多次使用,会是怎样的结果呢?https://leetcode-cn.com/problems/combination-sum/还是类似的处理,这里的转换公式需要理解一下,f(i,j)=f(i-1,j)+f(i,j-v[i])前i个数字组成和为j的...原创 2021-11-29 07:50:01 · 89 阅读 · 0 评论 -
[算法练习11-14]
回顾下算法,练习下分析处理问题。力扣 42接雨水 问题分析思路https://leetcode-cn.com/problems/trapping-rain-water/这个题意比较容易理解,初看好像很容易,把大于相邻左右点的位置作为一个凸点,再找相邻的凸点的容纳空间,但是这样的局部观处理是有问题的,下图就是一个反例。从这个图里可以看出,左边凸点确定后,不能简单的去找下一个凸点作为右边高度,因为后面可以会有一个更大的高度,如5位置,所以左边的位置确定后,需要找到右边第一原创 2021-11-14 20:23:38 · 407 阅读 · 0 评论 -
弧度制的理解
一直疑惑一个问题,弧度制里使用2*π表示360度,在三角函数和微积分里经常可以看到π,角度和π有怎样的联系?多想想,可以发现,其实π的最基本定义是一个比例,是圆的周长和直径的比例,圆的周长C=d*π = 2r*π怎样表示一个角度呢,还要能够体现出线性特征,高和弦长显然不行,因为不是线性的,而弧长,作为一个长度值,是线性的随着角度的大小进行变化的,所以可以用来表示角度,通用的定义是360度为2π, 90度为π/2,当然,既然是比例,我们也可以定义360度为π,或者360度为4π,还原创 2021-11-07 21:56:24 · 587 阅读 · 0 评论 -
【数据结构】链表取top数据(top 3)操作练习
从一个例子来回顾链表操作,学生数据包括学号(id)和学分(v),相应的操作有添加学生数据,删除学生数据,修改学分,一系列的操作后,求学分top 3的数据。我们可以一开始就构造一个有序链表,来一个数据就插入到合适的位置,删除和修改时都找到相应的节点去操作,可以定义为双向链表来方便删除操作,这个思路比较清晰。但是如果修改和删除的次数较多,查找次数较多。有些像表结构创建索引,复杂的索引可以很好的处理这个问题。这里考虑以下处理方案:1. 创建普通链表,在获取top的时候再进行遍历..原创 2021-03-21 11:06:15 · 639 阅读 · 0 评论 -
从America选举人票数和来看动态规划数字和问题
最近的America选举是个热点事件51组数据,538张选票,这51组数据可以组成269吗?会出现269:269 打平的组合么?会组成270么?要解决这个疑问,我们需要来分析一下。各选票数量:http://www.pinlue.com/article/2020/05/0216/3410278041958.html阿拉斯加州(3张) 阿肯色州(6张) 爱达荷州(4张)北卡罗来纳州(14张) 北达科他州(3张) 宾夕法尼亚州(23张)德...原创 2020-11-21 20:40:32 · 446 阅读 · 0 评论 -
斐波拉契数列二分查找再回顾
在斐波拉契数列二分查找的分析中https://blog.csdn.net/aaajj/article/details/44182737比如ABCDE 5个节点,通过以下斐波拉契数列二分方式组织起来,找A需要3次,即从5开始到A的路径找B需要3次找C需要2次找D需要2次找E需要2次平均期望次数E=总次数 / 节点数 = (3+3+2+2+2) / 5 = 2.4看到一篇期望分析https://www.cnblogs.com/ranjiewen/p/...原创 2020-10-28 22:30:57 · 127 阅读 · 0 评论 -
【算法练习】二叉树的序列化与恢复方法
二叉树的遍历比较常见,在遍历的时候把空节点也标识出来,即可构成一个序列,根据这个序列,同样可以恢复出二叉树结构。以下程序以前序遍历的二叉树为例,可以用递归的方式去进行序列化,恢复的时候,使用一个栈结构去处理,栈中的元素加个标记,标识已识别的子节点个数,个数为0时,新入栈的节点加到left,个数为1时,新入栈的节点加到right,标识为2时,栈顶元素出栈,新节点入栈,如此循环,就可以恢复树结构了。#include <stdio.h>#include <stdlib..原创 2020-08-21 22:19:35 · 241 阅读 · 0 评论 -
动态规划数的划分实际应用
在手游《和平精英》里面,当剩余5个队伍的时候,会提示“胜利”,这时,我们可以根据剩余的4个队伍的总人数S来推断4个队伍的人数分布可能情况。这个信息,对于我们游戏还是很有帮助的,尤其是提防满编队的存在以及独狼的数量。这里就涉及到整数的划分问题,刚好,我们来回顾下动态规划,数的划分,参考https://blog.csdn.net/dllgdxlxl/article/det...原创 2020-03-14 20:38:15 · 132 阅读 · 0 评论 -
动态规划处理长方形分割为正方形问题
动态规划主要是采用递推以及局部结果复用来进行计算处理。比较清晰的一个例子就是斐波拉契数列,f(n) = f(n – 1) + f(n – 2)把每次的计算结果保存起来,就可以方便的得到下一个数据了。这样的规划处理方式比直接递归处理要快很多。动态规划的经典应用是背包问题。https://blog.csdn.net/chanmufeng/article/details/8295573...原创 2020-02-05 19:45:12 · 5196 阅读 · 0 评论 -
黄金分割二分性能分析
F0 = 0F1 = 0F2 = F1 + t(2) + F0 + t(1)Fn = Fn-1 + t(n) + Fn-2 + t(n-1)t(n) 为斐波那契数列En = Fn / sum= Fn / t(n+1)= (Fn-1 + Fn-2 + t(n+1) ) / t(n+1)= 1 + Fn-1 / t(n+1) + Fn-2 / t(原创 2012-08-17 17:34:37 · 2184 阅读 · 0 评论 -
多分方法的再讨论
两年前,对多分方法进行了一次分析,http://blog.csdn.net/aaajj/article/details/56016878-31备注 (1 + a) * lgK / (2*lg(a) )和 (a2+a-2)*lg(K) / ( 2*a*lg(a) )在数量级上是一样的,区别仅在于 1+a 和 (a*a + a - 2) / a(a*a + a - 2)原创 2012-08-02 22:58:59 · 661 阅读 · 0 评论 -
自动换行模糊处理
#import "string.h"const int COUNTS_OF_LINE = 93;void cpytoend(char* str, char* pstart, char* pend){ while (pstart != pend + 1) { *str = *pstart == '\n'? ' ': *pstart;//对换行符进行特殊处理 p原创 2011-11-03 14:02:27 · 498 阅读 · 0 评论 -
几个问题
1. 顶贴问题 如 3 5 2 1 4 ,排序成1 2 3 4 5 , 每次操作只能够把一个数字放到最左端,如 【2】 3 5 1 4 2. 为何周长相等的情况下,圆形的面积最大?这应该是井盖是圆形的一个原因 3. 最短路径问题,地铁的几条线路交叉,如何求2个站点原创 2011-09-23 09:18:03 · 439 阅读 · 0 评论 -
shell中判断当前时间是否为月末的方法
date -d tomorrow '+%d'date -d yesterday '+%d' 得到昨天的日期原创 2011-05-26 20:31:00 · 9566 阅读 · 0 评论 -
读文件数据入库设计
2年前的一个文件入库处理设计方法,记录下。当时的入库使用的是sqlldr方法,用一个程序去专门生成控制文件,效率不错 A Data Store ProcessoOriginal data is transmitted from other process constantlyoOne row of the data is such as 20110622~13100~3原创 2012-10-09 23:47:20 · 569 阅读 · 0 评论 -
转义与歧义
“打死我也不说”,电影《甲方乙方》的一个口供,正是因为没有做转义,产生了误解和歧义 SQL注入,也是利用语法的特点进行歧义攻击原创 2012-11-20 23:25:48 · 430 阅读 · 0 评论 -
偶遇的概率分析
今天上班的时候,发现一起在S大道上车的一个女孩,竟然是在一个大楼里上班。有几次下班的时候,在电梯里碰到女孩A,有几次上班路上,碰到女孩C,模糊的疑惑:A和C是一个人吗?不确定。今天在坐地铁的时候,碰到了A,采用标记方法,记着了她的特征,褐色围巾。在X站出来的时候,又看到了A,结果真的就是到同一大楼里,坐同一个电梯,不同的楼层。看似很偶然的情况,分析下,概率还是很大的。1.一个楼原创 2012-11-21 20:06:10 · 1837 阅读 · 0 评论 -
放大效应
柜子里有个阀门,直接去看阀门是否关闭,不是很方便,因为阀门不是那么显眼的可以看到,而如果打开阀门的时候也打开柜门(不关闭),关闭阀门的时候,就关掉柜门,这样就很容易知道阀门是否关闭,这就是放大效应,和杠杆效应类似。放大一个小的变化,使其易于观察和察觉。 错过几秒钟,多等一个红绿灯,导致错过一班地铁,继而错过一趟火车…… 偏差越来越大,更诗意而忧伤的延续:继而错过一个人,错过一生这原创 2012-12-05 20:10:15 · 1109 阅读 · 0 评论 -
黄金分割二分法数值分析回顾
今天看了2012年写的对黄金分割二分法的数值探讨,推理公式不记得了,当时写的不细致,晚上回顾了下,做了些补充原文:http://blog.csdn.net/aaajj/article/details/7878480 比如ABCDE 5个节点,通过以下斐波拉契数列二分方式组织起来,找A需要3次,即从5开始到A的路径找B需要3次找C需要2次找D需要2次找E需原创 2015-03-10 22:44:29 · 1829 阅读 · 0 评论 -
学习yacc与lex--计算器实现练习
cal.l%{ #include#include "y.tab.h"extern int yylval;%}numbers ([0-9])+plus "+"minus "-"times "*"divide "/"lp "("rp ")"delim [ \r]bs {delim}*原创 2016-12-14 22:34:04 · 1906 阅读 · 3 评论 -
LL(1)语法分析程序
LL(1)语法分析程序的设计思路还是很清晰的,按照教材上的算法公式去实现即可。找出了以前在学校的时候写的一个实现,在VC6上编译的。当时写的比较稚嫩,程序也并不完美,有机会再完善下。使用例子输入产生式的个数:5请输入各产生式:说明:若有空产生式A->ε,则ε不必打出来;直接输入A->第1个产生式:E->iF第2个产生式:F->+E第3个产生式:F->第4原创 2017-02-21 22:12:54 · 3759 阅读 · 0 评论 -
滑块拼图(加强版的8数码)的规划处理
最近回顾了下BFS,DFS,以及八数码问题周末的时候在家突然看到了角落里的滑块拼图,放了很久了。玩滑块拼图,没有找到什么规律的话太难下手了。这时,考虑用程序来处理下。3*4 + 1的拼图,是8数码的升级版,8数码问题的资料还比较多,是一个非常经典的问题https://blog.csdn.net/u012283461/article/detail...原创 2019-09-02 20:31:39 · 1433 阅读 · 0 评论 -
A*算法在8数码(滑块拼图)问题中的应用理解
关于A*算法,有些资料讲解很不错,如https://blog.csdn.net/hitwhylz/article/details/23089415https://www.jianshu.com/p/a3951ce7574d在上篇滑块拼图的问题https://blog.csdn.net/aaajj/article/details/100375751处理后,我发现,从广度优先搜索(...原创 2019-09-07 18:03:41 · 1775 阅读 · 0 评论 -
一个文件分类需求
一个文件分类需求原创 2010-12-10 22:35:00 · 637 阅读 · 0 评论