zoukankan      html  css  js  c++  java
  • 英语文章单词统计程序思路

    主要思路:文件读入文章,用HashMap 来存放出现的单词的次数,Key 是要统计的单词,Value 是单词出现的次数。最后再按照 Key 的升序排列出来。

    {

    HashMap:

     数组:采用一段连续的存储单元来存储数据。对于指定下标的查找,时间复杂度为O(1);通过给定值进行查找,需要遍历数组,逐一比对给定关键字和数组元素,时间复杂度为O(n),当然,对于有序数组,则可采用二分查找,插值查找,斐波那契查找等方式,可将查找复杂度提高为O(logn);对于一般的插入删除操作,涉及到数组元素的移动,其平均复杂度也为O(n)

     线性链表:对于链表的新增,删除等操作(在找到指定操作位置后),仅需处理结点间的引用即可,时间复杂度为O(1),而查找操作需要遍历链表逐一进行比对,复杂度为O(n)

     二叉树:对一棵相对平衡的有序二叉树,对其进行插入,查找,删除等操作,平均复杂度均为O(logn)。

     哈希表:相比上述几种数据结构,在哈希表中进行添加,删除,查找等操作,性能十分之高,不考虑哈希冲突的情况下,仅需一次定位即可完成,时间复杂度为O(1),接下来我们就来看看哈希表是如何实现达到惊艳的常数阶O(1)的。

      我们知道,数据结构的物理存储结构只有两种:顺序存储结构链式存储结构(像栈,队列,树,图等是从逻辑结构去抽象的,映射到内存中,也这两种物理组织形式),而在上面我们提到过,在数组中根据下标查找某个元素,一次定位就可以达到,哈希表利用了这种特性,哈希表的主干就是数组

      比如我们要新增或查找某个元素,我们通过把当前元素的关键字 通过某个函数映射到数组中的某个位置,通过数组下标一次定位就可完成操作。

            存储位置 = f(关键字)

      其中,这个函数f一般称为哈希函数,这个函数的设计好坏会直接影响到哈希表的优劣。

    摘自---作者: dreamcatcher-cx

    出处: <http://www.cnblogs.com/chengxiao/>

    }

    {

    程序:

    import java.util.*;
    import java.io.*;
     public class CountOccurrenceOfWords {
         public static void main(String[] args) throws Exception {
            Map hashMap = null;
            BufferedReader infile = null;
            StringTokenizer st = null;
            String filename = "Test.txt";
            String string;
            String file = null;
            //打开一篇文章,名字是 Test.txt .       

            infile = new BufferedReader(new FileReader(filename));
            while ((string = infile.readLine()) != null) {
                file += string;  //都出整篇文章,存入String中         }
             hashMap = new HashMap();
                    // 取出文章中的单词,"," "." "!" " " 为各个单词的分界符   

             st = new StringTokenizer(file, " ,.!");
             while (st.hasMoreTokens()) {
                String key = st.nextToken();
                if (hashMap.get(key) != null) {
                    int value = ((Integer) hashMap.get(key)).intValue();
                    value++;
                    hashMap.put(key, new Integer(value));
                 } else {
                    hashMap.put(key, new Integer(1));
                }
            }
                    //按照单词的字母次序输出。       

            Map treeMap = new TreeMap(hashMap);
            Set entrySet = treeMap.entrySet();
             Iterator iterator = entrySet.iterator();
             while (iterator.hasNext()) {
                 System.out.println(iterator.next());
            }
         }
     }
    摘自   --------------------

    作者:wangtongxiao
    来源:CSDN
    原文:https://blog.csdn.net/wangtongxiao/article/details/1646630?utm_source=copy

    }

  • 相关阅读:
    C++笔记(1)----此运算符函数的参数太多
    算法学习(6)----整数转换为格雷码
    算法学习(5)----二叉树前序、中序、后序遍历互相转换
    算法学习(4)----汉诺塔递归算法和非递归算法
    算法学习(3)----求数组中大小最接近的两个元素的差
    算法学习(2)----丢番图方程
    9.11 Django视图 view和路由
    9.11 Django关于母版语言的灵活用法
    9.10Django模板
    9.9Dajngo MTV
  • 原文地址:https://www.cnblogs.com/sengzhao666/p/9775848.html
Copyright © 2011-2022 走看看