
算法
风中之神111
我亦飘零久
展开
-
半数集问题FZU1207
问题:给定一个自然数n,由n开始可以依次产生半数集set(n)中的数如下。(1)n∈set(n);(2)在n的左边加上一个自然数,但该自然数不能超过最近添加的数的一半;(3)按此规则进行处理,直到不能再添加自然数为止。例如,set(6)={6,16,26,126,36,136}。半数集set(6)中有6个元素。注意 半数集不是多重集。集合中已经有的元素不再添加到集合中。编程任务对于...原创 2019-11-02 10:38:59 · 315 阅读 · 0 评论 -
Gray码
Gray码:格雷码是一个数列集合,相邻两数间只有一个位元改变,为无权数码,且格雷码的顺序不是唯一 的二进制转化为Gray码:简便的算法:二进制数右移一位,最高为补零,之后与原二进制值按位异或得到格雷码//二进制--->Gray码 int binary2gray(int b){ return b ^ (b >> 1);}Gray码转为二进制://Gray码...原创 2019-10-31 12:14:23 · 2853 阅读 · 0 评论 -
二叉树遍历次序的转换
前序+中序------>后序取前序的第一个节点,一定是根节点,在中序中找对应的下标m,将中序序列分为[l,m-1]和[m+1, r]两个子序列,分别对应左子树和右子树,继续取第二个前序节点,应该是左子树的根节点(如果左子树存在),在[l, m-1]中找到其下标,继续二分…中序+后序------>前序后序的最后的节点一定是根节点,为方便,可先将其反转,与上面同理#include ...原创 2019-10-30 22:03:52 · 330 阅读 · 0 评论 -
线性时间选择
问题:给定线性序集中n个元素和一个整数k,1≤k≤n,要求找出这n个元素中第k小的元素法1:randomizedSelect思想:改编随机快速排序,不用把整个数组全部排序,而是选择的排序(更快)时间复杂度:(1)在最坏情况下,算法randomizedSelect需要O(n^2)计算时间例如要找最小的元素,但是每次进行Partition函数划分时得到的位置总是很大(靠近n)(即总是在最...原创 2019-10-28 14:46:58 · 550 阅读 · 0 评论 -
汉诺塔(非递归)
算法:假设塔座a,b,c排成一个三角形,a->b->c->a构成顺时针循环。在移动圆盘的过程中,若是奇数次移动,则将最小的圆盘移动到顺时针方向的下一个塔座上,若是偶数次移动,则保持最小圆盘不动,而在其他两座塔座之间,将较小的圆盘移动到另一个塔座上去#include <cstdio>#include <cstring>#include <sta...原创 2019-10-24 16:42:52 · 472 阅读 · 0 评论 -
最大间隙问题
问题描述:最大间隙问题:给定n 个实数x1, x2 ,…, xn,求这n 个数在实轴上相邻2 个数之间的最大差值。假设对任何实数的下取整函数耗O(1),设计解最大间隙问题的线性时间算法。对于给定的n 个实数x1,x2,…,xn,编程计算它们的最大间隙input.txt52.3 3.1 7.5 1.5 6.3output.txt3.2思路:线性时间求解,所以不能排序来做。鸽舍原理...原创 2019-10-24 15:03:00 · 1568 阅读 · 0 评论 -
金币阵列问题
问题描述:有m*n枚金币在桌面上排列成一个m行n列的金币阵列。每一枚金币或正面朝上,或背面朝上。用数字表示金币状态,0表示正面朝上,1表示背面朝上。金币阵列游戏的规则是:(1)每次将任一行金币翻过来放在原来的位置上。(2)每次可以任选2列,交换这2列金币的位置。任务:给定金币的初始状态和目标状态,编程计算按金币游戏规则,将金币排列从初始状态变换到目标状态所需的最少变换次数。解题思路:本...原创 2019-10-24 11:23:10 · 1671 阅读 · 6 评论 -
最多约数问题(二)
题意:最多约数问题:正整数x的约数是能整除x的正整数。正整数x 的约数个数记为div(x)。例如,1,2,5,10 都是正整数10 的约数,且div(10)=4。设a 和b 是2 个正整数,a≤b,找出a和b之间约数个数最多的数x及其最多约数个数。思路:以[a,b]区间的数为单位, 暴力依次找出[a,b]每个数的约数个数以质因子为单位,搜索每个落在区间[a,b]的数的约数个数第二种的...原创 2019-10-16 09:46:09 · 2302 阅读 · 0 评论 -
统计数字问题
首先容易想到暴力法,即对每个数字拆解,计数,但是当n很大时很慢.优化后的算法可以达到O(logn)的复杂度,明显好于暴力,具体参考:点这里#include <cstdio>#include <cstring>#include <cmath>#include <ctime>using namespace std;int ans1[10]...原创 2019-10-10 20:35:02 · 500 阅读 · 0 评论 -
稳定婚姻匹配
摘自:https://www.cnblogs.com/AndyJee/p/4986741.html题目:婚介所登记了N位男孩和N位女孩,每个男孩都对N个女孩的喜欢程度做了排序,每个女孩都对N个男孩的喜欢程度做了排序,你作为月老,能否给出稳定的牵手方案?稳定的定义:如果男孩i和女孩a牵手,但男孩i对女孩b更喜欢,而女孩b的男朋友j拼不过男孩i,则没有力量阻碍男孩i和女孩b的私奔,这即是不稳定的...转载 2019-07-27 11:23:22 · 663 阅读 · 0 评论 -
二分
对于升序序列,有常见这样几种二分问题(假设要查的数是v):第一个 >= v的位置第一个 > v的位置最后一个 <=v 的位置最后一个 <v 的位置个人认为:前两个问题,是从前往后找,而后两个问题是从后往前找。所以前两个在二分的时候中间值 m 的取法是向下取整,而后两个是上取整。前两个左闭右开,后两个左开右闭。#include <cstdio>...原创 2019-02-26 22:22:01 · 117 阅读 · 0 评论 -
快速幂
快速幂#include <iostream>using namespace std;int main(){ int poww(int a, int b); int a,b; while( cin>>a>>b ) cout<<poww(a,b)<<endl; return 0;}i...原创 2018-10-28 21:45:29 · 165 阅读 · 0 评论 -
约瑟夫问题
问题:n个人(编号0~(n-1)),从0开始报数,报到(k-1)的退出,剩下的人继续从0开始报数。求胜利者的编号。1.循环链表模拟#include <iostream>using namespace std;struct Node{ int data; Node* next;};int main(){ int K,N;//N个人 co...原创 2018-10-28 21:43:36 · 223 阅读 · 0 评论 -
骑士周游问题
问题:给定一个n*n的棋盘,一个马从任意位置出发,按照马移动的规则,在不重复走任意一个点的前提下走完所有点,即跳nxn步以后需要遍历了整个棋盘。思路:首先就是暴力搜索,DFS+回溯。#include <iostream>#include <iomanip>#include <ctime>using namespace std;const int...原创 2018-10-28 21:32:48 · 1536 阅读 · 1 评论