我不确定如何问这个,所以这里是:
我有一个数据库,其中包含一些单个字符序列,如ABAB,CA,CDABD等。我正在尝试用C#创建一些东西,我会写一个字符,它会根据数据库中的现有序列建议我下一个字符。每次我写一个字符时,建议会相应地改变。
我有一个C#应用程序连接到数据库,我可以检索数据,但我不知道使用什么结构,最好的方法是什么,我迷路了..
有人可以建议我使用这个吗?我一直在寻找,但这并不容易。
编辑:忘了最重要的部分。如果输入与数据库中的任何序列都不匹配,程序应该建议最可能的序列(例如,如果用户输入一个字符错误)。不知道我是否足够清楚......答案 0 :(得分:1)
有趣的任务让我想到了如何解决建议部分的“酷”方法。我很确定你可以使用一些图论,但是忘记了大部分,我真的不记得你能用到什么。
我当时想到的是一个n维的位数组,其中n是数据库中最长字符串的长度。然后每个维度都有所需字符集的长度(+1,稍后会解释)。然后在该空间中构建数据库的映射,以便数组的每个维度都在给定的“单词”中的某个位置。如果您的字符串比n短,则在所有剩余维度中使用0作为索引(基本上说3个字母没有4维映射) - 这是+1到长度btw。你甚至可以很容易地发现,有些结果的尺寸比你现在给出的“预测下一个字母”能力要高。
如果您停止添加更多字母,那么找到最佳建议的任务就是遍历所有维度,并检查您需要更改的最小金额维度索引,以找到“点击”。
我很确定这是一个缓慢且内存要求很高的AF,你可以将这个想法归结为比我天真的例子更紧凑的结构。 (基本上是一本字典,只是检查你需要改变多少字母以找到“点击”基本上是相同的想法)但我喜欢在高维空间思考。 :)
答案 1 :(得分:0)
关于用户界面等问题还有一些细节,但这里有一个接受搜索字符串并将结果作为DataSet返回的方法。这符合
它可以返回所有这些,我稍后会处理它们。输入将 几乎总是一组更大的字符,结果将是 最多两个或三个
评论中的标准
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;
}
}