2017-12-28 53 views
1

내가 필요한 것은 단어가 들어있는 배열 2의 배열 1에서 구를 찾는 것입니다. 배열 하나에 [ "Margaret is a girl"이 포함되어 있다고합시다. "사랑한다", "감자"; "수영하다 (Swim)"], 또 다른 단어는 배열에 누설되는 단어의 무작위 텍스트입니다. 구문 (단어의 순서)과 단어를 효율적으로 검사하는 방법은 무엇입니까? 구식 방식으로 생각하면 타이밍 문제가 될 것입니다.단어 배열에서 특정 구문을 효율적으로 검색하는 방법은 무엇입니까?

+5

무엇을 시도 했습니까? 특히 구체적으로 무엇을 고민하고 있습니까? –

+0

FOR 루프를 사용하여이 문제를 정렬하고 동일한 배열을 여러 번 통과하려고 시도했습니다 ... 필요한 시간을 단축하기 위해이를 향상시키고 싶습니다 –

+0

문제는 사소하지 않고 사소한 해결책이 필요합니다. 최적의 성능이 필요합니다. 여러 문자열에 대한 큰 텍스트 검색은 [접두어 트리] (https://en.wikipedia.org/wiki/Trie) (일명 * 시도 *)를 사용하여 효율적으로 구현할 수 있습니다. –

답변

2

당신은 for 루프로 효율적에 대한 것입니다 그들은 같은 길이의 (비)와 일치하는 결과가 발견 될 때 단락 회로 것 __.exists 또는 __.forall 기능을 사용하는 경우 :

let arr1 = [| "Margaret is a girl"; "Loves";"Potato"; "Swim" |] 
let arr2 = [| "Margaret"; "is"; "a"; "girl" |] 

let ``can be built from`` words phrase = 
    phrase 
    |> String.split ' ' 
    |> Array.forall (fun word -> words |> Array.contains word) 

let buildablePhrases = arr1 |> Array.filter (``can be built from`` arr2) 

배열 인 경우를 거대하고 위의 코드는 여전히 너무 느립니다. 중복 제거, 가장 빈번한 검색 등의 최적화 최적화를 시작해야 할 것입니다. 어떤 최적화가 사용자가 처리하는 데이터에 따라 좌우 되는가?

+0

고마워, 나는 내 코드에 당신의 생각을 구현하려고합니다! –