资源简介
这是模式识别中经典的ISODATA算法,用户交互输入进行分类,C语言实现,效果很好
代码片段和文件信息
// ISODATA.cpp : Defines the entry point for the console application.
//
#include “stdafx.h“
#include “stdio.h“
#include “math.h“
#define N 10
#define eps 0.00001
struct Pointf
{
int sequence;
float x;
float y;
};
struct PointZ
{
float x;
float y;
};
float CalDistancef(Pointf x1Pointf x2)
{
return sqrtf((x1.x-x2.x)*(x1.x-x2.x)+(x1.y-x2.y)*(x1.y-x2.y));
}
float CalDistanceZ(PointZ x1PointZ x2)
{
return sqrtf((x1.x-x2.x)*(x1.x-x2.x)+(x1.y-x2.y)*(x1.y-x2.y));
}
float CalDistancefZ(Pointf x1PointZ x2)
{
return sqrtf((x1.x-x2.x)*(x1.x-x2.x)+(x1.y-x2.y)*(x1.y-x2.y));
}
int main(int argc char* argv[])
{
Pointf pts[N]={
{00.00.0}{13.08.0}{22.02.0}{31.01.0}{45.03.0}
{54.08.0}{66.03.0}{75.04.0}{86.04.0}{97.05.0}
};
int ijm;
printf(“样本集为:\n“);
for(i=0;i {
printf(“X%d(%.1f%.1f) “ipts[i].xpts[i].y);
if((i+1)%5==0)
{
printf(“\n“);
}
}
printf(“\n“);
printf(“\n“);
int Nc=0;
printf(“please input 初始聚类中心数:Nc(0-10): “);
scanf(“%d“&Nc);
int Z[N];
for(i=0;i {
printf(“输入初始第%d聚类中心的序号(0-9):“i);
scanf(“%d“&Z[i]);
}
int Nj[N]; //记录每个类中元素的个数
PointZ ZArray[N];
Pointf SAArray[N][N];
float DjAv[N];
float Deltaj[N][2];
float Deltajmax[N];
int DeltajmaxCor[N];
float DAv;
int Nreal=N;
int count=0;
float Dij[N*N/2];
int Diji[N];
int Dijj[N];
int q=0;
int p=0;
float ft;
int it;
int jt;
int flag;
int ss=0;
PointZ Ztp;
PointZ ZArraytp[N];
int Nctp;
char ch;
int cur=0;
for(i=0;i {
Nj[i]=0;
}
//聚类中心的特征值
for(i=0;i {
int ihere=Z[i];
ZArray[i].x=pts[ihere].x;
ZArray[i].y=pts[ihere].y;
}
int KThetaN;
float ThetaSThetaC;
int LI;
Step1:
printf(“输入预期聚类中心数目 K :“);
scanf(“%d“&K);
printf(“输入每个聚类域中最少的样本数ThetaN: “);
scanf(“%d“&ThetaN);
printf(“输入同一聚类域中样本标准差的最大值: “);
scanf(“%f“&ThetaS);
printf(“输入不同聚类域距离最小值: “);
scanf(“%f“&ThetaC);
printf(“输入一次可以合并的聚类中心的最多对数: “);
scanf(“%d“&L);
printf(“输入最大迭代次数: “);
scanf(“%d“&I);
Step2:
for(i=0;i {
Nj[i]=0;
}
printf(“\n“);
printf(“这是第%d次归类\n“count+1);
for(i=0;i {
if(pts[i].sequence==-1)continue; //若该点的序号为-1则说明它是被剔除的
float dis=1.0e+10;
int xx=0;
float ftemp;
for(j=0;j {
ftemp=CalDistancefZ(pts[i]ZArray[j]);
if(ftemp {
xx=j;
dis=ftemp;
}
}
SAArray[xx][Nj[xx]].x=pts[i].x;
SAArray[xx][Nj[xx]].y=pts[i].y;
SAArray[xx][Nj[xx]].sequence=pts[i].sequence;
Nj[xx]=Nj[xx]+1;
}
for(i=0;i {
printf(“第%d个聚类中心是:(%.2f%.2f) “iZArray[i].xZArray[i].y);
printf(“包含的元素有:“i);
for(j=0;j {
printf(“ X%d “SAArray[i][j].s
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 221243 2007-12-04 18:49 ISODATA\Debug\ISODATA.exe
文件 16464 2007-12-04 18:24 ISODATA\Debug\ISODATA.obj
文件 484352 2007-10-24 21:13 ISODATA\Debug\ISODATA.pdb
文件 53248 2007-10-24 21:13 ISODATA\Debug\vc60.pdb
文件 6756 2007-10-24 21:13 ISODATA\ISODATA.cpp
文件 3413 2007-10-24 21:45 ISODATA\ISODATA.dsp
文件 522 2007-10-24 21:54 ISODATA\ISODATA.dsw
文件 58368 2008-03-09 21:29 ISODATA\ISODATA.ncb
文件 53760 2008-03-09 21:29 ISODATA\ISODATA.opt
文件 745 2007-12-04 18:49 ISODATA\ISODATA.plg
文件 1214 2004-10-04 18:17 ISODATA\ReadMe.txt
文件 294 2004-10-04 18:17 ISODATA\StdAfx.cpp
文件 667 2004-10-04 18:17 ISODATA\StdAfx.h
目录 0 2009-07-08 17:42 ISODATA\Debug
目录 0 2008-12-29 20:33 ISODATA
----------- --------- ---------- ----- ----
901046 15
- 上一篇:C语言课程设计案例精编
- 下一篇:单链表的C++实现。。
相关资源
- 模糊+PID C语言实现
- 链表的归并 数据结构 C语言实现
- 隐含马尔科夫链的C语言实现
- 八数码C语言实现包含实验报告
- 数据结构 银行排队系统
- C语言实现页面置换算法
- linux下C语言实现FTP上传文件源码200行
- 用C语言实现高斯滤波
- 耿国华《数据结构》第二版C语言描述
- C/C++语言图像处理:各种滤波
- C语言算法之枚举法acm例题
- 潜艇大战 C语言实现
- C语言编写的文本编辑器实验报告,内
- C语言学生成绩管理系统(附设计报告
- c语言 termios.h
- 北航C语言课件2010考研机试资料
- DOS操作系统的C语言源代码
- C语言实现连连看游戏
- 车票班次管理系统C语言含报告
- 学生成绩查询系统c语言
- 用I/O命令访问PCI总线设备配置空间
- 多级反馈队列调度算法 C语言模拟实现
- C语言百科全书集合了c语言关键字分类
- C语言程序设计 现代方法 第二版 习题
- C语言程序设计 现代方法 第二版 源代
- C语言 实现 家族谱 树结构
- C语言课程设计案例精编
- c语言 利用学生信息栈实现学生信息单
- 上海电机学院C语言实训答案
- zw_AES加密算法c语言实现代码.zip
评论
共有 条评论