모듈:고급 검색
Module:Exponential search이 모듈은 일반적인 지수 검색 알고리즘을 제공한다.이러한 종류의 검색은 어떤 종류의 정렬된 배열에서 키를 찾고자 할 때 유용할 수 있으며, 가능한 적은 수의 배열 요소를 확인하여 검색하고자 할 때 유용할 수 있다.여기에는 다음과 같은 상황이 포함될 수 있다.
- 보관 파일 집합에서 가장 높은 보관 파일 번호 모두 있는지 확인하지 않고 검색
- 각각에 대한 wikitext를 확장하지 않고도 frame.args에서 위치 인수 수를 찾는 것.
다음 중 하나라도 적용되는 경우 이 모듈을 사용하지 마십시오.
- 루아 길이 연산자를 사용하여 필요한 것을 찾을 수 있다.
- 어레이에 공백이 있는 경우. (즉, 최종 항목 이전의 모든 항목은
nil, 예:{'foo', 'bar', nil, 'baz'}.) 이 모듈을 희박한 배열에서 사용하려고 하면 잘못된 값이 나올 수 있다. - 당신의 어레이에는 약 10개의 아이템이 있다.이러한 어레이에 이 모듈을 사용할 수는 있지만, 대부분의 어레이 요소(아마도 일부는 두 번)에 액세스할 수 있으며, 코드는 단순히 a for loop을 사용하는 것보다 더 복잡할 것이다.
사용법
먼저 모듈을 로드하십시오.
국부적 expSearch = 요구하다('모듈:지수 검색') 다음 구문을 사용하여 expSearch 기능을 사용할 수 있다.
expSearch(테스트펑크, 초기화하다) 매개 변수:
- testFunc- 어레이에 대한 테스트 기능.이 함수는 양의 정수를 사용해야 한다.i그 첫 번째 매개 변수로서원소가 다음에 해당하는 경우i배열에 포함되지 않은 함수는 false 또는 nil을 반환해야 하며, 배열에 있는 경우 함수는 truthy 값(false 또는 nil 이외의 값)을 반환해야 한다.(iii)
- init- 의 초기 값i확인하다고급 사용자용.(선택사항)
expSearch가 가장 높은 값을 반환함itestFunk는 truthy였다.값이 truthy가 없으면 함수는 nil을 반환한다.
예
짐보의 대담 기록 보관소
사용자 대화:짐보 웨일즈는 유저 토크에 기록 보관소를 가지고 있다.짐보 웨일스/아카이브 1, 사용자 대화:짐보 웨일스/아카이브 2, ...가장 높은 보관 번호를 찾으려면 다음과 같은 코드를 사용하십시오.
국부적 expSearch = 요구하다('모듈:지수 검색') 국부적 최고아카이브 = expSearch(기능을 하다 (i) 국부적 기록 보관소 = '사용자 대화:짐보 웨일스/아카이브 ' .. i 돌아오다 mw.칭호를 붙이다.새로운(기록 보관소).존재한다 종지부를 찍다) 마을 펌프 보관소
위키백과:Billage pump (proposal)는 위키피디아에 오래된 문서들을 가지고 있다.마을 펌프(제안)/아카이브 A, 위키백과:마을 펌프(제안)/아카이브 B 등그들이 보관 Z에 들어간 후, 다음 보관소는 AA 보관이다.비록 이러한 아카이브들은 더 이상 업데이트되지 않지만, 시범적으로 우리는 이 모듈을 사용하여 가장 높은 것을 찾을 수 있다; 우리에게 필요한 것은 정수에서 해당하는 아카이브 이름으로 변환하는 기능이다.
국부적 expSearch = 요구하다('모듈:지수 검색') 국부적 기능을 하다 정수투알파(i) -- 이 기능은 1을 A로, 2를 B로, ... 26을 Z로, 27을 AA로, ... 국부적 되받아치다 = '' 하는 동안에 i > 0 하다 국부적 렘 = i % 26 만일 렘 == 0 그때 렘 = 26 종지부를 찍다 국부적 마를 뜨다 = 끈을 달다(렘 + 64) - 알파벳의 "rem"자 되받아치다 = 마를 뜨다 .. 되받아치다 i = (i - 렘) / 26 종지부를 찍다 돌아오다 되받아치다 종지부를 찍다 국부적 기능을 하다 정수토아치브(i) 돌아오다 '위키피디아:마을 펌프(제안)/아카이브 ' .. 정수투알파(i) 종지부를 찍다 국부적 최고인테거 = expSearch(기능을 하다 (i) 국부적 기록 보관소 = 정수토아치브(i) 돌아오다 mw.칭호를 붙이다.새로운(기록 보관소).존재한다 종지부를 찍다) 국부적 최고아카이브 = 정수토아치브(최고인테거)
-- 이 모듈은 일반적인 지수 검색 알고리즘을 제공한다. 국부적 체크타입 = 요구하다('libraryUtil').체크타입 국부적 마루를 깔다 = 수학을 하다. 국부적 기능을 하다 중간점(더 낮게, 상부의) 돌아오다 마루를 깔다(더 낮게 + (상부의 - 더 낮게) / 2) 종지부를 찍다 국부적 기능을 하다 샅샅이 뒤지다(테스트펑크, i, 더 낮게, 상부의) 만일 테스트펑크(i) 그때 만일 i + 1 == 상부의 그때 돌아오다 i 종지부를 찍다 더 낮게 = i 만일 상부의 그때 i = 중간점(더 낮게, 상부의) 다른 i = i * 2 종지부를 찍다 돌아오다 샅샅이 뒤지다(테스트펑크, i, 더 낮게, 상부의) 다른 상부의 = i i = 중간점(더 낮게, 상부의) 돌아오다 샅샅이 뒤지다(테스트펑크, i, 더 낮게, 상부의) 종지부를 찍다 종지부를 찍다 돌아오다 기능을 하다 (테스트펑크, 초기화하다) 체크타입('초보적 검색', 1, 테스트펑크, '기능') 체크타입('초보적 검색', 2, 초기화하다, '숫자', 진실의) 만일 초기화하다 그리고 (초기화하다 < 1 또는 초기화하다 ~= 마루를 깔다(초기화하다) 또는 초기화하다 == 수학.수학.) 그때 착오(문자열.format( "init 값 '%s'가 인수 #2 ~ "에서 탐지됨 .. "Exponential search"(초기 값은 양의 정수여야 함)", 토스트링(초기화하다) ), 2) 종지부를 찍다 초기화하다 = 초기화하다 또는 2 만일 아닌 테스트펑크(1) 그때 돌아오다 못을 박다 종지부를 찍다 돌아오다 샅샅이 뒤지다(테스트펑크, 초기화하다, 1, 못을 박다) 종지부를 찍다