当前位置: 首页 > 知识库问答 >
问题:

获取辅音和元音所有组合的方法,该方法消耗足够的内存

谢英耀
2023-03-14

我要解决的问题是使用辅音和元音创建所有可能的单词,其中我有两个数组列表:

第一个 A = {a, e, i, o, u},仅由元音组成。第二个 B = {b, c, d, f, g, h, j, k, l, m, n, p, q, r, t, v, x, y, w, z}, 表现为辅音。

有了这两个,我需要使用辅音和元音生成所有可能的单词组合,例如:

01 - babebi, 02 - babebu ...

使用第三个数组,我需要使用以下数组列表在每个单词的末尾添加一个数值:C = {0,1,2,3,4,5,6,7},其中只能使用两种算法,例如:

< code>01 - babebi01,02 - babebi02,03 - babebi03...不重复数字,适用于所有单词。

为此,我有以下代码

通过这种方法,我使用辅音和元音生成所有单词:

我生成所有对,辅音和元音。

private void getRandomPairs(Values obj) {

        for (String vowel: obj.getVowels()) {
            for (String consonat: obj.getConsonants()) {
                pairsLetters.add(consonat + vowel);
            }
        }
}

然后将所有对保存在一个列表中,我生成所有单词。

private List<String> generateWord() {

        for (int i = 0; i < pairsLetters.size(); ++i){

            for (int j = 0; j < pairsLetters.size(); ++j){

                if (pairsLetters.get(i).equals(pairsLetters.get(j))) continue;

                for (int k = 0; k < pairsLetters.size(); ++k){

                    if ((pairsLetters.get(i).equals(pairsLetters.get(k))) || (pairsLetters.get(j).equals(pairsLetters.get(k)))) continue;

                    words.add(pairsLetters.get(i) + pairsLetters.get(j) + pairsLetters.get(k));

                }
            }
        }

        return words;
    }

使用另一种方法,我使用两种算法生成所有可能的数字组合,而不会重复:

private void generateNumbersPairs(Values obj) {

        for (int i = 0; i < obj.getNumbers().size(); ++i){

            for (int j = 0; j < obj.getNumbers().size(); ++j){

                if (obj.getNumbers().get(i).equals(obj.getNumbers().get(j))) continue;

                    pairNumbers.add(obj.getNumbers().get(j)+obj.getNumbers().get(i));
                    pairNumbers.add(obj.getNumbers().get(i)+obj.getNumbers().get(j));

            }
        }

    }

完成后,使用此方法生成所有以数字结尾的单词组合:

生成单词

private void getAllWords (List <String> words, List <String> pairNumbers) {
         for (int letter = 0; letter <6; ++ letter) {

             for (int number = 0; number <pairNumbers.size (); ++ number) {

                 if (words.equals (pairNumbers.get (number))) continue;

                 saveNewWord (words, pairNumbers, number);

             }
         }
     }

保存单词

     private void saveNewWord (List <String> pairs, List <String> pairNumbers, int number) {
         String word = String.join ("", words);

         allWords.add (word + pairNumbers.get (number));
     }

我的问题是,由于字数巨大,当我的方法经过' for '时,我不可能完成这样的计算,因为方法消耗的内存比我拥有的多。有什么方法可以改进这个算法吗?有人能帮我一下吗?

共有1个答案

公西天逸
2023-03-14

没有必要存储这些“单词”。

您有105个不同的音节,您可以将这些单词视为105个基数。根据您要执行的处理,您可以将音节编码为字节(然后,对于完整的枚举,每次“数字”超过104时,您都必须携带)或整数(并提供基本转换算法)。在这两种情况下,32位整数可以表示最多有四个音节的任何单词。

但同样,显式存储它们是没有用的。如果真的必须,请使用位数组。表示四个音节单词大约需要15.2 MB。

 类似资料:
  • 本文向大家介绍C语言获取消耗内存的方法,包括了C语言获取消耗内存的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C语言获取消耗内存的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的C语言程序设计有所帮助。

  • 本文向大家介绍使用WindowsAPI获取录音音频的方法,包括了使用WindowsAPI获取录音音频的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例介绍了使用winmm.h进行音频流的获取的方法,具体步骤如下: 一、首先需要包含以下引用对象 二、音频的获取需要调用7个函数 1. waveInGetNumDevs:返回系统中就绪的波形声音输入设备的数量 2. waveInGetDevCaps

  • 我试图找到一个单词中所有元音的所有可能组合。例如给定“你好”: 我编写了以下函数,它只接受每个元音,在每个元音处,它只会将其全部替换为元音并将每个版本添加到列表中。我正在尝试根据需要将其更改为排列,但它不起作用。我尝试在附加后插入元音(“”.join(string),arr),但这会导致无限递归。 有人有什么建议吗?

  • 本文向大家介绍JavaScript获取表单内所有元素值的方法,包括了JavaScript获取表单内所有元素值的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JavaScript获取表单内所有元素值的方法。分享给大家供大家参考。具体如下: 下面的JS代码可以遍历指定表单中的所有元素,并输出元素的值 希望本文所述对大家的javascript程序设计有所帮助。

  • 我需要将给定字符串中的每个元音替换为同一个元音,后跟字母“v”,再跟上一次元音。例如:<code>bad</code>应该变为<code>bavad</code>,<code>egg</code>变为<code>evegg</code>,<code>doge</code>dovogeve</code>,等等。练习明确指出需要使用<code>String完成。join()方法。到目前为止,我已经想出

  • 我做了一个程序来计算输入字符串中元音和辅音的数量: 当“y”本身是辅音时,它应该是元音。我在哪里陈述?