`
128kj
  • 浏览: 604253 次
  • 来自: ...
社区版块
存档分类
最新评论

字典树练习 POJ 1056

阅读更多
   Trie树提供给了一种能够在字符串的长度n时间内判断出来是否在已有集合中已经存在这个字符串了。POJ 1056是判断前缀码的问题。如果所有字符串都不是其他的字符串的前缀的话,那么就是可以直接编码的。

POJ 1056题目大意:
   给你几个二进制代码,如果有其中一个代码是另一个的前缀,输出is not immediately decodable,反之,输出immediately decodable。

样例:
Sample Input

01
10
0010
0000
9
01
10
010
0000
9

Sample Output

Set 1 is immediately decodable
Set 2 is not immediately decodable

import java.util.Scanner;
class Trie{
    class Node{//字典树节点
        Node nxt[]=new Node[10];//儿子节点
        boolean end=false;//是否是一个二进制代码的最后一个节点
        int count=0;//此节点上通过的字符(数字)个数
    }

    Node head=null;//字典树的根节点

     void clear(){
       head=new Node();
   }
    boolean insert(String str){//构造字典树
        Node p=head;
        for(int i=0;i< str.length();i++){
            p.count++;
            if(p.end) return false;//存在前缀
            if(p.nxt[str.charAt(i)-'0']==null)
                p.nxt[str.charAt(i)-'0']=new Node();
            p=p.nxt[str.charAt(i)-'0'];
        }
        p.count++;
        if(p.count>1) return false;//存在前缀
        p.end=true;
       return true;
    }
    
}
public class Main {

 
    public static void main(String[] args) {
        Trie tree=new Trie();
        Scanner in=new Scanner(System.in);
        int count=0;
        while(in.hasNext())
        {
             String s = in.next();  
             count++;  
             tree.clear();  
             int  flag=0;
            while (!s.equals("9")) {  
                if(!tree.insert(s)) flag++;  
                s = in.next();  
            }  
           if (flag!=0) {// 如果存在前缀,输出
              System.out.println("Set "+count+" is not immediately decodable");                          
            }  
            else {// 如果不存在前缀,输出   
             System.out.println("Set " +count+" is immediately decodable");  
            }  
        }  
    }
}


源码下载:
0
2
分享到:
评论

相关推荐

    POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类

    - **解释**:Trie树(字典树)是一种用于存储和检索字符串的高效数据结构。 ### 三、动态规划 #### 1. 基本动态规划 - **例题**:poj2488, poj3083, poj3009, poj1321, poj2251 - **解释**:基本动态规划问题通常...

    POJ 分类题目 txt文件

    KMP算法用于在文本中查找模式字符串,AC自动机则适用于构建字符串匹配的字典树。例如,题目poj1961和poj2406就是KMP算法的应用实例。 ### 7. 几何算法 几何算法涉及点、线、面的性质和关系,如凸包、最近点对、...

    poj题目分类,关于acm/icpc

    2. **高级数据结构**:哈希表、堆(最大堆和最小堆)、 Trie 字典树、B树和B+树等。 3. **字符串处理**:模式匹配(KMP、Boyer-Moore、Rabin-Karp等)、字符串操作(子串查找、字符串比较等)。 4. **数学应用**:...

    poj(百练)题目分类

    - 字典树(Trie)的构建与查询。 - 字符串哈希的应用。 #### 3. 图论题 图论问题是算法竞赛中的重要组成部分,包括图的遍历、最短路径、最小生成树等问题。 - **知识点**: - 图的表示方法:邻接矩阵、邻接表。 -...

    POJ分类题(按照算法分类)

    POJ(北京大学在线评测系统,PKU Judge Online)是一个非常著名的在线编程竞赛和练习平台,提供给编程爱好者和学习者大量的练习题,覆盖了从基础到高级的各种算法和数据结构知识。题目按照算法分类可以帮助学习者更...

    数据结构中poj题目算法分类——针对ACM竞赛

    - **字典树(Trie)**:用于字符串的高效查找和前缀匹配。 - **跳表**:一种随机化的数据结构,提供对有序集合的快速查找。 学习这些数据结构和算法,并通过实践poj题目来加深理解,是提高ACM竞赛能力的关键步骤...

    北大、杭电ACM试题分类

    字典树是一种树形结构,用于高效地存储和检索字符键值。 ### 动态规划 1. **背包问题** - POJ 2488, POJ 3083, POJ 3009, POJ 1321, POJ 2251 背包问题是动态规划中的经典问题之一,涉及到如何选择物品放入...

    算法训练方案详解

    - **示例题目**: 通常这类题目没有特定的POJ编号,但可以通过练习递归和分治的基本题目来掌握。 - **注意事项**: 避免无限递归,并合理设置递归的出口。 **4. 递推** - **定义**: 递推是一种利用前几项的结果来...

    ACM超强代码,不同的解法

    6. **数据结构**:如堆(优先队列)、平衡二叉搜索树(AVL、红黑树)、字典树(Trie)等,用于高效地进行查找、插入和删除操作。 7. **模拟**:对于某些问题,可能需要编写程序模拟特定过程,如游戏策略、物理过程...

    浙江大学ACM模板 计算几何,图论,数据结构,经典题的模板

    1.16.17 pku3668_GameofLine_N个点最多确定多少互不平行的直线(poj3668) 99 1.16.18 求凸多边形直径 100 2.组合 102 2.1 组合公式 102 2.2 排列组合生成 102 2.3 生成gray码 104 2.4 置换(polya) 104 2.5 字典序...

    ACM C语言 习题

    6. **Trie树(字典树)**:Trie树是字符串搜索的数据结构,可以高效地进行前缀查找。在题目中,用Trie树存储颜色字符串,每个节点的值可以是颜色的id,用于统计颜色的度(连接次数)。在Trie树中插入颜色时,自动...

    挑战程序设计竞赛(第2版)

    2.2.3 字典序最小问题 2.2.4 其他例题 2.3 记录结果再利用的“动态规划” 2.3.1 记忆化搜索与动态规划 2.3.2 进一步探讨递推关系 2.3.3 有关计数问题的DP 2.4 加工并存储数据的数据结构 2.4.1 树和二叉树 2.4.2 优先...

Global site tag (gtag.js) - Google Analytics