资源简介
这是模式识别中经典的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++实现。。
相关资源
- C++中头文件与源文件的作用详解
- C语言代码高亮html输出工具
- 猜数字游戏 c语言代码
- C语言课程设计
- 数字电位器C语言程序
- CCS FFT c语言算法
- 使用C语言编写的病房管理系统
- 通信过程中的RS编译码程序(c语言)
- 计算机二级C语言上机填空,改错,编
- 用回溯法解决八皇后问题C语言实现
- 简易教务管理系统c语言开发文档
- 操作系统课设 读写者问题 c语言实现
- 小波变换算法 c语言版
- C流程图生成器,用C语言代码 生成C语
- 3des加密算法C语言实现
- 简单的C语言点对点聊天程序
- 单片机c语言源程序(51定时器 八个按
- 个人日常财务管理系统(C语言)
- c语言电子商务系统
- 小甲鱼C语言课件 源代码
- 将图片转换为C语言数组的程序
- C语言实现的一个内存泄漏检测程序
- DES加密算法C语言实现
- LINUX下命令行界面的C语言细胞游戏
- 用单片机控制蜂鸣器播放旋律程序(
- 学校超市选址问题(数据结构C语言版
- 电子时钟 有C语言程序,PROTEUS仿真图
- 尚观培训linux许巍老师关于c语言的课
- 算符优先语法分析器(C语言编写)
- 基于C语言的密码锁程序
评论
共有 条评论