Neighbour-Joining (NJ算法)





clc;
clear all;
close all;
Distance = [0,2,4,6,6,8;
2,0,4,6,6,8;
4,4,0,6,6,8;
6,6,6,0,4,8;
6,6,6,4,0,8;
8,8,8,8,8,0];
S = ['A','B','C','D','E','F'];
L = length(Distance(:,1));
r= [];
SResult = [];
STemp = [];
%% NJ Algorithm
while L > 2
%calculate r(i)=sum(d(i,k))/(L-2);
r = [];
for i = 1:L
r = [r;sum(Distance(:,i))/(L-2)];
end
%calculate D(i)= d(i,j) - r(i) -r(j);
for i =1:L
for j =1:L
if i == j
DistanceTemp(i,j) = 0;
else
DistanceTemp(i,j) = Distance(i,j) - r(i) - r(j);
end
end
end
%find min weight
minWeight = min(min(DistanceTemp));
[row,con] = find(DistanceTemp == minWeight);
row = row(1);
con = con(1);
STemp = strcat(S(min(row,con)),S(max(row,con)));
SResult = [SResult,STemp]
S(row) = [];
S(con) = [];
S = strcat(S,STemp);
%update Distance
CombineVector = (Distance(row,[1:min(row,con)-1,min(row,con)+1:max(row,con)-1,...
max(row,con)+1:L]) + Distance(con,[1:min(row,con)-1,min(row,con)+1:max(row,con)-1,...
max(row,con)+1:L]) - Distance(row,con))/2;
Distance = Distance([1:min(row,con)-1,min(row,con)+1:max(row,con)-1,...
max(row,con)+1:L],[1:min(row,con)-1,min(row,con)+1:max(row,con)-1,...
max(row,con)+1:L]);
L = length(Distance(:,1));
Distance(L+1,1:L) = CombineVector;
Distance(1:L,L+1) = CombineVector';
Distance(L+1,L+1) = 0;
L = L + 1;
end
Neighbour-Joining (NJ算法)的更多相关文章
- 机器学习---K最近邻(k-Nearest Neighbour,KNN)分类算法
K最近邻(k-Nearest Neighbour,KNN)分类算法 1.K最近邻(k-Nearest Neighbour,KNN) K最近邻(k-Nearest Neighbour,KNN)分类算法, ...
- 后端程序员之路 12、K最近邻(k-Nearest Neighbour,KNN)分类算法
K最近邻(k-Nearest Neighbour,KNN)分类算法,是最简单的机器学习算法之一.由于KNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重 ...
- 散列表(hash table)——算法导论(13)
1. 引言 许多应用都需要动态集合结构,它至少需要支持Insert,search和delete字典操作.散列表(hash table)是实现字典操作的一种有效的数据结构. 2. 直接寻址表 在介绍散列 ...
- [Evolutionary Algorithm] 进化算法简介
进化算法,也被成为是演化算法(evolutionary algorithms,简称EAs),它不是一个具体的算法,而是一个“算法簇”.进化算法的产生的灵感借鉴了大自然中生物的进化操作,它一般包括基因编 ...
- MySql联接算法
联接算法是MySql数据库用于处理联接的物理策略.在MySql 5.5版本仅支持Nested-Loops Join算法,如果联接表上有索引时,Nested-Loops Join是非常高效的算法.如果有 ...
- C算法编程题(五)“E”的变换
前言 上一篇<C算法编程题(四)上三角> 插几句话,说说最近自己的状态,人家都说程序员经常失眠什么的,但是这几个月来,我从没有失眠过,当然是过了分手那段时期.每天的工作很忙,一个任务接一个 ...
- 基于python的七种经典排序算法
参考书目:<大话数据结构> 一.排序的基本概念和分类 所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作.排序算法,就是如何使得记录按照要求排列的方法. ...
- [CC]区域生长算法——点云分割
基于CC写的插件,利用PCL中算法实现: void qLxPluginPCL::doRegionGrowing() { assert(m_app); if (!m_app) return; const ...
- Java面试宝典系列之基础排序算法
本文就是介绍一些常见的排序算法.排序是一个非常常见的应用场景,很多时候,我们需要根据自己需要排序的数据类型,来自定义排序算法,但是,在这里,我们只介绍这些基础排序算法,包括:插入排序.选择排序.冒泡排 ...
随机推荐
- Jsoup获取网页内容(并且解决中文乱码问题)
1. 根据连接地址获取网页内容,解决中文乱码页面内容,请求失败后尝试3次 private static Document getPageContent(String urlStr) { for (in ...
- Linux没有netstat和ifconfig命令问题
安装了精简版命令行centos7系统,运行netsta查看端口和ifconfig查看IP命令都提示找不到命令. 解决方法: yum search ifconfig 通过yum search 这个命令我 ...
- AcWing 298. 围栏 (POJ1821)
标签(空格分隔): dp 单调队列优化 题目描述 有N块木板从左到右排成一行,有M个工匠对这些木板进行粉刷,每块木板至多被粉刷一次. 第 i 个木匠要么不粉刷,要么粉刷包含木板 \(S_i\) 的,长 ...
- Linux服务器学习----tomcat 服务配置实验报告(一)
一.实验目的 1. 掌握 tomcat 服务的搭建 二.实验内容 1. 搭建一台缓存 tomcat 服务器 三.实验环境1. tomcat 服务器 centos7 对应主机 ip 为 10.10.64 ...
- mfc 位图本地存储 本地位图读取显示
一.读取CImage //在绘图函数中直接使用参数pDC,无需定义 CDC* pDC = GetDC(): //读去位图路径,根据实际情况修改 CString loatImagePath = TEXT ...
- 树莓派自动连接WiFi
使用sudo raspi-config配置好第一个wifi 然后只需要修改一个文件sudo nano /etc/wpa_supplicant/wpa_supplicant.conf 内容如下: ctr ...
- 第7.14节 Python类中的实例方法详析
第7.14节 Python类中的实例方法详析 一. 实例方法的定义 在本章前面章节已经介绍了类的实例方法,实例方法的定义有三种方式: 1. 类体中定义实例方法 第一种方式很简单,就是在类体 ...
- Error: Cannot find module '../lib/utils/unsupported.js'
报错: nodejs : Error: Cannot find module '../lib/utils/unsupported.js' 解决办法(linux): 去node目录下:/node***/ ...
- OA公文流转系统(未完成)
基本页面比较多,所以就不贴出来了,具体的页面可以自行浏览. 点我进入OA系统浏览界面(未做响应式布局,需电脑端打开) 账号密码: 部门:bumen------bumen 办公室:bangongshi- ...
- PHP 的$server变量
PHP中$_SERVER["QUERY_STRING"]函数 详解PHP中$_SERVER函数的QUERY_STRING和 $_SERVER存储当前服务器信息,其中有几个值 如 ...