Go   发布时间:2022-04-09  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了数组 – Golang:进程耗时太长.实施拼写检查大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
http://play.golang.org/p/H5E0ExL85d

我用Go实现了一些Peter Norvig的拼写检查算法.

奇怪的是,FIRST THREE调用工作正确,给我所需的输出.

但从第二个方面来看,它说的是“过程花了太长时间”.

任何人都可以查看我的代码并告诉我出了什么问题?

这是可能出错的片段.

使用英文版的相同代码,一切都很完美.

UNICODE格式和边界根据语言而改变,因为英语每个字母@R_74_11262@个字节,在这种情况下亚洲语言包含每个字符3个字节.

这是尝试运行与英语完全相同的算法.
但这不起作用.

@R_706_10586@l_set := []String{}
for _,elem := range splits {

    if len(elem.str2) > 3 {
        //deletion
        @R_706_10586@l_set = append(@R_706_10586@l_set,elem.str1+elem.str2[3:])

        //replace
        for i:=0; i<len(koreanletter)/3; i++ {
            @R_706_10586@l_set = append(@R_706_10586@l_set,elem.str1+String(koreanletter[3*i:3*(i+1)])+elem.str2[3:])
        }

        //transpose
        if len(elem.str2) > 9 {
            @R_706_10586@l_set = append(@R_706_10586@l_set,elem.str1+String(elem.str2[3:6])+String(elem.str2[:3])+elem.str2[9:])
        }

    } else {
        //deletion
        @R_706_10586@l_set = append(@R_706_10586@l_set,elem.str1)
    }

    //insertion
    for _,c := range koreanletter {
        @R_706_10586@l_set = append(@R_706_10586@l_set,elem.str1+String(C)+elem.str2)
    }
    return RemoveDuplicateStringArrayForKorean(@R_706_10586@l_set)
}

英语的下面是.
这是完美的.

//Edits1 is to measure the distance between Strings.
func (model *Model) Edits1(word String) []String {
  const alphabet = "abcdefghijklmnopqrstuvwxyz"

  splits := []Pair{}
  for i := 0; i <= len(word); i++ {
    splits = append(splits,Pair{word[:i],word[i:]})
  }

  @R_706_10586@l_set := []String{}
  for _,elem := range splits {

    if len(elem.str2) > 0 {
      //deletion
      @R_706_10586@l_set = append(@R_706_10586@l_set,elem.str1+elem.str2[1:])

      //replace
      for _,c := range alphabet {
        @R_706_10586@l_set = append(@R_706_10586@l_set,elem.str1+String(C)+elem.str2[1:])
      }

      //transpose
      if len(elem.str2) > 1 {
        @R_706_10586@l_set = append(@R_706_10586@l_set,elem.str1+String(elem.str2[1])+String(elem.str2[0])+elem.str2[2:])
      }

    } else {
      //deletion
      @R_706_10586@l_set = append(@R_706_10586@l_set,c := range alphabet {
      @R_706_10586@l_set = append(@R_706_10586@l_set,elem.str1+String(C)+elem.str2)
    }
  }
  return RemoveDuplicateStringArrayLowerCase(@R_706_10586@l_set)
}

增加:有序的论点,现在我有三件事可行.

韩国通讯中没有遗漏任何字符.

反正我是否可以更具体地看到错误?我只是想不通.

解决方法

你的代码,似乎是你的KoreanKNownEdits2花了太长时间.在你的第四个例子中(一个失败),model.KoreanEdits1(input_word)的长度是28197,第一个模型的长度.KoreanEdits1(elem1)是23499,这使得大约需要662百万个案例.似乎该计划在第一批147,000之后失败,因为它需要太长时间( @L_673_14@).

任何不需要调用KoreanKNownEdits2的例子似乎都有效,所以我怀疑你应该重写这个函数以避免穷举搜索,或者至少将它限制在一个更合理的大小,如果你想在游乐场的时间限制内使用它.我没有足够的细节研究你的代码,以确保100%确定,但我怀疑西方字母的26个字母使其可以管理英文版,而扩展的韩文字母使你的输入的大小太大而不能无论每个字符编码的字节数,都在操场的时间限制内处理.

大佬总结

以上是大佬教程为你收集整理的数组 – Golang:进程耗时太长.实施拼写检查全部内容,希望文章能够帮你解决数组 – Golang:进程耗时太长.实施拼写检查所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。