用C语言实现了ISODATA算法,包括ISODATA.vcproj

源代码在线查看: sort.cpp

软件大小: 26 K
上传用户: archimedes88
关键词: ISODATA vcproj C语言 算法
下载地址: 免注册下载 普通下载 VIP

相关代码

				// Sort.cpp
				
				#include "stdafx.h"
				#include "Sort.h"
				
				extern int dim;
				
				Sort::Sort()
				{
					z = Pattern();
					n = 0;	
					_d = 0.0;
					max = 0;
					sigma_max = 0.0;
				
					for(int i=0;i						x[i] = Pattern();
				
					for(int i=0;i						sigma[i] = 0.0;
				}
				
				Sort::~Sort()
				{
				}
				
				// 判pattern为该类
				int Sort::Insert(Pattern pattern)
				{
					x[n] = pattern;
					n++;
					
					return n;
				}
				
				// 计算类心
				Pattern Sort::CalCenter()
				{
					z = Pattern();
					for(int i=0;i						z += x[i];
					
					z /= n;
						
					return z;
				}
				
				double Sort::Cal_D()	// 计算模式到类心的平均距离
				{
					_d = 0.0;
					for(int i=0;i						_d += Pattern::Distance(x[i], z);
					_d /= n;
				
					return _d;
				}
				
				// 计算类内距离的标准差矢量
				int Sort::CalSigma()
				{
					double temp = 0.0;
				
					for(int k=0;k					{
						for(int i=0;i							temp += (x[i].x[k] - z.x[k])*(x[i].x[k] - z.x[k]);
						
						sigma[k] = sqrt(temp/n);
				
						if(sigma_max < sigma[k])
						{
							sigma_max = sigma[k];
							max = k;
						}
					}
				
					return max;
				}
				
				// 当两类均未合并过时,将该类与w类合并
				bool Sort::Combin(Sort &w)
				{
					if( (z.n < 0) || (w.z.n < 0) )
						return false;
				
					z = (1/(n+w.n)) * (n * z + w.n + w.z );
					z.n = -1;	// 新的聚类中心,不可取消
					w.z.n = -2;	// 应取消中心的类
					return true;
				}			

相关资源