算法

欧几里得算法(辗转相除法)

邮差的信 提交于 2020-03-12 21:32:31
<!-- Euclid算法 --> 欧几里得算法即“辗转相除法”,用于求两个正整数的最大公约数(gcd)。 int gcd(int a, int b) { if(b == 0) return a; else return gcd(b, a % b); } 这是递归形式的代码,递归层数为4.785lgN + 1.6723,N是max(a, b),可见它递归不了多少层,不需要担心栈溢出的问题。 更精检的形式如下: int gcd(int a, int b) { return (b? gcd(b, a%b): a); } 我们使用这段代码的时候,需要保证a和b是非负整数,a、b同为0的情况要预先处理掉。事实上我们不需要管a和b的大小关系,代码在递归中,始终将大数放在前,我们即使将小数放在前也就是多一层递归而已。 另外还有一种仅通过位运算就可以达到目的的gcd: int gcd(int a, int b) { int t = 1, c, d; while(a != b) { if(a < b) swap(a, b); if(! (a & 1)) { a >>= 1; c = 1; } else c = 0; if(! (b & 1)) { b >>= 1; d = 1; } else d = 0; if(c && d) t <<= 1; else if(! c && ! d) a -= b

ADAS摄像头图像环视拼接算法

旧时模样 提交于 2020-03-12 19:56:41
ADAS 摄像头图像环视拼接算法 输入输出接口 Input: (1)4个摄像头采集的图像视频分辨率 (整型int) (2)4个摄像头采集的图像视频格式 (RGB,YUV,MP4等) (3)摄像头标定参数(中心位置(x,y)和5个畸变 系数(2径向,2切向,1棱向),浮点型float) (4)摄像头初始化参数(摄像头初始位置和三个坐标方向 的旋转角度,车辆宽度高度车速等等,浮点型float) Output: (1)图像融合和拼接的image/video的坐标位置(浮点型float) (2)图像融合和拼接的图像视频分辨率(整型int) (3)图像融合和拼接的图像视频格式 (RGB,YUV,MP4等) (4)车辆周围障碍物报警 (字符型char) 22.1 功能定义 1)计算图像融合和拼接的image/video的坐标位置。 2)算出图像融合和拼接的图像视频分辨率。 3)确定图像融合和拼接的图像视频格式。 4)检测车辆周围障碍物并报警。 22.2 技术路线方案 在360°全景视图泊车辅助系统中,通过安装在车辆前、后、左、右 4 个方位的广角摄像头采集车辆四周的视频影像,利用图像融合和拼接技术合成一幅车身周围的全景视图,最后在中控台的屏幕上显示,以扩大驾驶员视野。借助360°全景视图泊车辅助系统,驾驶员坐在车中即可直观地看到车辆周围是否存在障碍物以及障碍物的相对方位与距离

[原创]JWFDv0.96开源工作流引擎设计---XMLTO数据库解析过程说明

随声附和 提交于 2020-03-12 19:55:55
JWFDv0.96开源工作流引擎设计 ---XML to 数据库解析过程说明 注:这篇文章中所使用的“函数”就是指JAVA语言中的方法 作者 comsci 2011.4.25 四川。成都 简要说明: 实际上,用户通过JWFD流程设计器设计出的流程图的结构一般是保存在XML格式的文件中的(XML文件结构请参考”JWFDv0.96 开源工作流引擎设计-流程图XML结构说明.doc“),而流程引擎的运行和控制却是建立在对后台数据库的基本表结构的SQL操作基础上面的(数据库结构 请参考”JWFDv0.96 开源工作流引擎设计-数据库结构说明.doc“),因此从前端设计器XML到后台数据库基本表的数据解析和转换过程对于整个JWFD工作流系统的设计就显 得尤为重要,所以我在初步完成了JWFD工作流系统设计文档的编写之后,发现这个环节必须补上,因此我将在这篇文档中,详细介绍JWFD工作流系统的 XML-数据库解析过程(包括代码实现) 我尽量把整个设计思想和实现代码的结构都用很通俗的语言来讲述清楚,方便大家理解,如果经过自己的思考之后,还有不理解的地方,可以给我发邮件或 者在JWFD的论坛上面提问题,非常感谢fireflow的非也和openjweb的阿宝同志的大力支持,JWFD也有自己的论坛板块 http://www.fireflow.org/forum-33-1.html

策略模式之竞猜项目开奖规则

不问归期 提交于 2020-03-12 19:17:27
什么是策略模式 策略模式是对算法的包装,把使用算法的责任和算法本身分隔开,委派给不同的对象管理。策略模式通常把一系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类。 先直接上代码吧: //竞猜揭晓抽象类(应该有平手、有人竞猜成功、无人竞猜成功三种情况;所以对应的就是三种策略的算法) public abstract class GuessOperationAbs { /** * 发布竞猜结果:更新用户竞猜信息 */ public abstract void publishGuessResult(***); } /** * 平局的算法处理 **/ @Service public class FlatGuess extends GuessOperationAbs { @Override public void publishGuessResult() { } } /** * 有人竞猜成功的算法处理 **/ @Service public class HadWinGuess extends GuessOperationAbs { @Override public void publishGuessResult() { } } /** * 无人竞猜成功的算法处理 **/ @Service public class NotWinGuess extends

模型压缩--概述

我只是一个虾纸丫 提交于 2020-03-12 18:50:45
目前在深度学习领域分类两个派别,一派为学院派,研究强大、复杂的模型网络和实验方法,为了追求更高的性能;另一派为工程派,旨在将算法更稳定、高效的落地在硬件平台上,效率是其追求的目标。复杂的模型固然具有更好的性能,但是高额的存储空间、计算资源消耗是使其难以有效的应用在各硬件平台上的重要原因。 工业层面 当前各大互联网公司都开始注意深度学习模型在工业上的落地。模型压缩工具开始在各家的生产工具中进入主流,并且各家也开源了对应的工具。具体如下: 百度PaddleSlim : https://github.com/PaddlePaddle/PaddleSlim 基于百度PaddlePaddle的一个模型压缩工具。提供量化、蒸馏、剪枝、模型结构搜索、硬件延时搜索等功能。功能强大、接口比较简单,对熟悉paddle的开发者比较友好。 腾讯Pocketflow: https://github.com/Tencent/PocketFlow 腾讯基于 TensorFlow开发的一个模型压缩工具,功能有限,很久没更新 微软NNI: https://github.com/microsoft/nni 微软的模型压缩,网络结构搜索,网络剪裁工具。相对来说,功能比较完善,支持多个平台。 谷歌 auto-sklearn : https://github.com/keras-team/autokeras

基于Kmeans聚类算法实现图像分割(从原理开始实现)

谁说我不能喝 提交于 2020-03-12 17:15:14
一、Kmeans聚类算法基本原理 K-Means算法的思想很简单,对于给定的样本集,按照样本之间的距离大小,将样本集划分为K个簇。让簇内的点尽量紧密的连在一起,而让簇间的距离尽量的大。 以彩色图像为例:基于彩色图像的RGB三通道为xyz轴建立空间直角坐标系,那么一副图像上的每个像素点与该空间直角坐标系建立了一 一映射(双射)的关系。 从空间直角坐标系中随机取 k 个点,作为 k 个簇的各自的中心。计算所有像素点到k个簇心的距离,并将所有像素点划分至与其距离最小的簇类。自此聚类完成。其中,距离定义为欧氏距离: 其中r,g,b分别表示红绿蓝三通道,r1,g1,b1为彩色图片中某像素点;r0,g0,b0表示某簇类的簇心。 二、基于Kmeans图像分割算法流程 Note:彩色图像的操作是基于一个三维空间 1、加载图像,获取图像的所有像素点并将其转换为样本数据。 2、开始迭代 a)、初始化簇心坐标。 a)、更新簇心坐标,遍历样本数据中的数据点并计算数据点与所有簇心的距离。对于某数据点计算得到的与所有簇类的欧氏距离中,取欧氏距离最小所对应的簇类作为该数据点对应的类。 c)、计算更新后的簇心坐标与更新前的簇心坐标的均方误差。若均方误差仍大于某阈值,则重复b),反之结束迭代。 Kmeans的详细算法流程参考博文: https://www.cnblogs.com/pinard/p/6164214

BM字符串查找算法

混江龙づ霸主 提交于 2020-03-12 16:42:18
字符串的一种基本操作是子字符串查找:给定一端长度为N的文本字符串text和一个长度为M(M<N)的模式字符串pattern,在文本字符串中查找和该模式字符串相同的子字符串。在这互联网时代,字符串查找的需求在很多情景都需要,如在文本编辑器或浏览器查找某个单词、在通信内容中截取感兴趣的模式文本等等。 子字符串查找最简单的实现肯定是暴力查找: public static int search(String text, String pattern) { int N = text.length(); int M = pattern.length(); for (int i = 0; i < N-M; i++) { int j; for (j = 0; j < M; j++) { if (text.charAt(i+j) != pattern.charAt(j)) break; } if (j == M) return i; } return -1; } 可以看到,暴力查找的最坏时间复杂度为O(N*M),实际应用中往往文本字符串很长(成万上亿个字符),而模式字符串很短,这样暴力算法的时间复杂度是无法接受的。 为了改进查找时间,人们发明了很多字符串查找算法,而今天的主角BM算法(Bob Boyer和J Strother Moore发明,简称BM算法)就是其中的一种。

改造MIP获得搜索青睐,轻松完成SEO

不问归期 提交于 2020-03-12 14:58:01
搜索引擎目标及页面排序方法 搜索引擎作为互联网流量的入口,承担着流量分发的职责。但排序成千上万的网页,决定哪些网页在第一页,是由网页本身的用户体验决定的。权重算法会从内容优质性,广告多少,加载速度等多个角度评估网页的用户体验,让更优质的结果被用户看到,满足用户搜索需求。 比如百度先后推出了 冰桶算法 (打击广告过多影响阅读的网页), 蓝天算法 (打击新闻源作弊,展现低质量内容现象), 清风算法 (减少标题作弊骗取点击情况), 飓风算法 (惩罚恶意采集,减少内容重复),从各个角度保证流量分发到更优质内容。 在 2017 年 10 月,百度新发布了 闪电算法 ,意在提升速度的重要性,为搜索用户提供更流畅的浏览体验。试想,内容完全相同的两个网页,一个需要加载 10 秒,另一个在眨眼间完成了内容展现,用户一定更希望看到后者。闪电算法的规则也与此类似: 移动网页首屏在 2 秒之内完成打开的,在移动搜索下将获得提升页面评价优待,得到更多展现机会;同时,在移动搜索页面首屏加载非常慢(3 秒及以上)的网页将会被打压。 闪电算法 闪电算法发布的同时,百度还提出了几条通用的页面优化建议。MIP 作为通用 Web 页面加速方案,也从以下方面更做了优化。 资源加载: ** 将同类型资源在服务器端压缩合并,减少网络请求次数和资源体积。** MIP 将图片,视频,PV 统计等常用的组件脚本合并入 mip.js

排序算法

好久不见. 提交于 2020-03-12 13:54:53
排序算法 冒泡、选择、插入、希尔、快速、基数排序代码 来源: CSDN 作者: Fu_xionghui 链接: https://blog.csdn.net/Fu_xionghui/article/details/104816482

KNN算法及其改进

僤鯓⒐⒋嵵緔 提交于 2020-03-12 11:24:34
KNN算法优缺点 优点 (1) 精度高 (2) 对异常值不敏感:某个异常值对整个结果不造成影响; (3) 无数据输入假定:无数据的独立性等假设; 缺点 (1) 计算复杂度高:因为要计算的点需要与所有点计算距离,所以复杂度很高; (2) 空间复杂度高:因为需要加载所有的样本; 适应的数据范围 数值型和标称型(是或者否) 算法原理 K值选择 如果选择较小的K值 – 近似误差会减小(针对训练集),估计误差会增大(针对测试集或验证集); – 对噪声比较敏感; – 容易过拟合(模型复杂),泛化能力差; 如果选择较大的K值 – 近似误差增大,估计误差会减小; – 整体模型变得简单; 距离选择 欧式距离:对异常值更敏感 曼哈顿距离 马氏距离:可以消除样本间的相关性,协方差矩阵可以降低样本差异性; 算法改进 KD树 – 对K维空间的实例点进行存储以便快速检索; – 是二叉树,相当于不断用垂直与坐标轴的超平面将K维空间切分构成一系列K维超矩形区域; 例子 以中值作为切割点,对x轴从小到大排序 (2,3), (4,7), (5,4), (7,2), (8,1), (9,6) 此时x轴的中值位置为(7,2);(2,3), (4,7), (5,4)作为左节点,(8,1), (9,4)作为右节点,分别对y轴切分; 最终树结构如下: kd树查找(假设查找(2,4.5)节点) 通过KD树,找到最后一个叶子节点为