スウィフトトライ:は、私はこのようになりますトライデータ構造を構築したレーベンシュタイン距離の検索
struct Trie<Element : Hashable> : Equatable {
private var children: [Element: Trie<Element>]
private var endHere: Bool
}
がUITextField
からの入力に自動補正操作を実行します。
/**
Private insert function. Inserts an elements into a trie using a sequences' generator.
- parameter g: `GeneratorType`.
*/
private mutating func insert<G: GeneratorType where G.Element == Element>(g: G) {
var gen = g
if let head = gen.next() {
if case nil = children[head]?.insert(gen) {
children[head] = Trie(g: gen)
}
} else {
endHere = true
}
}
/**
Insert elements into the trie.
- parameter seq: Sequence of elements.
*/
mutating func insert<S: SequenceType where S.Generator.Element == Element>(seq: S) {
insert(seq.generate())
}
必要イニシャライザ:私はトライをそのような挿入物として、様々な機能が得られた
/**
Create an empty trie.
*/
init() {
children = [:]
endHere = false
}
/**
Initialize a trie with a generator.
- parameter g: `GeneratorType`.
*/
private init<G: GeneratorType where G.Element == Element>(g: G) {
var gen = g
if let head = gen.next() {
(children, endHere) = ([head:Trie(g: gen)], false)
} else {
(children, endHere) = ([:], true)
}
}
/**
Construct from an arbitrary sequence of sequences with elements of type `Element`.
- parameter s: Sequence of sequences.
*/
init<S: SequenceType, Inner: SequenceType where S.Generator.Element == Inner, Inner.Generator.Element == Element>(_ s: S) {
self.init()
s.forEach { insert($0) }
}
/**
Construct a trie from a sequence of elements.
- parameter s: Sequence.
*/
init <S: SequenceType where S.Generator.Element == Element>(_ s: S) {
self.init(g: s.generate())
}
を、私は要素を反復処理することができるようにSequenceType
にTrie
を適合しました。それが離れて元のクエリからだった
func search<S: SequenceType where S.Generator.Element == Element(s: S, maxDistance: Int = 0) -> [(S, Int)] {
}
が見つかり、最大距離:
は今、私はレーベンシュタイン距離の検索機能は次のようになり、検索を実装したいですこれは私の知識が少し欠けている場所です。私はどのように実際に私のトライで検索を実行し、挿入、削除、および置換コストを計算しながら一致したシーケンスのリストを構築するのか分からない。
ここをクリックしてください(以下のリンクが優れています):https://gist.github.com/bgreenlee/52d93a1d8fa1b8c1f38b – sschale
トライの分岐を再帰しながらその検索を適用するのはどうですか?それは主に私が執着しているものです。 – barndog