![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 72
小瑾守护线程
Where the heart, where the harvest.
展开
-
动态规划算法之01背包问题
问题描述:给定N中物品和一个背包。物品i的重量是Wi,其价值位Vi ,背包的容量为C。问应该如何选择装入背包的物品,使得转入背包的物品的总价值为最大??在选择物品的时候,对每种物品i只有两种选择,即装入背包或不装入背包。不能讲物品i装入多次,也不能只装入物品的一部分。因此,该问题被称为0-1背包问题。 问题分析:令V(i,j)表示在前i(1(1)原创 2017-02-16 15:37:48 · 255 阅读 · 0 评论 -
【八皇后问题】善用数学规律提升算法性能
或许很多读者尚未发现,八皇后问题存在一个重要数学规律。如何运用这个规律对算法进行性能优化,使得约束函数的时间复杂度从O(n)降至O(1),相信是每一个算法爱好者所关心的。今天写这篇文章的目的便是带大家一起探究一下,八皇后问题之中到底存在什么样的数学规律,能够摆脱传统的递归解法,使得性能提升一个量级。先放出基本递归解法的代码吧!public int caculate(int[] locat...原创 2018-11-23 00:34:01 · 861 阅读 · 0 评论 -
计算水仙花数
水仙花数是指一个n 位正整数(n>3 ) , 它的每个位上的数字的n 次幂之和等于它本身。水 仙花数也是一种具有奇特性质的数。水仙花数满足如下奇特的现象:153=1^3+5^3+3^3370=3^3+7^3+0^3371=3^3+7^3+1^3407=4^3+0^3+7^3简单地说,这些三位正整数在数值上等于其各位数字的立方之和(也就是3 次幂之和)。哈代称 之 为 “水仙原创 2017-01-24 15:36:57 · 1563 阅读 · 0 评论 -
计算亲密数
亲密数是具有特殊性质的整数。亲密数展示了两个整数之间通过因子的密切联系。如果整数3 的因子和等于整数匕整数1)的因子和等于整数3, 因子包括1 但不包括本身,且 3 不 等 于 匕 则 称 3、1)为亲密数对。 例如,220 和 204 便是一对亲密数,因为其满足如下规则。 220 的各个因子之和为:1+2+4+5+10+11+20+22+44+55+110=204。 204 的各...原创 2017-01-24 14:44:50 · 843 阅读 · 0 评论 -
计算完全数
完 全 数 (Perfectnumber)是一些特殊的自然整数。完全数等于其所有因子的和。这里所谓的因 子就是所有可以整除这个数的数,而不包括该数本身。本节将简单介绍完全数的基本规则和性质, 以及判断完全数的算法。 与完全数相关的两个概念便是亏数和盈数。一般来说,判断一个自然数是亏数、盈数以及完全 数,可以通过其所有真因子的和来判断。 • 当一个自然数的所有真因子的和小原创 2017-01-24 10:39:38 · 1141 阅读 · 0 评论 -
动态规划算法之寻找最长回文数串
给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢?输出需要删除的字符个数。本题可转化为动态规划算法求解最长公共子序列问题,然后用总字符串长度减去最长子序列长度,便得出问题的答案。先将给定的初始字符串S1反过来排列,设为S2,求S1和S2的最长公共子序列便可。C++代码如下:#include #include #incl原创 2017-02-18 16:06:19 · 1809 阅读 · 0 评论 -
青蛙过河问题
青蛙过河是一个非常有趣的智力游戏,其大意如下: 一条河之间有若干个石块间隔,有两队青蛙在过河,每队有3 只青蛙,如 图 10-19所示。这些 青蛙只能向前移动,不能向后移动,且一次只能有一只青蛙向前移动。在移动过程中,育蛙可以向 前面的空位中移动,不可一次跳过两个位置,但是可以跳过对方一只青蛙进入前面的一个空位。问 两队青蛙该如何移动才能够用最少的步数分别走向对岸?先来分析一下青蛙过河问题。可原创 2017-02-08 23:36:17 · 2212 阅读 · 1 评论 -
寻找假银币算法
寻找假银币是一个非常有趣的智力题目,寻找假银币的大意如下: 现在有8 枚银币,其中有一枚是假币。但是,从外观和做工上无法分辨哪枚是真币哪枚是假币, 只知道假币的重量要比真币稍轻。要求仅使用一个天平,如何以最少的步骤寻找到假银币。 先来分析一下寻找假银币问题。其实寻找假银币并不难,一种最基本的方法便是给硬币编上序 号 ( 1〜8),然后通过天平进行两两比较,操作步骤如下:原创 2017-02-08 19:57:30 · 1547 阅读 · 0 评论 -
快速排序(C++实现)
快速排序算法通过多次比较和交换来实现排序,其排序流程如下: (1) 首先设定一个分界值,通过该分界值将数组分成左右两部分。 (2) 将大于等于分界值的数据集中到数组右边,小于分界值的数据集中到数组的左边。此时,左边部分中各元素都小于等于分界值,而右边部分中各元素都大于等于分界值。 (3) 然后,左边和右边的数据可以独立排序。对于左侧的数组数据,又可以取一个分界值,将 该部分数据分成左右原创 2017-01-12 15:53:16 · 2078 阅读 · 0 评论 -
【回溯法】八皇后问题
八皇后问题是高斯于1850年提出的,这是一个典型的回溯算法的问题。 八皇后问题的大意如下:国际象棋的棋盘有8 行 8 列共64个单元格,在棋盘上摆放八个皇后,使其不能互相攻击,也就 是说任意两个皇后都不能处于同一行、同一列或同一斜线上。问总共有多少种摆放方法,每一种摆 放方式是怎样的。 首先来分析八皇后问题。这个问题的关键是,八个皇后中任意两个皇后都不能处于同一行、同 一列或同一斜线上。...原创 2017-02-07 21:41:57 · 441 阅读 · 0 评论 -
[寻找环链表入口点] 快慢指针数学原理剖析
链表环路检测及环入口定位是一个非常经典的算法问题,它可在死锁检测等实际应用场景发挥重要作用。想必大家都知道这个问题应该使用快慢指针去求解,因为它具有最优的时间复杂度O(n)。但是大家可能对快慢指针的数学原理不是很清楚,为啥它能达到最优。详细读了这篇文章,大家必定豁然开朗,掌握快慢指针背后的数学原理。我们直接来看图。先讲一下链表环路检测的原理,相比环入口定位,原理比较简单。起点设置...原创 2018-12-02 14:25:25 · 2805 阅读 · 5 评论