这是一个模拟竞赛的题目中的一部分。大二下,或是大三上的时候做的,具体时间已经记得不太清楚了。期间提出的一个启发式算法极大的提高了一个搜索的效率,尤为有成就感。即使到现在,在算法方面,也很少有这种拉风的感觉。贴过来,体验一下这种拉风的感觉。嘿嘿。(这个竞赛是和老典和YB一起做的,里面自然有许多许多他们的劳动成果,呵呵,非常的感谢他们,说真的,合作非常的愉快,让我到今天都还记得这种纯粹的快乐,很难得)
问题重述<o:p></o:p>
DNA限制性图谱是遗传生物学中的重要问题。由于在对其研究中需要将很长的DNA分子切开以便分段测量,所以就需考虑如何把这些片段重新排序以使原先DNA分子的信息(排列顺序)不丢失。<o:p></o:p>
传统方法PDP,采用限制性酶,按照需要在限制性位点把DNA切成多个片段。通过实验测得任意两个限制性位点(即切点)之间片段的长度。<o:p></o:p>
但是要把DNA分子在任意两个限制性位点处切开,对当今实验技术来说有相当难度。现采用简化的部分消化方法SPDP,方法如下:<o:p></o:p>
首先DNA分子被复制成n+1份,前n个复制品中的每一个在一个限制性位点处被切开,最后一个复制品在所有的限制性位点处被切开。分别将得到的2n 个片段长度(称为第一组数据)和n+1个片段长度(称为第二组数据)。在没有误差的前提下,第一组数据中2n个长度可以分成n对,每对的和都等于DNA分子的总长度;第二组数据中n+1个长度的和也等于DNA分子的总长度。现在的问题是如何只根据这两组数据,恢复出原先DNA分子中各片段的排列顺序。
假设<o:p></o:p>
1.本文实现的DNA重构不包含原先DNA内全部信息,即只保证各片段的前后次序,而不保证个片段之间首尾正确相连;<o:p></o:p>
2.问题一给定的数据测量无误差;<o:p></o:p>
3.只要都符合两组数据的排列方式,皆为可能的正确排列;<o:p></o:p>
4.在问题二中,数据误差的出现服从以真值为均值的正态分布;如果有两个或两个以上的数据测量带有误差,则它们出现的概率是相互独立的;<o:p></o:p>
5.若第二组数据中有相等的数据,则在求得片段的排列中,这些相等的数据可以互换而实际得出DNA其他的排列方式,本文对这种因互换而衍生出来的排列不作考虑(只考虑长度因素)。<o:p></o:p>
其他模型的建立与求解,分析统统略过吧。只对这个算法感兴趣。
算法描述:双向交叉搜索算法<o:p></o:p>
由于单向搜索法在探索许多步后,可能无法再往后继续搜索而不得不后退,从而浪费了不少时间,这是单向搜索在时间方面仍不是很令人满意的根本原因。为得到更快的求解速度,现将单向搜索改成双向,设计出双向交叉搜索算法。<o:p></o:p>
名词解释:<o:p></o:p>
1.序列:n+1个DNA片段在DNA分子的排列;<o:p></o:p>
2.前向第x个元素:从前端数起第x个元素;<o:p></o:p>
后向第x个元素:从后端数起第x个元素;<o:p></o:p>
3.当前可匹配的DNA片段:在以形成的序列里加入该片段,如果在该片段处切开,能够得到第一组数据中的某两个数据,并且这一对数据在前面的步骤中还没有得到过;<o:p></o:p>
4.已试探的不匹配的DNA片段:在第i步中已找不到当前可匹配的DNA 片段,退回第i-1步时,将该步骤的DNA片段标记为已试探的不可匹配的DNA片段; <o:p></o:p>
双向交叉搜索算法:<o:p></o:p>
1.第一步:选取第一组数据中最小的数据作为第一个DNA片段的长度;<o:p></o:p>
2.第二步:除去已用的DNA片段,在其他所有的DNA片段中寻找能够成为序列中最后一个元素的DNA片段。如有多个,则记录下来;同时选取第一个可匹配的片段作为当前已找到的DNA片段;<o:p></o:p>
3.第三步:除去已用的DNA片段,在其他所有的DNA片段中寻找能够成为序列中第二个元素的DNA片段。如有多个,则记录下来,同时选取第一个可匹配的片段作为当前已找到的DNA片段;如果找不到当前可匹配的DNA序列,则退回上一步,试探其他可匹配的序列;<o:p></o:p>
4.…<o:p></o:p>
5.i. 第i步:除去已用的DNA片段,除去已试探的不可匹配的DNA片段,在其他所有的DNA片段中寻找能够成为序列中前向第ceil(i/2)个元素(i为奇数时)(后向第(ceil(i/2))个元素,i为偶数)的DNA片段。如有多个,则记录下来,同时选取第一个可匹配的片段作为当前已找到的DNA片段;如果找不到当前可匹配的DNA序列,则退回第(i-1)步,试探其他可匹配的序列;<o:p></o:p>
i+1 …<o:p></o:p>
n+1. 第n+1步:已找到一个序列,记录该序列。<o:p></o:p>
以上n+1步即为寻找一个DNA排列的过程,当找到一个排列后,若想寻找<o:p></o:p>
其他的排列,只需退回一步,同时把该过程的最后一个DNA片段标记为已试探的不可匹配的DNA片段,直至搜索完所有的可能排列。<o:p></o:p>
呵呵。感觉搞数模这段时光也挺让人怀念的,在一起就事论事,很单纯的去想解决些问题,体会这种挑战问题的兴趣。而且,现在看看这些大二大三时写的代码,一些想法和文章,都还是觉得挺不错的,都有那么点新意。三人的合作真的很好,算法与问题分析方面一起讨论,然后一个负责信息的收集与分析,一个负责算法实现与模拟,一个负责论文撰写与文字修饰。性格也比较互补,而且一女两男,哈哈,搭配合适,呵呵~!和谐团队啊!
这个帖子,仅为自娱自乐下。不发表。
分享到:
相关推荐
课件中的“第一部分 用搜索方法求解问题.ppt”可能涵盖了深度优先搜索、广度优先搜索、启发式搜索(如A*搜索)以及它们在解决八皇后问题、迷宫问题等经典问题的应用。 2. **归结原理**:归结是逻辑推理的核心机制,...
2. **深度优先搜索**:DFS沿着某一条路径深入探索,直到无法继续前进,然后回溯到上一个节点尝试另一条路径。DFS通常内存效率较高,但不保证找到最短路径。 在图搜索过程中,你可能还需要实现一些辅助结构,如队列...
1. **Cplex**:这是一个由IBM开发的强大的线性、整数和混合整数编程求解器。在车间调度问题中,Cplex可以用来构建并求解复杂的数学模型,如0-1规划或线性规划,将任务分配和时间窗口约束转化为数学公式,寻找最优解...
旅行商问题(Traveling Salesman Problem, TSP)是图论中一个经典的组合优化问题,它的目标是找到访问每座城市一次并返回起点的最短路径。在实际应用中,如物流配送、电路布线等领域,TSP都有着广泛的应用。MATLAB...
《C++数据结构原理与经典问题求解》是一本深入探讨C++编程语言在数据结构领域的应用和问题解决的书籍。源代码的提供为读者提供了实际动手操作的机会,加深理解并提升技能。以下是对该主题的详细阐述: 一、C++语言...
这两个问题分别是十二硬币问题(12 Coin Problem)和野人过河问题(Missionaries and Cannibals Problem),都是启发式搜索算法在实际问题中的应用实例。 十二硬币问题是一个经典的逻辑谜题,目标是找出最少的翻转...
1. **模型建立**:在MATLAB中,我们首先需要将31个城市的坐标表示为一个二维矩阵,每行代表一个城市,每列分别对应X轴和Y轴坐标。例如,`C = [x1, y1; x2, y2; ...; x31, y31]`。 2. **距离矩阵**:接下来,我们...
问题求解是人工智能中一个核心概念,它指的是智能体通过搜索来找到解决问题的方法。问题求解智能体是一种基于目标的智能体,旨在通过搜索来解决问题。 问题求解的基本概念包括问题形式化、搜索策略和问题解决算法。...
这个问题可以被视为图的遍历问题,常见的解决方法包括深度优先搜索(DFS)和广度优先搜索(BFS)。 1. **深度优先搜索 (DFS)** 深度优先搜索是一种递归策略,用于遍历或搜索树或图。在城市遍历问题中,DFS会从一个...
《程序设计与问题求解》是一本专注于 ACM(国际大学生程序设计竞赛)解题策略的指导书籍,旨在提升读者的编程思维与问题解决能力。在224页的内容中,这本书深入浅出地讲解了如何通过编程来解决复杂的问题,为参与ACM...
- 信赖域方法:一种迭代数值方法,用于求解非线性优化问题,通过在每次迭代中确定一个信赖域,并在该区域内寻找最优步长。 - 信赖域子问题:在信赖域方法中,每一步迭代所需解决的二次优化问题,目的是找到下一个...
这是一个典型的组合优化问题,没有简单的公式可以直接求解,因此常常采用搜索算法来寻找解决方案,其中之一就是回溯法。 回溯法是一种试探性的解决问题的方法,它尝试通过逐步构造可能的解决方案来探索问题的所有...
在计算机科学领域,迷宫求解问题是一个经典的图论问题,它涉及到路径寻找、搜索算法等多种概念。在这个问题中,我们通常将迷宫视为一个二维矩阵,其中每个节点代表一个位置,而路径则由可通行的节点(通常是1或true...
同时,作者也探讨了知识的获取、表示、存储和更新等问题,这对于建立一个能自我学习和适应的智能系统至关重要。 机器学习是近年来AI研究的热点,书中可能涉及监督学习、无监督学习、强化学习等主要学习模式。这些...
这个问题描述了一个旅行商如何有效地访问一系列城市,每个城市只访问一次,最后返回起点,使得总行程距离最短。在实际应用中,TSP 可用于物流配送、电路布线、基因组排序等多个领域。 C++ 是一种强大的编程语言,...
活动安排问题的动态规划、贪心算法和树搜索算法求解。 比如有一个多媒体教室,现在有四个待举办活动A、B、C、D。A是在8:00到10:00举行,简单记为[8, 10];B是[12, 14];C是[15, 17];D是[11, 19]。为了让尽可能多的...
这个问题通常涉及到两个有固定容量的水壶,以及一个精确度目标,要求通过倒水操作找到一种方法,使得某一个水壶的水位达到特定的目标值。这个问题在计算机科学中具有重要的地位,因为它能够展示如何运用有限的资源和...
通过这些模块化的函数,可以构建一个完整的禁忌搜索算法框架来求解旅行商问题。 在实际应用中,TSP的MATLAB实现还需要考虑其他优化策略,如改进的邻域操作、动态调整禁忌列表长度、多种记忆策略结合等,以提高算法...
算符则驱动状态的改变,从一个状态转移到另一个。盲目搜索策略如宽度优先搜索、深度优先搜索等,虽然可能效率不高,但在特定场景下仍具实用性。 综上所述,人工智能中的问题求解和搜索策略是理解机器学习、自动化...