0
"Canacee"는 "administrate"보다 알파벳순으로 평가되는 것보다 평가됩니다. 그러나 문자열 배열을 검색하는 이진 검색 알고리즘을 개발 중입니다. 왜 이런 일이 일어나는 지 아는 사람이 있습니까? 내 코드 :ruby에서 사전 순으로 문자열 비교 비교
class Array
def binary_search(val, low=0, high=(length - 1))
return false if high < low
mid = (low + high)/2
midvalue = self[mid].downcase.strip
value = self[mid] <=> val
printf "%s \t %s \t %d \t %d\n", midvalue, val, mid, value
case
when value==0 then return true
when value > 0 then binary_search(val, low, mid-1)
when value < 0 then binary_search(val, mid+1, high)
end
end
end
path = ARGV.length > 0 ? ARGV[0] : '/words'
entries = File.read(path).split("\n")
if entries.binary_search("administrate")
printf "yes"
else
printf "no"
end
는 그러나, 나는 단어 파일에 단어 "[관리]"를 찾을 수 없습니다입니다.
mogitocia administrate 117467 1 dysoxidation administrate 58733 1 canacee administrate 29366 -1 counterdistinction administrate 44049 1 citification administrate 36707 1 cetomorphic administrate 33036 1 castellanship administrate 31201 1 carboxylase administrate 30283 1 capelet administrate 29824 1 cankery administrate 29595 1 candied administrate 29480 1 cancelation administrate 29423 1 canalling administrate 29394 1 canalage administrate 29380 1 canadine administrate 29373 1 canadian administrate 29369 -1 canadianization administrate 29371 -1 canadianize administrate 29372 -1
입력 사항도 입력해야합니다. –
또한 해시를 사용할 수있는 경우 배열에서 이진 검색을 사용하지 마십시오. 해시가 항상 이길 것입니다. –
또한, 루비 2.0에는 배열에 대한 바이너리 검색 방법이 내장되어 있다는 것을 알고 싶을 것이다.'ary.bsearch {| x | "administrate"<=> x}' – pje