算法
文章平均质量分 69
yygr
这个作者很懒,什么都没留下…
展开
-
回溯法——求解子集和问题(Java)
如果当前所选取的重量加上剩余的重量仍然W,就不可能找到一个和W相等的值,至于为啥-w[i],我的理解是右边是不选择,就相当于不选择当前的重量,即使减不减也无所谓(如果理解有误请指出)。,wn}和一个正整数W,要求找出w的子集s,使该子集中所有的元素的和为W。例如,当n=4时,w={11,13,24,7},W=31,则满足要求的子集为(11,13,7)和(24,7)。,xn),这里是求所有满足条件的解,所有一旦搜索到叶子结点(即全部结点搜索完,即i>n),如果相应的子集和为W,则输出x解向量。转载 2024-04-30 13:47:10 · 192 阅读 · 0 评论 -
传说中的堆栈溢出和快速排序
我用的是Cocoa的线程NSThread,直接通过setStackSize方法配置线程堆栈大小,需要注意的是配置的stacksize最小值是16k,而且必须是4K的整数倍。在应用程序分配的内存空间里面,最低地址位是固定的代码段和数据段,往上是堆,向上生长,用来存放全局变量,对于 ObjC对象 来说,就是 alloc 出来的变量,都会放进这里,堆不够用的时候就会往上申请空间。快速排序是数据结构课程中介绍的最基础的一种算法。ObjC 的对象都是以指针进行操控的,局部变量的指针都在栈里,全局的变量的指针在堆里。转载 2024-04-18 22:43:44 · 75 阅读 · 0 评论 -
快速排序对于有序数组导致的栈溢出的优化
由于的问题,比较适合来实现排序函数,但是,我们也知道,在最坏情况下也就是数组有序的时候的时间复杂度是 O(n2),如何来解决这个“复杂度恶化”的问题呢?转载 2024-04-18 17:18:44 · 98 阅读 · 0 评论 -
长URL链接转短链接算法
在这个“最近”表中查看一下,看长地址有没有对应的短地址,有就直接返回,并且将这个key-value对的过期时间再延长成一小时如果没有,就通过发号器生成一个短地址,并且将这个“最近”表中,过期时间为1小时所以当一个地址被频繁使用,那么它会一直在这个key-value表中,总能返回当初生成那个短地址,不会出现重复的问题。ok,这样的话,当通过这个hash算法算出来之后,可能我们会需要做btree式的大于小于或者like查找到能知道现在应该在后面加1,2,或3,这个也可能由于输入的长地址集的不确定性。转载 2024-03-13 21:40:51 · 197 阅读 · 0 评论 -
TimSort——最快的排序算法
TimSort 算法是Tim Peters(就是写Python 之禅的那个大神) 于 2001 年为 Python 语言创建的。该算法建立在插入排序和归并排序的基础之上,兼具插入排序和归并排序的优点。图1. Tim Peters,就是这位大神开创了 TimSortTimSort 的平均时间复杂度为 O ( n log n ) O(n\log n)O(nlogn) ,最好情况 O ( n ) O(n)O(n) ,最差情况 O ( n log n ) O(n\log n)O(nlogn)。转载 2024-02-05 09:57:13 · 174 阅读 · 0 评论 -
算法-前缀和
https://zhuanlan.zhihu.com/p/436526162?utm_id=0转载 2024-01-29 21:47:44 · 10 阅读 · 0 评论 -
快速幂算法 超详细教程
但我们可以分析一下他的时间复杂度,时间复杂度为O(power),power指数越大程序循环次数更多,2的3次方需要循环3次,2的100次方要循环一百次,如果是2的1000000次方那就得循环一百万次,显然在时间上要花费更多。求幂运算大家都不陌生,幂是指数运算的结果,当m是正整数时nᵐ的意义为m个n相乘,n的m次幂也就是n的m次方。,其实这两个的本质是一样的,只是分析的角度有些许不同,大家可以按照适合自己的角度去理解快速幂算法,当然两种角度都了解了,那更是最好了。我们可以把公式三加入我们的快速幂代码中。转载 2023-12-07 14:59:56 · 212 阅读 · 0 评论 -
计算任意多边形的面积(已知各顶点的坐标)
3. 中线 Ma=sqrt(2(b^2+c^2)-a^2)/2=sqrt(b^2+c^2+2bccos(A))/2。5. 高线 Ha=bsin(C)=csin(B)=sqrt(b^2-((a^2+b^2-c^2)/(2a))^2)4. 角平分线 Ta=sqrt(bc((b+c)^2-a^2))/(b+c)=2bccos(A/2)/(b+c)7. 外接圆半径 R=abc/(4S)=a/(2sin(A))=b/(2sin(B))=c/(2sin(C))多边形面积公式:A=sigma(Ai) (i=1…转载 2022-10-05 22:09:40 · 729 阅读 · 0 评论 -
向量点乘(内积)和叉乘(外积、向量积)概念及几何意义解读
根据这个公式就可以计算向量a和向量b之间的夹角。在3D图像学中,叉乘的概念非常有用,可以通过两个向量的叉乘,生成第三个垂直于a,b的法向量,从而构建X、Y、Z坐标系。两个向量的叉乘,又叫向量积、外积、叉积,叉乘的运算结果是一个向量而不是一个标量。向量的点乘,也叫向量的内积、数量积,对两个向量执行点乘运算,就是对这两个向量对应位一一相乘之后求和的操作,点乘的结果是一个标量。在三维几何中,向量a和向量b的叉乘结果是一个向量,更为熟知的叫法是法向量,该向量垂直于a和b向量构成的平面。转载 2022-10-05 21:52:50 · 3574 阅读 · 1 评论 -
三角形的面积公式
http://m.chusan.com/zhongkao/89697.htmlhttps://baijiahao.baidu.com/s?id=1711054610009410380&wfr=spider&for=pc转载 2022-10-05 21:20:08 · 3845 阅读 · 0 评论 -
HUAWEI机试:最长的顺子
https://blog.csdn.net/Muse_God/article/details/125354063希望有更好的解法斗地主起源于湖北十堰房县,据说是一位叫吴修全的年轻人根据当地流行的扑克玩法“跑得快”改编的,如今已风靡整个中国,并流行于互联网上。牌型:单顺,又称顺子,最少5张牌,最多12张牌(3…A)不能有2,也不能有大小王,不计花色。例如:3-4-5-6-7-8,7-8-9-10-J-Q,3-4-5-6-7-8-9-10-J-Q-K-A可用的牌 3...转载 2022-07-02 10:09:09 · 945 阅读 · 3 评论 -
LeetCode 按照怎样的顺序来刷题比较好?
https://blog.csdn.net/kexuanxiu1163/article/details/106638251?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-106638251-blog-125099023.pc_relevant_multi_platform_whitelistv1&depth_1-utm_source转载 2022-07-01 10:26:45 · 404 阅读 · 0 评论 -
java-折半插入排序法
https://blog.csdn.net/youxi_ren/article/details/111462027?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-1-111462027-blog-83711159.pc_relevant_multi_platform_whitelistv1&depth_1-ut转载 2022-06-23 14:02:06 · 388 阅读 · 0 评论 -
2022华为机试社招OD高频考试真题【4, 5月份Q1, Q2考试新编程题目】
https://blog.csdn.net/qq_21712899/article/details/125040945华为机试真题正在上传…重新上传取消https://www.online1987.com/最长广播效应正在上传…重新上传取消https://www.online1987.com/%E6%9C%80%E9%95%BF%E5%B9%BF%E6%92%AD%E6%95%88%E5%BA%94/考古问题正在上传…重新上传取消https://www.online1987.com/%E8%80%83%E5转载 2022-06-12 15:17:16 · 38131 阅读 · 0 评论 -
DFS解决迷宫问题
https://blog.csdn.net/weixin_47525457/article/details/120003485DFS解决树的问题比较常见也比较简单,通常用栈来解决。现在来看看DFS怎么解决迷宫问题,理解好这个解题思路可以扩展到解更复杂的题。在起点位置按右,下,左,上的顺序遍历,比如上图,起点右边为空,则走到右边(第1步);第1步的右边为障碍物则判断下方是否为空,为空即走第二步;同理第二步优先判断能否往右走,若右边为障碍物则判断下、左、右;直到到达终点。下图为遍历出来的其中一条路线。按照这转载 2022-06-03 17:38:37 · 720 阅读 · 2 评论 -
Java实现堆排序及详细图解
https://blog.csdn.net/TaylorSwiftiiln/article/details/119865970堆排序(HeapSort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似于完全二叉树的结构,同时满足子节点的键值总是小于(或者大于)其父节点。每个节点的值都大于或者等于其左右子节点的值,称为大顶堆;或者每个节点的值都小于或者等于其左右子节点的值,称为小顶堆。对堆中的节点按层进行编号,将这种逻辑结构映射到数组如下图所示:该数组从逻辑上讲就是一个堆结构,并且有以下特点:大顶堆转载 2022-06-03 14:54:34 · 487 阅读 · 0 评论 -
图文详解 DFS 和 BFS
https://blog.csdn.net/weixin_41385912/article/details/105549124?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-105549124-blog-115709771.pc_relevant_paycolumn_v3&depth_1-utm_source=distribute.pc_rel转载 2022-06-02 22:07:58 · 280 阅读 · 0 评论 -
DFS与BFS总结
https://blog.csdn.net/hesorchen/article/details/103463674?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-103463674-blog-115709771.pc_relevant_paycolumn_v3&depth_1-utm_source=distribute.pc_releva转载 2022-06-02 21:53:31 · 202 阅读 · 0 评论 -
DFS和BFS的简单理解和使用
https://www.jianshu.com/p/fbe0d05187a5首先这两个概念应该都是算法上的,这个没啥疑问。先用官方的说法说一下两者的区别:DFS(Deep First Search)深度优先搜索。BFS(Breath First Search)广度优先搜索。至于说所谓的深度和广度,让我们用"人话"来理解一下:什么是DFS深度优先搜索?用一个常用的思路来表述:递归就是一个标准的深度搜索。一层一层往下走。但是有些时候在算法中经常会遇到一条路走不通的情况,那么我们就返回上一层换条路走。拿一个游转载 2022-06-02 13:34:59 · 359 阅读 · 0 评论 -
LeetCode 刷题顺序,按标签分类,科学刷题!
https://zhuanlan.zhihu.com/p/501483324很多初学算法的同学,对着LeetCode从头开刷,结果磕磕碰碰没几个AC。挫败感上来就刷不动了,其实掌握科学刷题顺序能让你事半功倍!今天就来总结下正确的刷题顺序,大家跟着刷就行!在刷题之前,如果时间充足,一定要先了解一道算法题考察的知识点,同一个知识点可以触类旁通,强化联系。下面把Leetcode上的题目按结构化标签分类,供你参考。一定要按照按照题目类别结构化地刷题 !!!这样刷题的速度不仅更快,而且可以在刷完一类题之后进行总结。对转载 2022-06-02 13:31:27 · 12232 阅读 · 2 评论 -
10G数据,1G内存,如何排序?
当数据量超过内存量,通过一般意义上的排序算法已经不能胜任排序工作了。我们需要借助于外存,保留我们排序的中间阶段。(1)按可用内存的大小,把外存上含有n个记录的文件分成若干个长度为L的子文件,把这些子文件依次读入内存,并利用有效的内部排序方法对它们进行排序,再将排序后得到的有序子文件重新写入外存。(2)对这些有序子文件逐趟归并,使其逐渐由小到大,直至得到整个有序文件为止。(归并过程需要用到败者树或最小堆和一个内存缓冲区)。外部排序.jpg分别排序:根据内存1G,数据10G,我们将10G数据切分成10份,通过转载 2022-06-02 10:01:20 · 2212 阅读 · 0 评论 -
汉明距离问题详解
https://leetcode.cn/problems/hamming-distance/solution/yi-ming-ju-chi-by-leetcode-solution-u1w7/前言汉明距离广泛应用于多个领域。在编码理论中用于错误检测,在信息论中量化字符串之间的差异。两个整数之间的汉明距离是对应位置上数字不同的位数。根据以上定义,我们使用异或运算,记为 \oplus⊕,当且仅当输入位不同时输出为 11。计算 xx 和 yy 之间的汉明距离,可以先计算 x \opl转载 2022-05-20 15:01:11 · 1236 阅读 · 0 评论 -
贪心算法(Greedy)
https://blog.csdn.net/qq_44096670/article/details/112061534# [贪心算法](https://so.csdn.net/so/search?q=贪心算法&spm=1001.2101.3001.7020)(Greedy)- 贪心策略,也称为贪婪策略 每一步都采取当前状态下最优的选择(局部最优解),从而希望推导出全局最优解。- 贪心的应用 ①、哈夫曼树 ②、最小生成树算法:Prim、Kruskal ③、最短路径算法:D...转载 2022-03-30 13:52:28 · 216 阅读 · 0 评论 -
理解递归与动态规划
https://zhuanlan.zhihu.com/p/871790701、从Fibonacci函数的四种实现聊起。Fibonacci数列,中文也译作斐波那契数列,相信大多数同学不会陌生,就是经典的兔子问题,以下图片内容来源于网络。很清晰地,如上所述,如果把自然数到Fibonacci数列的映射看作一个函数U(n)的话,那么有U(n) = U(n-1) + U(n-2)。编码实现的话,自然是首选递归,Fibonacci数列的递归实现如下:Fibonacci数列实现方法1-------转载 2022-03-29 16:31:09 · 1919 阅读 · 0 评论 -
动态规划和递归之间的关系是什么?
https://www.zhihu.com/question/410196236/answer/1373722221回答1:动态规划(DP 即 Dynamic Programming)指的是题型,即解题思路;而递归(Recursion)指的是解题方法,即实现细节。动态规划类题型一般有两种实现方式:bottom-up 即 table-fill(这个我不知道怎么翻译) top-down 即递归(recursion)至于具体的不同可以看补充材料[1]。下面是这两种方式的详细转载 2022-03-29 16:20:28 · 1004 阅读 · 0 评论 -
Java之——Hash算法大全
https://blog.csdn.net/l1028386804/article/details/54573106转载请注明出处:http://blog.csdn.net/l1028386804/article/details/54573106实际工作过程中,要用到各种各样的Hash算法,今天就给大家带来一篇基于java实现的各类Hash算法,其他语言本质上是一样的,大家可以拿来做个参考,好了,不多说了,我们直接上代码package com.lyz.hash; /** * Has.转载 2022-03-29 14:27:54 · 4627 阅读 · 0 评论 -
经典算法 - 图解分治算法及汉诺塔问题
https://blog.csdn.net/key_768/article/details/108202418?spm=1001.2014.3001.5502分治算法分治算法(Divide - and - Conquer)的思想在于“分”和“治” - 分而治之 “分”是将大问题分成独立的子问题,最后子问题可以简单的直接求解 “治”是将子问题解决,然后合成大问题,大问题的解是子问题解的合并 分治算法是很多问题的基本思想:如归并排序、快速排序、二分查找等归并排序:汉诺转载 2022-03-28 10:27:21 · 201 阅读 · 0 评论 -
什么是一致性哈希?用在什么场景?解决了什么问题
微信一面:什么是一致性哈希?用在什么场景?解决了什么问题? - 小林coding - 博客园第一个问题就是:一致性哈希是什么,使用场景,解决了什么问题?这个问题还挺有意思的,所以今天就来聊聊这个。发车!如何分配请求?大多数网站背后肯定不是只有一台服务器提供服务,因为单机的并发量和数据量都是有限的,所以都会用多台服务器构成集群来对外提供服务。但是问题来了,现在有那么多个节点(后面统称服务器为节点,因为少一个字),要如何分配客户端的请求呢?其实这个问题就是「负载均衡问题」转载 2022-03-18 16:42:19 · 265 阅读 · 0 评论 -
堆排序(大顶堆、小顶堆)----C语言
堆排序(大顶堆、小顶堆)----C语言 - 蓝海人 - 博客园堆排序之前的随笔写了栈(顺序栈、链式栈)、队列(循环队列、链式队列)、链表、二叉树,这次随笔来写堆1、什么是堆?堆是一种非线性结构,(本篇随笔主要分析堆的数组实现)可以把堆看作一个数组,也可以被看作一个完全二叉树,通俗来讲堆其实就是利用完全二叉树的结构来维护的一维数组按照堆的特点可以把堆分为大顶堆和小顶堆大顶堆:每个结点的值都大于或等于其左右孩子结点的值小顶堆:每个结点的值都小于或等于其左右孩子结点的值(堆的这转载 2022-03-18 12:01:27 · 1169 阅读 · 0 评论 -
排序算法分类
排序算法分类 - manshufeier - 博客园一、排序的分类1、根据待排序的数据大小不同,使得排序过程中所涉及的存储器不同,可分为:内部排序(内存即够,以下十个算法均为内部排序) 、外部排序 (还需访问外存)2、排序关键字可能出现重复,根据重复关键字的排序情况可分为:稳定排序(排序后重复关键字记录的相对次序保持不变) 、不稳定排序3、对于内部排序,依据不同的排序原则,可分为:插入排序、交换(快速)排序 、选择排序 、归并排序 、计数排序4、针对内部排序所需的工作量划分,...转载 2022-03-18 11:57:54 · 1954 阅读 · 0 评论 -
十大经典排序算法最强总结(含JAVA代码实现)
十大经典排序算法最强总结(含JAVA代码实现) - 郭耀华 - 博客园最近几天在研究排序算法,看了很多博客,发现网上有的文章中对排序算法解释的并不是很透彻,而且有很多代码都是错误的,例如有的文章中在“桶排序”算法中对每个桶进行排序直接使用了Collection.sort()函数,这样虽然能达到效果,但对于算法研究来讲是不可以的。所以我根据这几天看的文章,整理了一个较为完整的排序算法总结,本文中的所有算法均有JAVA实现,经本人调试无误后才发出,如有错误,请各位前辈指出。0、排序算法说明0.1转载 2022-03-18 11:56:22 · 102 阅读 · 0 评论 -
正整数相除的向上取整算法(巧妙思维设计)
正整数相除的向上取整算法(巧妙思维设计) - 知乎大家好:今天我来和大家讨论一个相对简单的问题-----整数(正)相除的向上取整算法;案例1): 一个青蛙跳跃一次的步长为3,现在它垂直于马路方向要跳跃整条马路。假定马路的款为---x长? 问:它最少需要跳跃几次能够完全跳过这条马路?案例2) : 一个房间可以住6个人,现在来了一群人 人数为 x 。 问最少需要多少个房间才能让这x个人都可以住下? 假设一个房间住满的情况下,才安排另外一个房间。案例3) : 假设我们在页面浏览数据时,一个转载 2022-03-18 11:05:30 · 417 阅读 · 0 评论 -
等差和等比数列公式推导
等差数列设首项为, 末项为, 项数为, 公差为, 前项和为, 则有:通过Sn + Sn的方式求出Sn等比数列等比数列Sn=a1×(1-q^n)/(1-q),Sn=n×a1(当q=1时);推导过程为:Sn=a1+a2+…+anq×Sn=a1×q+a2×q+…+an×q=a2+a3+…+a(n+1),Sn-q×Sn=a1-a(n+1)=a1-a1×q^n(1-q)×Sn=a1×(1-q^n)Sn=a1×(1-q^n)/(1-q)通过Sn - q×Sn的方式求出Sn...原创 2022-01-07 11:25:27 · 3225 阅读 · 4 评论 -
平衡二叉树平衡旋转操作总结
https://www.bilibili.com/video/BV1e4411x7rZ?from=search&seid=17514736605915672588&spm_id_from=333.337.0.0左旋:某节点左旋操作为该节点连同其左子树和右子树的连接线下滑到子节点的左子树,子节点原来的左子节点变为下滑的节点的右子节点右旋:某节点右旋操作为该节点连同其右子树和左子树的连接线下滑到子节点的右子树,子节点原来的右子节点变为下滑的节点的左子节点1.LL(右旋)最后插入导致不平衡转载 2022-01-28 17:29:09 · 272 阅读 · 0 评论 -
散列表及散列冲突解决方案
https://blog.csdn.net/u010530712/article/details/93166430 1、散列表 看过HashMap源码的同学应该知道,HashMap是基于哈希表(散列表)的 Map 接口的非同步实现。 在我们put了一条key-value数据后,如下图,程序会先将key通过hash(key)这个函数转化成整形,这个整形做为数组的下标,插入数据或查找数据。 我们发现,散列转载 2022-01-24 19:36:58 · 2279 阅读 · 0 评论 -
数据结构讲解 ---- 概述
引言 数据结构(data structure)是带有结构特性的数据元素的集合,它研究的是数据的逻辑结构和数据的物理结构以及它们之间的相互关系,并对这种结构定义相适应的运算,设计出相应的算法,并确保经过这些运算以后所得到的新结构仍保持原来的结构类型。简而言之,数据结构是相互...转载 2022-01-23 16:21:52 · 754 阅读 · 0 评论 -
算法复杂度分析中的符号(Θ、Ο、ο、Ω、ω)简介
http://blog.csdn.net/liyuming0000/article/details/46929493Θ,读音:theta、西塔;既是上界也是下界(tight),等于的意思。Ο,读音:big-oh、欧米可荣(大写);表示上界(tightness unknown),小于等于的意思。ο,读音:small-oh、欧米可荣(小写);表示上界(not tight),小于的意思。Ω,读音:big omega、欧米伽(大写);表示下界(tightness unknown),大于等于的意思。ω,读音转载 2022-01-23 15:12:11 · 2671 阅读 · 0 评论 -
算法时间复杂度和空间复杂度的简要概述
算法优劣衡量:(正确性,可读性,健壮性,时间效率高,空间使用率低,简单)要评价一个算法的好坏有四个要点:算法正确性:这个算法要可以正确解答问题,不能在运行中频繁出现误差。可读性和可维护性良好,这样有利于后期维护。时间复杂度:即一个算法中的语句执行次数称为语句频度或时间频度。记为T(n)。空间复杂度:一个程序的空间复杂度是指运行完一个程序所需内存的大小;总结时间复杂度:统计整个算法程序执行的语句的总次数空间复杂度:统计整个算法程序分配的总空间...转载 2022-01-23 14:53:42 · 69 阅读 · 0 评论 -
数据结构与算法概要表
转载 2022-01-23 14:28:39 · 74 阅读 · 0 评论 -
递归实现字符串反转
public static String reverse(String originStr) { if(originStr == null || originStr.length() <= 1) return originStr; return reverse(originStr.substring(1)) + originStr.charAt(0);}原创 2022-01-16 16:02:00 · 244 阅读 · 0 评论