FastMap Algorithm

Java Class Source Code

/*
 * Created on Nov 25, 2004
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */

/**
 * @author sueyeon syn
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */

import java.lang.Math;

public class fastmap {
	
	static int no;
	static int counter = 0;
	static float[][] m;
	static float[][] docdist;
	
	public static void main(String args[]){

		String s = new String("1,0,1,0,1,1,1,1,0,1,0,1,1,1,1,1");
		distance d = new distance();
		d.DIM = 4;
		docdist = d.dist(s);
		no = d.n;
		m = new float[3][no];
		
		for(int k = 0; k<3; k++)
		{
			System.out.println("f=" + k);
			docdist = euclidean(docdist);
			
			for(int i = 0; i < no; i++)
			{
				for(int j = 0; j < no; j++)
					System.out.print(docdist[i][j]);
				System.out.println(" ");
			}
			System.out.println(" ");
		}
		
		System.out.println("RESULT OF FASTMAP");
		for(int i = 0; i<3; i++)
		{
			for(int j = 0; j < no; j++)
				System.out.print(m[i][j]+"\t");
			System.out.println(" ");
		}
			
	}

	public static int[] objects(float docdist[][]) {
		float max = 0;
		int a = 0;
		int b = 0;
		for(int i = 0; i < no; i++)
			for(int j = 0; j < no; j++)
				if(docdist[i][j] > max)
				{
					max = docdist[i][j];
					a = i;
					b = j;
				}
		int array[] = {a, b};
		return array;
		
	}
	
	public static float[] cosine(float docdist[][]) {
		int[] dis = objects(docdist);
		int a = dis[0];
		int b = dis[1];
		float[] x = new float[no];
		for(int i = 0; i < no; i++)
		{
			x[i] = (float) (Math.pow(docdist[a][i],2)+Math.pow(docdist[a][b],2)
			-Math.pow(docdist[b][i],2))/(2*docdist[a][b]);
			x[i] = (float) Math.round(x[i]*1000)/1000;
		}
		for(int j = 0; j < no; j++)
			System.out.println(x[j]);
		System.out.println(" ");
		
		m[counter++] = x;
		return x;
	}
	
	public static float[][] euclidean(float docdist[][]) {
		float x[] = cosine(docdist);
		float d[][] = new float[no][no];
		for(int i = 0; i < no; i++)
		{
			for(int j = 0; j < no; j++)	
			{
				d[i][j] = (float) Math.sqrt(Math.pow(docdist[i][j],2)
				-Math.pow(x[i]-x[j],2));
				if(Float.isNaN(d[i][j]))
					d[i][j] = 0;
			}	
		}
		return d;
	}
	

}
| Home| Resume| Research Interests| Contact|