文件里面存有1000条字符串,输入一段字符串,要求找出其中最匹配的一条字符串,请大家给个思路, 要求代码尽可能有效率,有100分哟~~
大家多提点子,分都有,谢谢!

解决方案 »

  1.   

    我觉得用全文索引里面的SOUNDEX函数更加高效
      

  2.   

    --相似度取决于你的相似算法。
    --效率的话,呵呵。用数据库实现这种对比算法,本身就没效率。
    IF object_id('tempdb..#temp') IS NOT NULL DROP TABLE #temp
    go
    CREATE TABLE #temp(id INT IDENTITY PRIMARY KEY, [name] NVARCHAR(MAX))
    INSERT #temp([name])
    SELECT '我的' UNION ALL
    SELECT '匹配度' UNION ALL
    SELECT '我配度大' UNION ALL
    SELECT '我1配2大3'
    goDECLARE @str NVARCHAR(100)
    SET @str = N'我的匹配度最大'SELECT m.id,n.NAME, m.匹配字符数
    FROM
    (
    SELECT id, 匹配字符数 = SUM(是否匹配) FROM
    (
    SELECT 
    a.id,
    name=SUBSTRING(a.[name], b.number, 1),
    是否匹配=(CASE WHEN CHARINDEX(SUBSTRING(a.[name], b.number, 1), @str) > 0 THEN 1 ELSE 0 END)
    FROM #temp a
    INNER JOIN master..spt_values b
    ON b.type = 'p' AND b.number BETWEEN 1 AND LEN(a.[name])
    ) t
    GROUP BY id
    ) m
    INNER JOIN #temp n
    ON m.id = n.id/*
    id NAME 匹配字符数
    1 我的 2
    2 匹配度 3
    3 我配度大 4
    4 我1配2大3 3
    */
      

  3.   

    看了下  SOUNDEX 只支持4字节啊,而且C++ 里好像没有这个函数
      

  4.   

    SELECT DIFFERENCE('Anothers', 'Brothers');
      GO这是联机丛书的例子你是想C++里面实现?
      

  5.   

    原来哪些啊。参考下面这个算法(我以前用过),优点:逻辑相对比较简单,效果确实是具有最大匹配率。
    http://www.blogjava.net/phyeas/archive/2009/01/10/250807.html
      

  6.   

    原来哪些啊。参考下面这个算法(我以前用过),优点:逻辑相对比较简单,效果确实是具有最大匹配率。
    http://www.blogjava.net/phyeas/archive/2009/01/10/250807.html哈哈  非常感谢,感觉很有用,我仔细看下!