算法—符号表

定义:符号表是一种存储键值对的数据结构,支持两种操作:插入(put),即将一组新的键值对存入表中;查找(get),即根据给定的键得到相应的值。

1.有序符号表

2.成本模型

查找的成本模型:在学习符号表的实现时,我们会统计比较的次数(等价性测试或是键的相互比较)。在内循环不进行比较(极少)的情况下,我们会统计数组的访问次数。

 3.符号表的用例

/**
 * 符号表用例
 */
public class FrequencyCounter {

	public static void main(String[] args) {
		int minlen = Integer.parseInt(args[0]);	//最小键长
		ST<String, Integer> st = new ST<String, Integer>();
		//构造符号表并统计频率
		while(!StdIn.isEmpty()){
			String word = StdIn.readString();
			//忽略较短的单词
			if(word.length() < minlen){
				continue;
			}
			if(!st.contains(word)){
				st.put(word, 1);
			}
			else{
				st.put(word, st.get(word) + 1);
			}
		}
		//找出出现频率最高的单词
		String max = " ";
		st.put(max, 0);
		for (String word : st.keys()) {
			if(st.get(word) > st.get(max)){
				max = word;
			}
		}
		StdOut.println(max + " " + st.get(max));
	}
}

 

源码下载

posted @ 2015-11-29 11:30  是非猫  阅读(1172)  评论(0编辑  收藏  举报