交叉匹配算法

序列比对(六)——交叉匹配问题 原创: hxj7 之前几篇文章介绍了全局匹配以及局部匹配,本文介绍交叉匹配问题并给出代码。 交叉匹配 所谓交叉匹配(overlap alignment 或者叫 glocal alignment),就是两条序列中至少有一条的头部序列要参加比对并且至少有一条的尾部序列要参加比对。 一般而言,就是下面两种情形: 一种是两条序列有重叠的部分,但互不包含。比如x序列的头部与y序列的尾部匹配。 第二种是... 阅读详情

应用场景:常见分销系统,国外3M系统中,业务中包含提供帮助和得到帮助双方交易用户,提供帮助的资金要顺序匹配给得到帮助的用户,在匹配过程中会出现交易双方数据拆分情况,在此业务中如果有一方数据匹配完成,则该匹配业务结束。
要求:
1、必须进行顺序匹配
2、针对每一笔提供帮助,匹配的金额不能重复
思路:针对要求2,定义一个Map对象,key为提供帮助的订单号,value为已经提供帮助的金额list列表。
查询得到帮助的订单列表时,同时返回出已经匹配成功的金额列表

public class test{
    static List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
    public static void main(String[] args) {

        int proArr[] = {5,8,2,4,9,1,3};
        int getArr[] = {9,4,6,25,16};
        int temp_pro = 0;
        int temp_get = 0;
        MatchOrderServiceImpl impl = new MatchOrderServiceImpl();
        System.out.println("匹配前list:"+list);
        impl.match(proArr, getArr);
        System.out.println("匹配后list:"+list);
    }

    public Map<String,Object> match(int[] proArr,int[] getArr){
        int pro_length = proArr.length;
        int get_length = getArr.length;
        if(pro_length == 0 ){
            return null;
        }
        if(get_length == 0 ){
            return null;
        }
        int fristProData = proArr[0];
        int fristGetData = getArr[0];
        int matchAmt = 0;
        Map<String,Object> item = new HashMap<String,Object>();
        if(fristProData>fristGetData){  //如果提供帮助的大于得到帮助的
            int temp_amt = fristProData - fristGetData;
            proArr[0] = temp_amt;  //设置提供帮助的钱为剩余的钱
            matchAmt = fristGetData;
            //移除匹配完成的对象
            int temp_arr[] = this.removeItem(getArr);
            item.put("amt", matchAmt);
            list.add(item);
            //更新当前对象的状态为匹配完成 (得到帮助)
            this.match(proArr, temp_arr);
        }else if(fristProData == fristGetData){  //如果刚好相等
            matchAmt = fristProData;
            item.put("amt", matchAmt);
            list.add(item);
            int temp_pro_arr[] = this.removeItem(proArr);
            int temp_get_arr[] = this.removeItem(getArr);
            this.match(temp_pro_arr, temp_get_arr);

        }else{
            int temp_amt = fristGetData - fristProData;
            getArr[0] = temp_amt;  //设置提供帮助的钱为剩余的钱
            matchAmt = fristProData;
            //移除匹配完成的对象
            int temp_arr[] = this.removeItem(proArr);
            item.put("amt", matchAmt);
            list.add(item);
            //更新当前对象的状态为匹配完成(提供帮助)
            this.match(temp_arr, getArr);
        }
        return null;
    }
    public int[] removeItem(int arr[]){

        int length = arr.length;
        int tem_arr[] = new int[length-1];

        for(int i=1;i<length;i++){

            tem_arr[i-1] =arr[i] ;
        }
        return tem_arr;
    }
}
3065 交叉匹配 Task 给定两行数,求这两行数的最大交叉匹配数。 交叉匹配的原则: ① 上下两行,只有值相同的才能连线匹配。 ② 任意一条a匹配线有且仅有一条b匹配线和它相交,且a,b数值不同。 左边是合法的,而右边是不合法的。 N<=2000Solution 观察到,如果a,b上下相交,那么两个红色箭头范围内的不可能再有匹配线,否则就不满足②条件。那么一対匹配会把区间分割出独立的一段,类 阅读详情

相关推荐

Python遗传算法部分匹配交叉(PMX)

文章目录问题描述部分匹配交叉步骤(单点交叉为例)代码运行结果 问题描述 在进化算法的交叉环节中,无论是一点交叉还是两点交叉,基因重组后产生的后代可能出现编码重复的情况,那么就需要我们对产生的子代进行修订,常见修订算法有部分匹配交叉(PMX),顺序交叉(OX),循环交叉(CX)等 部分匹配交叉步骤(单点交叉为例) step1: 确定初始种群 list1: [9, 3, 5, 4, 6, 0, 2, 1, 7, 8] list2: [1, 4, 0, 2, 7, 8, 6, 9, 5, 3] step2: 随

Juuunn的博客 1万+

第十八节、图像描述符匹配算法、以及目标匹配

在前面的一些小节中,我们已经使用到的图像描述符匹配相关的函数,在OpenCV中主要提供了暴力匹配、以及FLANN匹配函数库。 一 暴力匹配以及优化(交叉匹配、KNN匹配) 暴力匹配即两两匹配。该算法不涉及优化,假设从图片A中提取了$m$个特征描述符,从B图片提取了$n$个特征描述符。对于A中$m$个特征描述符的任意一个都需要和B中的$n$个特征描述符进行比较。每次比较都会给出一个距离值,然后将得...

Graceful_scenery的博客 222

遗传算法-交叉算子讲解

用最简单直观的方法表达出交叉的过程

M-博客 3万+

交叉匹配

【题目描述】 为了预防“老牛痴呆”,农夫约翰在谷仓挂了一幅美国地图。一些聪明的奶牛注意到了一些奇怪的事情。现在给出N个城市和它们所在的州(州以两个字母写出),如果a城市的市名(取前两个字母)和b城市的州相同,且a城市的州名和b城市的市名(也取前两个字母)相同,就称为一次匹配。求有多少个匹配。 【输入格式】 第一行一个整数N(1<=N<=200000) 接下来N行,每行两个字符串a和b(以一个

Welcome to jrxjs's blog! 1020

《遗传算法》中的几种常见交叉算子详解

摘要:本文系统介绍了遗传算法中常见的交叉算子,包括单点、双点、多点、均匀交叉以及针对排列问题的PMX和OX。通过图示和示例详细说明了每种算子的实现原理、操作步骤及优缺点,其中单点交叉计算效率高但探索能力有限,均匀交叉提升多样性但计算量大,PMX和OX则专为解决排列约束问题。最后提供了交叉算子的选择策略和优化建议,建议根据问题复杂度、约束条件和多样性需求合理选择,并可通过混合使用和动态调整来提升算法性能。文章配有直观的动画演示链接,有助于开发者深入理解交叉机制。

小庞的博客 2064

基于交叉点匹配的指纹识别算法的MATLAB仿真

在指纹识别算法中,交叉点匹配是一种经典的方法,它基于指纹图像中的交叉点特征进行匹配和识别。通过加载指纹图像数据、提取交叉点特征和进行指纹匹配,我们可以实现基于交叉点匹配的指纹识别算法。另外,为了获得更好的识别效果,可以使用更复杂的特征提取和匹配算法,例如方向场、细节特征等。接下来,我们遍历数据库中的指纹图像,计算待匹配图像与数据库图像之间的距离,并更新最小距离和最佳匹配图像的索引。指纹匹配是指将待识别的指纹图像与数据库中的指纹图像进行比对,找到最相似的指纹。基于交叉点匹配的指纹识别算法的MATLAB仿真。

network_web569的博客 105

python编程实现遗传算法中常用到的交叉算子:采用PMX规则(即部分匹配交叉)

部分匹配交叉规则是遗传算法中常用到的交叉算子运用频率最高的一种。 首先简述一下,部分匹配交叉规则的具体步骤: step1:从采用自然数编码的种群中,获取两条染色体,作为父代染色体; 如父代染色体1:【8, 4, 5, 6, 7, 1, 3, 2】 父代染色体2:【8, 7, 1, 2, 3, 5, 4, 6】 step2:随机产生两个随机数满足0≤k1<k2≤ 染色体的长度,如k1 = 2, k...

会呼吸的梦 9605

基于交叉点匹配的指纹识别算法MATLAB仿真

一个典型的指纹识别系统应该包括:指纹识别Sensor特征提取/匹配模块特征模板库应用软件。而指纹的匹配可分为两步,首先是提取待验证的指纹的特征,然后将其和指纹模板库中的模板指纹进行相似度比较,从而判断两个指纹图像是否来自同一手指。我们可以看到,指纹识别核心的准确、高效的采集指纹分析。指纹识别采集技术的发展大致分为三个方式:光学识别、电容传感器、生物射频。指纹,由于其具有终身不变性、唯一性和方便性,已几乎成为生物特征识别的代名词。指纹是指人的手指末端正面皮肤上凸凹不平产生的纹线。

平时工作较为繁忙,私信消息一般晚上回复,谢谢大家~~ 265

c语言编程交错排序,下面代码遗传算法中,是交叉操作的哪种方法呢(部分匹配交叉法,单点交叉,顺序交叉,循环交叉)...

已结贴√问题点数:10回复次数:8 下面代码遗传算法中,是交叉操作的哪种方法呢(部分匹配交叉法,单点交叉,顺序交叉,循环交叉)以下代码是交叉操作的哪种方法呢 ?是部分匹配交叉法,单点交叉,顺序交叉,循环交叉?还是其他的方法呢?void Cross(PTSP city,double pc){//交叉概率是pcint crossNum,i;int cityCross[2][CITY_NUM+1];...

weixin_31032795的博客 754

遗传算法中的变异和交叉

遗传算法中的变异和交叉 一、交叉方法 1.部分匹配交叉(PMX) 由于一次只能去一个城市,所以一条染色体中的编码是不能重复的 比如我们随机产生两个父代:A=762150483,B=416307582, 我们假设选中的交叉位为第四位和第七位,我们如果让交叉位里面的编码直接换,那对A来说,交叉位里面的3、7和交叉位外面的3、7重复了,则让交叉位外面的3和4去换,让交叉位外面的7和5去换,则成功产生两...

冲出仁川,走出马德里,故事还会再继续 1万+

归一化交叉相关图像匹配算法(NCC)

归一化交叉相关图像匹配算法(NCC)的Matlab程序,简单易懂!

Python遗传算法进阶:部分匹配交叉(PMX)实现与优化

本文深入解析了遗传算法中用于解决组合优化问题的部分匹配交叉(PMX)算子。通过Python代码示例,详细演示了PMX的原理、实现步骤,并提供了性能优化方案与实战技巧,帮助开发者有效避免编码重复问题,提升算法效率。

weixin_29305313的博客 481

Matlab遗传算法的部分映射交叉算子(pmx)源码.7z

Matlab遗传算法的部分映射交叉算子(pmx)源码.7z

遗传算法解决tsp问题_基于锦标赛选择+匹配交叉+逆转变异的遗传算法解决旅行销售商问题...

亲们国庆假期过得愉快吗?在朋友圈看到大家到处逛吃逛吃,阿然表示非常羡慕!我们学校只放三天假,所以我国庆的这三天也过得很窒息hh 今天主要为大家带来遗传算法和旅行销售商问题的科普,并提出一种基于锦标赛选择(Tournament)+部分匹配交叉(point crossover)+ 染色体片段逆转变(Invertion Mutation)的遗传算法在解决旅行销售商问题上的应用...

weixin_42335570的博客 1702

RISC-V内核移植实战:从零开始手把手实现RT-Thread上下文切换(附GD32VF103代码解析)

本文详细解析了在RISC-V架构上移植RT-Thread实时操作系统的核心步骤,重点聚焦于上下文切换机制的实现。通过对比ARM Cortex-M与RISC-V在中断处理和寄存器管理上的关键差异,并以GD32VF103开发板为例,手把手指导开发者完成libcpu抽象层适配、线程栈初始化以及三种上下文切换方式的代码编写与调试,为嵌入式开发者从ARM转向RISC-V平台提供了实战指南。

fern8的博客 740

电力现货交易市场-报价方式

电是一种能源,也是一种商品,既然是商品自然可以在市场中进行自由交易。

qq_38225433的博客 5121

python实现遗传算法实例_基于锦标赛选择+匹配交叉+逆转变异的遗传算法解决旅行销售商问题...

亲们国庆假期过得愉快吗?在朋友圈看到大家到处逛吃逛吃,阿然表示非常羡慕!我们学校只放三天假,所以我国庆的这三天也过得很窒息hh 今天主要为大家带来遗传算法和旅行销售商问题的科普,并提出一种基于锦标赛选择(Tournament)+部分匹配交叉(point crossover)+ 染色体片段逆转变(Invertion Mutation)的遗传算法在解决旅行销售商问题上的应用...

weixin_39600885的博客 2141

如何在 Windows 11 上安装 ChatGPT:CMD + 图形界面两种方式

我没说在 Windows 11 上装 ChatGPT 应用有多难,但你要是知道有哪几种官方途径可用,事情就会顺一点,尤其是对新手。对大多数用户来说,商店应用就是正确的选择。如果你在受管理的设备上,或者想避开商店,那么通过 Edge 或 Chrome 装 PWA 是完全站得住脚的替代方案。不管你选哪条路,真正的收获都是把 ChatGPT 从浏览器标签页里挪出来,放进一个它真正像个工具的地方。把它固定到任务栏、配好 Alt + 空格,你就会纳闷以前没它是怎么干活的。

山岚的运维笔记 305

zoj 1425 最大交叉匹配

Crossed MatchingsTime Limit: 2 Seconds Memory Limit: 65536 KB There are two rows of positive integer numbers. We can draw one line segment between any two equal numbers, with values r, if one of...

weixin_30360497的博客 123

车道线检测1.0(Python+Opencv基础版)

车道线检测是指在道路上自动检测和识别车道线的过程。车道线是道路上的标记,用于指示车辆行驶的方向和位置。 通过对车道线进行检测和识别,自动驾驶和智能驾驶系统可以实现车辆的自动导航、车道保持、车道偏离警告等功能。

Dream_orz的博客 4265

Claude Code 完整学习笔记

Claude Code 学习笔记摘要 Claude Code是Anthropic推出的智能编码工具,基于Claude Opus 4.5模型构建,提供跨平台支持(终端/VS Code/JetBrains/Web等)。核心功能包括: 代码库理解与多文件编辑 命令执行与开发工具集成 智能体协作开发流程 安装要求Node.js≥18,提供原生/Homebrew/npm等多种安装方式,支持环境变量配置API访问。基础交互模式包括会话管理、文件操作和代码审查等功能,可自动读写文件并执行精确修改。 (149字)

虚心若愚 812

进化计算-遗传算法之史上最直观交叉算子(动画演示)

获取更多资讯,赶快关注上面的公众号吧! 文章目录第二十章 遗传算法-史上最直观交叉算子(动画演示)20.1 单点交叉(Single-point crossover)20.2 两点交叉(Two-points crossover)20.3 多点交叉(Multi-point crossover)20.4 部分匹配交叉(Partially-matched crossover,PMX)20.5 均匀交叉(...

松间沙路的博客 4万+

【TestNG自动化测试框架详解】

TestNG是一款设计测试用例执行流程的测试框架。

weixin_43936332的博客 1542
上一篇: Java实现身份证校验算法
下一篇: 挑出字符串中的数组、字母、空格个数
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值