首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >控制堆栈溢出的技术?

控制堆栈溢出的技术?
EN

Stack Overflow用户
提问于 2011-08-20 19:48:32
回答 2查看 97关注 0票数 2

基本上,我的程序将尝试生成所有可能的小写5个字母单词的列表.包括所有显然不是真正单词的组合,如jshcc或mmdzq。

我是通过大量调用函数来做到这一点的,这个函数是一个词起作用的。

但是这太过分了,我得到了一个堆栈溢出错误。

怎么会有人来控制呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-20 19:51:55

基本上,从递归转换为迭代。通常,这涉及到将Stack<T>创建为一个“逻辑”堆栈,或者类似的东西。

然而,我希望有一种方法,生成所有可能的5个字母单词的列表,每个字母只有一个大约5深的堆栈。每个堆栈级别负责一个字母级别--因此堆栈的“顶部”将遍历每个可能的最后一个字母;下一个堆栈帧将遍历每一个可能的第四个字母,递归地调用该方法来遍历所有可能的最后字母等等。类似这样的内容(C#代码,但希望您能够理解它并将其应用于VB):

代码语言:javascript
复制
const string Letters = "abcdefghijklmnopqrstuvwxyz";

public static List<string> GenerateValidWords(int length)
{
    List<string> words = new List<string>();
    GenerateValidWords(0, new char[length], words);
    return words;
}

private static void GenerateValidWords(int depth, char[] current,
                                       List<string> words)
{
    foreach (char letter in letters)
    {
        current[depth] = letter;
        if (depth == current.Length - 1)
        {
            string word = new string(current);
            if (IsValid(word))
            {
                words.Add(word);
            }
        }
        else
        {
            GenerateValidWords(depth + 1, current, words);
        }
    }
}

如果你没有任何过滤功能,那就会产生11,881,376个单词--每个字24字节(在x86上)大约285 it -再加上列表的所有空间等等。这不应该扼杀一台合适的大机器,但它是相当大的内存。你确定你需要这些吗?

票数 5
EN

Stack Overflow用户

发布于 2011-08-21 00:40:56

作为一个简单的解决方案,我将使用具有多个循环的迭代方法来生成以下单词:

代码语言:javascript
复制
Dim words As New List(Of String)

Dim first As Integer = Asc("a")
Dim last As Integer = Asc("z")

For one As Integer = first To last
    For two As Integer = first To last
        For three As Integer = first To last
            For four As Integer = first To last
                For five As Integer = first To last
                    words.Add(Chr(one) & Chr(two) & Chr(three) & Chr(four) & Chr(five))
                Next
            Next
        Next
    Next
Next

MsgBox(words.Count)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7134246

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档