Top-N 알고리즘 구현(자바 버 전)

간단 한 소개
검색엔진 에서 루 센 과 같은 검색 결 과 는 가장 비슷 한 전 N 조 입 니 다.그러면 어떻게 무질서 한 배열 에서 전 N 개의 최대(또는 최소)값 을 얻 습 니까?다음은 제 가 쓴 Top-N 프 리 젠 테 이 션 프로그램 입 니 다.주로 사용 하 는 데이터 구 조 는 TreeSet 이 고 TreeSet 는 자동 으로 삽입 순 서 를 실현 하 며 전 제 는 이 유형 이 Comparable 인 터 페 이 스 를 실현 해 야 한 다 는 것 이다.
실체 류
/*
 * $filename: Student.java,v $
 * $Date: 2013-10-23  $
 * Copyright (C) ZhengHaibo, Inc. All rights reserved.
 * This software is Made by Zhenghaibo.
 */
package edu.njupt.zhb;
/*
 *@author: ZhengHaibo  
 *web:     http://blog.csdn.net/nuptboyzhb
 *mail:    [email protected]
 *2013-10-23  Nanjing,njupt,China
 */
public class Student implements Comparable {
	private String name;
	public Student(String name, int score) {
		this.name = name;
		this.score = score;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getScore() {
		return score;
	}

	public void setScore(int score) {
		this.score = score;
	}

	private int score;

	@Override
	public int compareTo(Student o) {
		// TODO Auto-generated method stub
		if(o.getScore()>this.score){
			return 1;
		}else if(o.getScore()

Demo
/*
 * $filename: TopNTest.java,v $
 * $Date: 2013-10-23  $
 * Copyright (C) ZhengHaibo, Inc. All rights reserved.
 * This software is Made by Zhenghaibo.
 */
package edu.njupt.zhb;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.TreeSet;

/*
 *@author: ZhengHaibo  
 *web:     http://blog.csdn.net/nuptboyzhb
 *mail:    [email protected]
 *2013-10-23  Nanjing,njupt,China
 */
public class TopNTest {
    
	private TreeSet topN = new TreeSet();//Student    Comparable  
    private List studentList = new ArrayList();
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		TopNTest test = new TopNTest();
		test.initList();//         
		test.topN(10);//   10    
		test.printTopN();
	}
	
	/**
	 *   TreeSet
	 */
	public void printTopN() {
		// TODO Auto-generated method stub
		System.out.println("--------------------topN result----------------");
		int index = 0;
		for(Student student:topN){
			index++;
			System.out.println("No:"+index+",name="+student.getName()+",score="+student.getScore());
		}
	}
    /**
     *     100      ,     studentList 
     */
	public void initList(){
		System.out.println("--------------------init----------------");
		for(int i=0;i<1000;i++){
			Random rand =  new Random();
			Student student = new Student("student"+i, rand.nextInt(100));
			studentList.add(student);
			//System.out.println("name = "+student.getName()+",score="+student.getScore());
		}
	}
	
	/**
	 *    N     
	 * @param N    N     
	 */
	public void topN(int N){
		int minScore = 110;
		for(Student student:studentList){
			if(minScore>100){//     
				minScore = student.getScore();
			}
			if(topN.size()minScore){//topN    ,             
				topN.remove(topN.last());//   topN     
				topN.add(student);
				minScore = topN.last().getScore();//     
			}
		}
	}

}

실험 결과
초기 화 데 이 터 는 무 작위 로 생 성 된 숫자 이기 때문에 매번 실행 되 는 결과 가 다 릅 니 다.

좋은 웹페이지 즐겨찾기