精华内容
下载资源
问答
  • 斗地主算法思路

    千次阅读 2017-01-02 14:32:05
    1、扑克牌类的封装 用一个枚举存储牌的大类型(黑红梅方),再用一个枚举存储牌的小类型(A~K,dawang,...2、洗牌与发牌算法思路 a.洗牌算法的思路就是,构造54张牌,首先从所有元素中随机选取一个与第
    1、扑克牌类的封装
    用一个枚举存储牌的大类型(黑红梅方),再用一个枚举存储牌的小类型(A~K,dawang,xaiowang)。
    牌的属性:id(0~53)54张牌唯一标识
    根据id分别获得牌的大类型与小类型
    牌的等级:grade 大王等级最高 对牌排序的时候用到

    2、洗牌与发牌算法思路

    a.洗牌算法的思路就是,构造54张牌, 首先从所有元素中随机选取一个与第一个元素进行交换,然后在第二个之后选择一个元素与第二个交换,直到最后一个元素。这样能确保每个元素在每个位置的概率都是1/n。

    b.发牌算法的思路就是,从洗好的牌中,按规律发给3个玩家,比如1好玩家就取第1、4、7等17张牌。

    c.3个玩家,谁取到id为1的这张牌,谁就是“地主”。

    3、牌面大小的比较
    a. 先判断类型(炸弹)
    b.若类型相同则根据等级grade属性判断谁大 
    展开全文
  • SGM算法思路

    万次阅读 多人点赞 2016-09-14 15:28:19
    semi-global matching(缩写SGM)是一种用于计算双目视觉中disparity的半全局...通过选取每个像素点的disparity,组成一个disparity map,设置一个和disparity map相关的全局能量函数,使这个能量函数最小化,以达到求

    semi-global matching(缩写SGM)是一种用于计算双目视觉中disparity的半全局匹配算法。在OpenCV中的实现为semi-global block matching(SGBM)。

    SGBM的思路是:

    通过选取每个像素点的disparity,组成一个disparity map,设置一个和disparity map相关的全局能量函数,使这个能量函数最小化,以达到求解每个像素最优disparity的目的。

     

    能量函数形式如下:

    Ddisparity mapE(D)是该disparity map对应的能量函数。

    p, q代表图像中的某个像素

    Np 指像素p的相邻像素点(一般认为8连通

    C(p, Dp)指当前像素点disparityDp时,该像素点的cost

    P1 是一个惩罚系数,它适用于像素p相邻像素中dsparity值与pdsparity值相差1的那些像素。

    P2 是一个惩罚系数,它适用于像素p相邻像素中dsparity值与pdsparity值相差大于1的那些像素。

    I[.]函数返回1如果函数中的参数为真,否则返回0

     

    利用上述函数在一个二维图像中寻找最优解是一个NP-complete问题,耗时过于巨大,因此该问题被近似分解为多个一维问题,即线性问题。而且每个一维问题都可以用动态规划来解决。因为1个像素有8个相邻像素,因此一般分解为8个一维问题。

    考虑从左到右这一方向,如下图所示:

    则每个像素的disparity只和其左边的像素相关,有如下公式:

    r指某个指向当前像素p的方向,在此可以理解为像素p左边的相邻像素。
    Lr(p, d) 表示沿着当前方向(即从左向右),当目前像素p的disparity取值为d时,其最小cost值。

    这个最小值是从4种可能的候选值中选取的最小值:

    1.前一个像素(左相邻像素)disparity取值为d时,其最小的cost值。

    2.前一个像素(左相邻像素)disparity取值为d-1时,其最小的cost+惩罚系数P1。

    3.前一个像素(左相邻像素)disparity取值为d+1时,其最小的cost+惩罚系数P1。

    4.前一个像素(左相邻像素)disparity取值为其他时,其最小的cost+惩罚系数P2。

     

    另外,当前像素p的cost值还需要减去前一个像素取不同disparity值时最小的cost。这是因为Lr(p, d)是会随着当前像素的右移不停增长的,为了防止数值溢出,所以要让它维持在一个较小的数值。

    C(p, d)的计算很简单,由如下两个公式计算:

    即,当前像素p和移动d之后的像素q之间,经过半个像素插值后,寻找两个像素点灰度或者RGB差值的最小值,作为C(p, d)的值。

    具体来说:设像素p的灰度/RGB为I(p),先从I(p)(I(p)+I(p-1))/2,(I(p)+I(p+1))/2三个值中选择出和I(q)差值最小的,

    d(p,p-d)然后再从I(q)(I(q)+I(q-1))/2,(I(q)+I(q+1))/2三个值中选择出和I(p)差值最小的,d(p-d,p)最后从两个值中选取最小值,就是C(p, d)

     

    上面是从一个方向(从左至右)计算出的像素在取值为某一disparity值时的最小cost值。但是一个像素有8个邻域,所以一共要从8个方向计算(左右,右左,上下,下上,左上右下,右下左上,右上左下,左下右上)这个cost值。

    然后把八个方向上的cost值累加,选取累加cost值最小的disparity值作为该像素的最终disparity值。对于每个像素进行该操作后,就形成了整个图像的disparity map。公式表达如下:

    SGBM算法遍历每个像素,针对每个像素的操作和disparity的范围有关,故时间复杂度为:

    展开全文
  • 小白求教个算法。假设有A组数据,如果是偶数,A1与能匹配的Ai配对,将配对后的数据存在B1中,删除A1和Ai,删后的A1与能匹配Ai匹配,数据放在B2中,以此类推,直到A组数据全部匹配完。B组数据继续A组的动作,给c组,...
  • 普里姆算法思路

    万次阅读 多人点赞 2011-09-08 22:59:18
    算法思想:可取图中任意一个顶点V作为生成树的根,之后若要往生成树上添加顶点W,则在顶点V和W之间必定存在一条边。并且该边的权值在所有连通顶点V和W之间的边中取值最小。 一般情况下,假设n个顶点分成两个集合:U...

     算法思想:可取图中任意一个顶点V作为生成树的根,之后若要往生成树上添加顶点W,则在顶点V和W之间必定存在一条边。并且该边的权值在所有连通顶点V和W之间的边中取值最小。

    一般情况下,假设n个顶点分成两个集合:U(包含已落在生成树上的结点)和V-U(尚未落在生成树上的顶点),则在所有连通U中顶点和V-U中顶点的边中选取权值最小的边

     C语言代码如下:

    //最小生成树 普里姆算法    采用邻接矩阵存储
    void MiniSpanTree(MGraph *G)
    {
    	int min, i, j, k;
    	int adjvex[MaxVex];		//保存相关顶点下标
    	int lowcost[MaxVex];	//保存相关顶点间边的权值
    	lowcost[0] = 0;			//初始化第一个权值为0,即V0加入生成树
    	adjvex[0] = 0;			//初始化第一个顶点下标为0
    
    	for (i=1; i<G->numVertexes; ++i)
    	{
    		lowcost[i] = G->arc[0][i];
    		adjvex[i] = 0;				//将v0顶点与之有边的权值存入数组  并初始化都为v0的下标
    	}
    
    	for (i=1; i<G->numVertexes; ++i)
    	{
    		min = INFINITY;
    
    		j = 1;
    		k = 0;
    
    		while (j<G->numVertexes)
    		{
    			//如果两个顶点之间存在边并且权值小于min
    			if (lowcost[j]!=0 && lowcost[j]<min)
    			{
    				min = lowcost[j];
    				k = j;
    			}
    
    			++j;
    		}
    		printf("(%d, %d)", adjvex[k], k);	//输出当前顶点边中权值最小的边
    		lowcost[k] = 0;						//将当前顶点的权值设为0,表示此顶点已经完成任务
    		for (j=1; j<G->numVertexes; ++j)
    		{
    			if (lowcost[j]!=0 && G->arc[k][j]<lowcost[j])
    			{
    				lowcost[j] = G->arc[k][j];
    				adjvex[j] = k;
    			}
    		}
    	}
    }


     首先是变量的定义,min在每次循环中都存放着lowcost数组中最小的权值。

    adjvex与lowcost数组中的下标分别对应了该图中的顶点,如下标为1对应了第2个顶点(顶点的序号从0开始)。

    例如adjvex[3] = 5  lowcost[3] = 8即表示序号为5的顶点(即第6个顶点)到序号为3(两个数组的下标都为3 即第4个顶点)的顶点的边的权值为8

    接着初始化lowcost[0]与adjvex[0]为0,即表示第0号结点加入生成树,lowcost[i] = 0表示第i个结点加入到生成树中

    然后 一个循环将adjvex数组的值全都置为0并且将v0到其他顶点的权值都存入lowcost数组中。

    一个包含所有顶点的大循环,所有的工作都在该循环体内完成

    ①假设现在是第一次循环 即第一个顶点加入生成树,第23行~33行,求得所有与该结点相邻的顶点的边上的最小的权值,并将该权值存放min中,而与其相邻的那个顶点的序号存入k中。即找到一个顶点k并且v0到k的权值是所有v0的邻接点中最小的。

    /输出当前顶点边中权值最小的边  即输出adjvex[k], k 因为是第一次循环 所有adjvex[k] = 0, k即刚才所得到的那个权值最小的相邻的顶点的序号。即表示adjvex[k]号顶点到k号顶点

    ③lowcost[k] = 0; 表示 第k号顶点已经加入到生成树种

    ④第36行~43行  if (lowcost[j]!=0 && G->arc[k][j]<lowcost[j])  如果顶点j没有加入生成树 并且k顶点到j顶点的权值要小于对应的lowcost数组中第j个元素的权值,那么就讲该权值存入Lowcost数组并将j存入adjvex中。也就是说,当我加入了一个k顶点到生成树中以后,那么生成树中必然会多一些k顶点与其邻接点的边出来,那么我要看下这些边上的权值是否有小于lowcost数组中对应位置上的值(初始状态lowcost数组中的值都是v0到各个顶点的边的权值),如果小于那么就说明顶点k到顶点j的边的权值要比V0到j的边的权值小。我们当然要保存这个结果,那么就修改adjvex[j] = k  lowcost[j] =  G->arc[k][j];  即k顶点到j顶点的权值为 G->arc[k][j];  

    以后每次加入一个新的顶点都要看其与其邻接点的边上的权值是否要小于lowcost数组中对应顶点的权值。如果小于就修改

    然后找到Lowcost数组中最小的权值 并将其与顶点输出

    展开全文
  • 算法思路

    千次阅读 2017-09-15 17:55:01
    现需要统计某个时间段(T1-T2)内可用的宿舍情况,需要考虑到时间段重叠问题,怎么样设计数据库跟算法比较好呢? 目前思路 数据库设计: 登记表(团队名,标间数,单间数,开始时间,结束时间)通过统计(T1-T2)时间段...

    要解决的问题

    300套单间宿舍,300套标间(两人间)宿舍(标间可作为单人间用),某个团队过来培训,就需要安排宿舍给其住一段时间。现需要统计某个时间段(T1-T2)内可用的宿舍情况,需要考虑到时间段重叠问题,怎么样设计数据库跟算法比较好呢?

    目前思路

    数据库设计: 登记表(团队名,标间数,单间数,开始时间,结束时间)

    1. 通过统计(T1-T2)时间段内每一天的可入住的房间数,保存到数组中,后面求数组最小值作为该时间段可安排的房间数。

    2. 其中求每一天可入住的房间就需要查满足(开始时间<所查时间<结束时间)的记录,得到记录后可得每一天相应的所用房间数,可得每一天的可用宿舍数。

      可否有更加高效,简单的可行方案,求交流?

    展开全文
  • 全排列算法思路解析

    千次阅读 多人点赞 2018-04-10 17:17:28
    =n)个数按照一定的顺序进行排成一个列,叫作从n个元素中取m个元素的一个排列。由排列的定义,显然不同的顺序是一个不同的排列。从n个元素中取m个元素的所有排列的个数,称为排列数。从n个元素取出n个元素的一个排列...
  • 算法设计思路算法

    2020-12-25 17:31:34
    购票问题: 有2n个人排队购件价为0.5元的商品,其中一半人拿一张1元人民币,另一半人拿一张0.5元的人民币,要使售货员在售货中,不发生找钱困难,问这2n个人应该如何排队?找出所有排队的方案。(售货员开始就...
  • Java排序算法实现方式(算法思路 过程动图)

    千次阅读 多人点赞 2019-10-15 16:33:07
    待排序的元素需要实现 Java 的 Comparable 接口,该接口有 compareTo() 方法,可以用它来判断两元素的大小关系。 使用辅助函数 less() 和 swap() 来进行比较和交换的操作,使得代码的可读性和可移植性更好。 敲...
  • "速算24"算法思路

    千次阅读 2014-04-24 22:40:06
    "速算24"算法思路
  • 德州牌型大小算法思路

    万次阅读 2017-06-05 20:06:25
    上一篇写了德州扑克的牌型算法,本篇写...相同牌型比大小思路,牌是有id的,2-14,A最大,A是14,5张牌根据id从大到小排序,也是定义一个table AAA,表示单张牌的分数 第一张牌乘以AAA[1],第二张乘以AAA[2],把5张牌的
  • 转载 https://blog.csdn.net/huang_miao_xin/article/details/51331710
  • 字符串暴力匹配算法+思路分析

    万次阅读 2021-04-04 09:56:57
    思路分析 代码实现 package com.atguigu.kmp; /** * @创建人 wdl * @创建时间 2021/4/4 * @描述 */ public class ViolenceMatch { public static void main(String[] args) { //测试暴力匹配算法 String ...
  • Optimality之GA遗传算法思路理解相关配图资料 目录 GA遗传算法思路理解 GA算法过程 1、总体思路 2、各个步骤 GA算法代码 1、伪代码 SGA实例讲解 1、求函数最值 2、求连续函数的最值 Matlab的实现之...
  • 最近在牛客上整理常用的一些算法思路,【常用算法思路分析系列】主要是针对一些高频算法笔试、面试题目的解题思路进行总结,大部分也给出了具体的代码实现,本篇文章是对排序相关题目的思路分析。(1)对一个基本...
  • #include <iostream> #include "Genetic.h" extern Individual Population[GROUP_SCALE + 1]; int main() { int Xnration; int i; int seed = 123456789; showTime(); initGroup(seed);...}
  • 大数据Top K算法思路

    千次阅读 2016-12-19 20:02:26
     本方法相比算法1:在时间复杂度上提高了一个数量级,为O(N),但不仅仅是时间复杂度上的优化,该方法只需要IO数据文件一次,而算法1的IO次数较多的,因此该算法2比算法1在工程上有更好的可操作性。    第...
  • 麻将胡牌算法思路(任意赖子)

    千次阅读 2018-11-30 16:37:33
    个算法前后修改了几次,最终在三星s4这种老的安卓机上计算次时间在0.04s左右。 总体思路:首先需要一对将牌,剩下的牌任意组合,都组成顺子或者坎牌就可以胡牌了。 发完牌,手牌13张,要胡牌的话是14张,我们...
  • 最近要和朱一烨同学一起改进一下实验室目前的舆情监测系统,经过一番论文的阅读后基本确立了一个情感/褒贬识别的思路:1. 情感词库的建立与权重的调整。2. 语法模型的构建与使用。  一般方法貌似都是建立情感...
  • 我现在有一个思路就是对数据做一个预处理,计算每条线的外包矩形,那么如果定位点不在外包矩形内,就不再考虑这条线,如果定位点在矩形内就计算出点到线的距离,当计算完所有的线后,得到的离A点最近的那条线就是所...
  • 要求给出算法思路! 堆栈的特征:FILO 先进后出 队列的特征:FIFO 先进先出 所以,用两个栈s1和s2模拟一个队列时,s1作输入栈,逐个元素压栈,以此模拟队列元素的入队。 当需要出队时,将栈s1退栈并逐个...
  •   很多人在开始学计算机程序设计类的课程时,都听过一个再经典不过的例子,那就是斐波那契数列,也称兔子数列。为什么叫兔子数列呢,我们知道算法的研究当然是为了解决问题,这个问题越实际,这个算...
  • 其实讲述算法思路件十分复杂和困难的事儿,按照自上向下的顺序结合位大佬的文章,谈谈:,说到思路,其实就是数据、特征、模型三部分,数据预处理服务于特征工程,特征服务于模型,又决定了模型的上限。...
  • ML:从0到1 机器学习算法思路实现全部过程最强攻略 目录 思维导图 设计思路 思维导图 设计思路 相关文章 ML之FE:结合Kaggle比赛的某案例细究Feature Engineering思路框架ML之FE:...
  • 算法题的几个思路

    千次阅读 2012-08-10 14:36:44
    算法题目往往比较复杂,要么让人感到无从下手,要么很难给出一个最优解,但这恰恰是考验一个程序员思维方式的有效手段。看到这类的难题不要慌,《算法设计与分析基础》一书比较全面地总结了做算法题目的一些思路: ...
  • 堆排序算法思路以及Java实现

    万次阅读 热门讨论 2018-09-04 15:10:22
    堆(二叉堆)可以视为一棵完全的二叉树,完全二叉树的一个“优秀”的性质是,除了最底层之外,每一层都是满的,这使得堆可以利用数组来表示(普通的一般的二叉树通常用链表作为基本容器表示),每一个结点对应数组中...
  • lucene 排序算法思路

    千次阅读 2007-03-02 16:07:00
    关于搜索引擎搜索结果排序的一点看法: ... 这样的话得实现两接口: ScoreDocComparator, SortComparatorSource  用IndexSearcher.search(query,new Sort(new SortField(String Field,SortComparatorSource)));
  • 银行家算法解题思路

    万次阅读 2018-01-23 14:27:19
    首先你一定要知道这个算法是伟大的地杰斯特拉设计的。 这个算法是干啥的我就不介绍了,不知道的需要百度一下。 接下来的几名词很重要一定要记住: 可利用资源向量Available——就是系统可以分配的每种...
  • 单随机需求比如做一个简单的抽奖轮盘,每次抽奖,随机出一个结果,由前端展示抽奖结果。每个奖项都有对应的中奖概率,比如 一等奖 1% 1名 二等奖 10% 3名 三等奖 50 % 5名 参与奖 剩余情况 若干名 因为针对...
  • #include <iostream> #include <fstream> #include <string> #include <algorithm> using namespace std; string s; int main(int argc,char * argv[]) ...想知道思路是什么样的,流程图应该怎么画

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 698,107
精华内容 279,242
关键字:

一个算法的思路