算法设计
文章平均质量分 81
Moyu18_06_12
这个作者很懒,什么都没留下…
展开
-
博弈中的对抗搜索问题
博弈(Game)多智能体环境下,智能体之间存在合作和竞争关系; 数学领域中的“博弈”: 把任何多智能体环境看成是一种博弈游戏,如果其中每个智能体对其它智能体的影响是“显著的”,这些影响可以是合作或竟争。 人工智能领域中的“博弈”: 确定性的、有完整信息的,轮流行动的,两个游戏者的零和游戏。 博弈的抽象本性成为AI研究者感兴趣的对象AI中研究的博弈,即如何根据当前的棋局,选择对自己最有...原创 2020-04-19 21:45:00 · 2906 阅读 · 0 评论 -
高频算法面试题学习总结----动态规划3:换硬币
题目:硬币很多种,价值各不同。拼成一个数。最少用几个?输入:coins = {1, 2, 3, 4} target = 10输出:3解释:最少使用的硬币数是3:包含两个4和一个2思路分析:1.贪心法:从最大硬币值开始,逐步往低试。反例:coins = {1,5,11} target = 20; 应输出:4(4*5);贪心法输出:6(11+5+4*1)。贪心法pass...原创 2019-02-21 12:04:05 · 396 阅读 · 0 评论 -
高频算法面试题学习总结----动态规划2:偷金子
题目:房间有金子, 价值各不同。 连偷会报警, 如何赚大钱?输入:houses = {3, 5, 2, 10} 解释:有四间屋子,金子的价值各是3、5、2、10 偷的时候,不能偷连续的房间, 比如,偷了3,就不能偷5;偷了5就不能偷3和2 输出:15思路分析:可做如图1所示的过程分析,同种颜色虚线框为相同子问题。图1代码实现:#include<ios...原创 2019-02-20 18:14:34 · 374 阅读 · 0 评论 -
高频算法面试题学习总结----动态规划1:斐波那契
题目:斐波那契如下:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, ... 计算斐波那契第n位 F(n), n < 90。输入:n = 5输出:5代码实现:#include<iostream>#include<vector>using namespace std;struct S...原创 2019-02-20 12:07:25 · 147 阅读 · 0 评论 -
高频算法面试题学习总结----图形结构3:安排航班
题目:从A飞到B,最多停k次,如何找路线,价钱最便宜。输入:flights = {{{1, 1000}, {2, 2000}}, {{2, 500}}, {{1, 500}}} from = 0 to = 2 k = 1解释:一共有三个机场,分别是0、1、2。 第0号机场有两趟航班:从0到1的价格是1000,从0到2的价格是2000 第1号...原创 2019-02-19 20:37:38 · 240 阅读 · 0 评论 -
高频算法面试题学习总结----树形结构2:共同祖先
题目:有个二叉树,还有俩节点,如何找得到,最近的祖先输入:root = {1, 2, 3, -1, 4, 5, 6}value1 = 5value2 = 6解释: 1 / \ 2 3 /\ /\ null 4 5 6root对应的是一个树形结构,-1代表null,正整数代表这个节点的值,每个节点的值全局唯一。输出:3思路1...原创 2019-02-13 18:41:51 · 165 阅读 · 0 评论 -
高频算法面试题学习总结----树形结构1:寻找变化
题目:一个数组,前段是0, 后段是1。你能否找到, 出现的第一个1。输入1: nums = {0, 0, 0, 1, 1, 1, 1}输出1: 3输入2: nums = {0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1}输出2: 2思路1:遍历,时间复杂度O(n)思路2:分治,采用二分搜索,时间复杂度O(logn)实现代码:#include<io...原创 2019-02-13 13:09:05 · 171 阅读 · 0 评论 -
高频算法面试题学习总结----线性结构3:验证括号
题目:给你一个包含括号的字符串,判断是否正确。输入1:equation = "([][]{})"输出1:true输入2:equation = "([)]"输出2:false思路1:利用栈代码实现:#include<iostream>#include<stack>#include<string>using namespace st...原创 2019-02-13 11:44:43 · 117 阅读 · 0 评论 -
高频算法面试题学习总结----图形结构2:安排课程
题目:学校要上课,顺序有先后。 能否排排课,把课都上完。输入: prerequisites = {{1}, {3}, {3}, {}}解释: 一共有四门课,编号分别为0、1、2、3, 第0门课需要先完成第1门课, 第1门课需要先完成第3门课, 第2门课需要先完成第3门课, 第3门课没有要求。输出:true解释: 一个可行...原创 2019-02-18 17:40:11 · 154 阅读 · 0 评论 -
高频算法面试题学习总结----线性结构2:合并数组
题目: 有两个排序的数组,nums1和nums2,将这两个数组合并成新的排序数组,并且放入nums1中。 输入: nums1 = {4, 5, 7, 10, 0, 0, 0} length1 = 4 nums2 = {3, 6, 11} length2 = 3输出: {3, 4, 5, 6, 7, 10, 11}思路分析:(1)另外构建一个长度与n...原创 2019-02-12 21:24:05 · 102 阅读 · 0 评论 -
高频算法面试题学习总结----线性结构1:两数之和
题目:有一个整数数组nums,能否从中取出两个数,使他们的和为target。输入1:nums = {4,5,7,10}target = 12输出1:true输入2:nums = {4,5,7,10}target = 8输出2:false题目分析:首先由给出的输入输出案例,可知取出的两个数不能为同一个数(不放回取数);其次整数数组nums是否有序是不确定的...原创 2019-02-12 17:56:39 · 184 阅读 · 0 评论 -
高频算法面试题学习总结----图形结构1:克隆图
题目:克隆一个无向图。输入: node = {{1, 2}, {0}, {0, 2}}解释: 0/ \1 2 /\ \/输入有三个节点,第0个节点和第1个和第2个节点相连,第1个节点和第0个节点相连,第2个节点 和第0个、第2个节点相连。输出:{{1, 2}, {0}, {0, 2}}解释:输出的结构相同,但是节点不一样。题目解读:如图1所示,题目利用二维...原创 2019-02-17 22:08:11 · 253 阅读 · 0 评论 -
高频算法面试题学习总结----树形结构3:先根遍历
题目:先根遍历二叉树输入:root = {1, 2, 3, -1, 4, 5, 6}输出:{1, 2, 4, 3, 5, 6}解释: 1 / \ 2 3 /\ /\ null 4 5 6root对应的是一个树形结构,1代表null,正整数代表这个节点的值,每个节点的值全局唯一。思路1:递归实现代码:#include<iostream>#inc...原创 2019-02-16 11:37:44 · 250 阅读 · 0 评论 -
分治法解决凸包问题
问题 设p1=(x1,y1),p2=(x2,y2),...,pn=(xn,yn)是平面上n个点构成的集合S,凸包问题是为集合S构造最小凸多边形。思路 设p1=(x1,y1),p2=(x2,y2),...,pn=(xn,yn)按照x轴坐标升序排列,则最左边的点p1和最右边的点p2一定是该集合的凸包顶点。如图1所示。设p1pn是经过点p1和pn的直线,这条直线把集合S分成两...原创 2018-07-04 17:04:13 · 2864 阅读 · 1 评论 -
分治法解决最近点对问题
问题 给定平面上n个点,找其中的一对点,使得在n个点的所有点对中,该点对的距离最小。严格地说,最接近点对可能多于1对。为了简单起见,这里只限于找其中的一对。原理(这段为抄袭https://blog.csdn.net/liufeng_king/article/details/8484284) 设S中的点为平面上的点,它们都有2个坐标值x和y。为了将平面上点集S线性分割为大...原创 2018-07-04 11:23:09 · 15696 阅读 · 6 评论 -
分治法求数组众数
1.设计思想 首先利用快排的partition进行划分,在分区的同时统计与pivot相等的元素的个数n(重数),如果n都大于pivot左右两边元素的个数,那它就是众数,否则选取比n大或等的分区采用同样的方法进行递归,并与原来的pivot和它的重数进行比较,选取大的,当递归结束后,众数以及它的重数就出来了。2.c++实现#include<iostream>#include...原创 2018-06-28 18:58:32 · 6192 阅读 · 1 评论 -
分治法构造格雷码
题目 格雷码是一个长度为2^n的序列,序列中无相同元素,且每个元素都是长度为n的二进制位串,相邻元素恰好只有1位不同。例如长度为2^3的格雷码为(000,001,011,010,110,111,101,100)。设计分治算法对任意的n值构造相应的格雷码。思路 本算法纯粹基于观察得出,虽算法有分治的影子,却没发现有分治的含义。假设n=3,则十进制序列:0,1,2,3,4,...原创 2018-06-30 18:40:44 · 6239 阅读 · 0 评论 -
划分集合的题目----引申:数组中位数O(n)时间复杂度求法
题目 设S是n(n为偶数)个不等的正整数的集合,要求将集合S划分为子集S1和S2,使得|S1|=|S2|=n/2,且两个子集元素之和的差达到最大。分析 最容易想到的做法是先进性快速排序,则前半个数组即为S1,后半个数组即为S2,然而快排的时间复杂度为O(nlgn),而此题无需把每个元素都排好序,因此时间性能可进一步提高。此题出现在分治法的章节,因此有:利用快速排序的划分思想,设...原创 2018-06-29 18:07:41 · 3304 阅读 · 0 评论