[英]Best way of sorting a list of strings based on difference from a target string?
我需要根據列表中的字符串與目標字符串之間的差異對列表進行排序。
實現這種排序算法的最佳方法是什么?
我不太在意性能,但是收藏可能會很大(比如說有100萬頂)。
任何幫助表示贊賞!
我建議計算Levenshtein距離 ,然后簡單地按整數結果排序。 ( 魔術碼 )
public void Example()
{
string target = "target";
List<string> myStings = new List<string>();
myStings.Add("this");
myStings.Add("that");
myStrings = myStrings.OrderBy(each => Levenshtein(each, target)).ToList();
}
public int Levenshtein(string stringA, string stringB)
{
// Magic goes here
return 0;
}
如果沒有OrderBy,那么舊的skool 2.0家伙呢?
List<string> myStrings;
myStrings.Sort(LevenshteinCompare);
...
public class LevenshteinCompare: IComparer<string>
{
public int Compare(string x, string y)
{
// Magic goes here
}
}
實現這種排序算法的最佳方法是什么?
作為開玩笑的人,我建議使用quicksort的庫實現,並以到目標字符串的距離作為排序鍵。
這當然不是一個有用的答案。 為什么不? 因為您真正想知道的是“什么是字符串的良好差異度量?”
遺憾的是,對真正的疑問的答案是“取決於”。 這取決於您關心的距離的哪些屬性。
話雖如此,請閱讀Levenstein距離及其對琴弦的真實描述。
您可以修改基本算法,以使度量標准偏向於長期運行中出現的相同字符,方法是擺弄動態編程矩陣中不同步驟的權重。
您還可以使用Soundex算法,該算法說明哪些字符串聽起來相似(但最適合短字符串;我不知道您使用哪種輸入)。
如果字符串長度相等,則也可以使用漢明距離(計算字符串不同處的索引數)。 通過將(單方面)不存在的索引計算為總是不同,可以將其概括為某種事物 ,這會給您一些類似於Levenstein的事物(也許有點“排序”)。
簡短的版本:取決於。 我已經提供了一些建議,但是如果您不提供更多信息,那么我不能說這對您來說是個不錯的決定。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.