zoukankan      html  css  js  c++  java
  • 编程珠玑:变位词程序的实现

    这个程序的实现有助于压缩key的大小,使查找效率更高

    1.问题描述

         给定一本英语单词词典,请找出所有的变位词集。所谓的变位词是指,组成各个单词的字母完全相同,只是字母排列的顺序不同。

    2.解决思路

    编程珠玑的变位词程序要按照三个步骤来执行,其中前一个步骤程序的输出作为下一个步骤程序的输入:

    第一:程序标识单词,第二:程序排序标识后的文件,第三:程序将这些单词压缩为每个变位词类一行的形式

    下面是编程珠玑的举例,仅有6个单词的字典的处理过程

    由以上可看出需要三个程序的处理

    1).sign程序:假设输入单词的长度不超过100,对每个输入的单词依照字母进行排序,将结果输入这个单词所对应的”签名“

    2).sort程序:依照1)程序排序后的输出的“签名”,对其输出的结果排序,如上图.

    3).squash程序:将同一个变位词类中的各个单词放到同一行中

    3.代码实现

     sign程序:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define WORDMAX 100
    
    int charcomp(const void *x , const void *y)
    {  
        return *(char *)x - *(char *)y;
    }
    
    int main()
    {   
        char word[WORDMAX], sig[WORDMAX];
        while (scanf("%s", word) != EOF) 
        {
            strcpy(sig, word);
            qsort(sig, strlen(sig), sizeof(char), charcomp);
            printf("%s %s\n", sig, word);
        }
        return 0;
    }

    sort程序:可以调用系统排序的程序

    squash程序:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define WORDMAX 100
    
    int main()
    {   
        char word[WORDMAX], sig[WORDMAX], oldsig[WORDMAX];
        int linenum = 0;
        strcpy(oldsig, "");
        while (scanf("%s %s", sig, word) != EOF) 
        {
            if (strcmp(oldsig, sig) != 0 && linenum > 0)
                printf("\n");
            strcpy(oldsig, sig);
            linenum++;
            printf("%s ", word);
        }
        printf("\n");
        return 0;
    }

    4.使用命令运行

    编程珠玑上面通过下面的命令构建变位此列表

    sign < dictionary | sort | squash >gramlist.txt

    该命令将文件将文件dictionary输入到程序sign,连接sign的输出到sort,连接sort的输出至squash,并将squash的输出写入文件gramlist。

  • 相关阅读:
    Spring事务管理学习笔记
    写给初学前端工程师的一封信
    angularjs 自定义指令弹窗
    ng-if和ng-show的区别
    前端遇到的一些坑
    浏览器样式兼容总结
    百分比控制表格列宽,不起效
    ng-model 将时间戳转换为标准时间
    使用git和sourcetree提交代码的一些问题
    本地运行angularjs应用,提示出现跨域问题
  • 原文地址:https://www.cnblogs.com/biyeymyhjob/p/2636962.html
Copyright © 2011-2022 走看看