C# 预测序列的下一个元素

C# 预测序列的下一个元素,c#,C#,我不太清楚该怎么问这个问题,因此: 我有一个数据库,上面有一些单字符序列,比如ABAB、CA、CDABD等等。我正在尝试用C语言创建一些东西,在这里我会写一个字符,它会根据数据库中现有的序列建议我下一个字符。每次我再写一个字,建议就会相应地改变 我有一个连接到数据库的C应用程序,我可以检索数据,但我不知道该使用什么结构,最好的方法是什么,我迷路了 有人能给我一些建议吗?我一直在寻找,但并不容易 编辑:忘记了最重要的部分。如果输入与数据库中的任何序列都不匹配,则程序应建议最可能的序列,例如,如果用

我不太清楚该怎么问这个问题,因此:

我有一个数据库,上面有一些单字符序列,比如ABAB、CA、CDABD等等。我正在尝试用C语言创建一些东西,在这里我会写一个字符,它会根据数据库中现有的序列建议我下一个字符。每次我再写一个字,建议就会相应地改变

我有一个连接到数据库的C应用程序,我可以检索数据,但我不知道该使用什么结构,最好的方法是什么,我迷路了

有人能给我一些建议吗?我一直在寻找,但并不容易


编辑:忘记了最重要的部分。如果输入与数据库中的任何序列都不匹配,则程序应建议最可能的序列,例如,如果用户输入一个字符错误。不知道我是否说得够清楚。

关于用户界面等问题,您的问题中没有太多细节,但这里有一个方法可以接受搜索字符串并将结果作为数据集返回。这符合

它可以返回所有数据,我稍后会处理它们。输入将 几乎总是有一组更大的字符,结果将是 最多两三个

评论中的标准

using System.Configuration;
using System.Data;
using System.Data.SqlClient;

private DataSet GetSuggestions(string searchTerm)
{
    DataSet ds = new DataSet();

    using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["YourConnectionString"].ConnectionString))
    {
       SqlCommand com = new SqlCommand("SELECT TOP 2 YourColumn FROM YourTable WHERE YourField LIKE '@term%' ORDER BY SomeColumn", con);
       com.Parameters.AddWithValue("term", searchTerm);

        con.Open();
        SqlDataAdapter da = new SqlDataAdapter(com);
        da.Fill(ds);
        con.Close();

        return ds;
    }
 }

这项有趣的任务让我想到了解决建议部分的酷方法。我很确定你可以用一些图论来解释,但是我已经忘记了大部分,我真的记不清你能用什么了

我当时考虑的是一个n维的位数组,其中n是数据库中最长字符串的长度。然后每个维度都有一个所需字符集+1的长度,稍后将解释。然后在该空间中构造数据库的映射,以便数组的每个维度都是给定单词中的某个位置。如果字符串长度比n短,则在所有剩余维度中使用0作为索引,基本上表示3个字母在4个维度中没有映射-这是长度的+1。顺便说一句,您甚至可以很容易地发现,在更高维度中会出现结果,这比您当前使用的“预测下一个字母”功能的结果要高

如果您停止添加更多字母,那么找到最佳建议的任务将是遍历所有维度,并检查您需要更改的最小维度索引数量,以找到命中率


我很确定这是一个缓慢且需要内存的过程,你可以把这个想法归结为比我的简单例子更紧凑的结构。基本上是一本字典,只是检查你需要改变多少字母才能找到一个热门,这基本上是相同的想法,但我喜欢在高维空间中思考

建议背后的逻辑是什么?如果我有ABBA、abbbaaaa和类型A,建议使用哪种记录?@SEarle1986它可以返回所有记录,我稍后会处理它们。输入几乎总是一个较大的字符集,结果在max2或3个,所以您基本上是从序列中查找选择值,其中的值像“a%”?@rene请检查我的编辑@tiago32:你能不能拒绝让他们输入一个序列无效的字母?ie将其视为验证练习而不是纠错练习?感谢您的回答,但请参阅我对该问题的编辑!同样,考虑到ABBA、abbbaaaa和用户类型B,您如何定义哪种可能性最大?