일반 클래스 라이브러리 - 버그, 설명, 질문, 사용 기능 및 제안 사항 - 페이지 6

 
바실리 소콜로프 :

다른 단어가 같은 알파벳 문자로 시작하는 경우가 있습니다. 우리가 이전 사전에 "사과"라는 단어를 넣고 거기에 "응용 프로그램"을 넣으려고하면 아무 것도 나오지 않을 것입니다. 인덱스 0은 이미 사과라는 단어로 채워져 있습니다. 이 경우 해시 함수 충돌에 대해 이야기합니다. 해시 함수는 매우 간단합니다. 단어의 첫 번째 문자 수를 반환하므로 이 함수에서 충돌이 매우 자주 발생합니다. 같은 문자로 시작하는 다른 단어를 저장하기 위해 추가할 것입니다. 요소를 배열이 아닌 배열의 배열에 저장합니다. 그런 다음 인덱스 0에는 "apple"과 "application"이라는 두 단어가 포함된 또 다른 배열이 있습니다.

이제 우리 사전은 같은 문자로 시작하는 단어도 저장합니다. 그러나 동일한 첫 글자를 가진 단어에 대한 액세스 비용이 증가합니다. 이제 'application'이라는 단어가 사전에 있는지 여부를 이해하려면 'a'로 시작하는 모든 단어를 완전히 검색해야 하기 때문입니다. 단어가 한 문자만큼 다르더라도 해시 함수가 다른 숫자를 생성했다면 동일한 인덱스를 가진 단어를 반복할 확률은 0이 되는 경향이 있고 임의의 요소에 대한 액세스는 o(1) 가 되는 경향이 있습니다 . 이것이 바로 실제 사전에서 일어나는 일이며 거기에서 사용되는 함수는 충돌에 강하므로 이러한 컬렉션의 요소에 대한 액세스는 매우 빠르고 거의 열거할 필요가 없다고 말할 수 있습니다.

이 예에 대한 솔루션을 제공하려고 노력할 것입니다. 포인터가 없습니다. 조금 후에.
 

나는 최근에 그 주제에 관한 책을 읽었다. " Grocking 알고리즘 "이라고 합니다. 모든 것이 예와 함께 매우 명확하게 명시되어 있습니다.

 
바실리 소콜로프 :

다음 예제에서는 같은 문자로 시작하는 단어를 저장할 수 있도록 개선합니다.

모자 형태의 발보나 불필요한 존재 없이 간결하게 써달라는 큰 부탁.

예를 들어, 이

 bool Contains( string word)
{
   uchar index = ( uchar ) StringGetCharacter (word, 0 )- 97 ;
   return words[index] != NULL ;
}

훨씬 더 명확하게 쓸 수 있었다

 bool Contains( string word)
{
   return words[word[ 0 ]- 'a' ] != NULL ;
}


그럼에도 불구하고 MT4/5용 이 코드는 다른 방식으로 작동할 수 있습니다. MT4에서 배열은 NULL 값으로 초기화되며 MT5에서는 가비지일 수 있습니다.

 
fxsaber :

모자 형태의 발보나 불필요한 존재 없이 간결하게 써달라는 큰 부탁.

...


강력하게 반대합니다! 코드를 자세하게 작성하는 것이 바람직합니다. 모든 MQ 코드를 보십시오. 어디에나 "캡"이 있습니다. 이것이 표준입니다.


fxsaber :

...

그럼에도 불구하고 MT4/5용 이 코드는 다른 방식으로 작동할 수 있습니다. MT4에서 배열은 NULL 값으로 초기화되며 MT5에서는 가비지일 수 있습니다.


오래된 터미널은 어떻습니까? 게으르고 여전히 오래된 것에 앉아있는 사람 - 이것은 그의 개인적인 문제 일뿐입니다. 그런 게으름 때문에 커뮤니티가 느려져서는 안 됩니다.

 
블라디미르 카르푸토프 :

모든 MQ 코드를 보십시오. 어디에나 "캡"이 있습니다. 이것이 표준입니다.

용광로 표준에서 여기서 핵심은 코드의 50%를 차지하는 스타일이 아니라 본질이 중요합니다.

 
fxsaber :

용광로 표준에서 여기서 핵심은 코드의 50%를 차지하는 스타일이 아니라 본질이 중요합니다.


포럼의 주요 업무는 교육입니다. 따라서 코드는 최대한 표준에 가깝게 확장하고 이해할 수 있어야 합니다.

 
바실리 소콜로프 :

이것이 바로 실제 사전에서 일어나는 일이며 거기에서 사용되는 함수는 충돌에 강하므로 이러한 컬렉션의 요소에 대한 액세스는 매우 빠르고 거의 열거할 필요가 없다고 말할 수 있습니다.

저것들. 각 작업에 대해 사전(RAM)의 크기와 해시 함수(CPU)의 계산 복잡성 사이의 중간 지점을 찾아야 합니다.

 
블라디미르 카르푸토프 :

포럼의 주요 업무는 교육입니다. 따라서 코드를 확장하고 이해할 수 있어야 합니다.

충분 해.

최대한 기준에 가깝게.

자신의 모자를 쓸 수 있습니다. A100은 대문자 없이 SD로 수백 개의 보고서를 발행했습니다. 이것이 표준입니다! 틴셀이 아니라 본질이 중요하기 때문입니다.

 
해결책이 있습니다. 그러나 일시적으로 음모를 꾸미기 위해 여기에 실행 파일을 넣고 싶습니다. 또한 숙련된 사람들이 내 솔루션과 위의 저자가 제공한 솔루션의 성능을 비교할 것입니다. 무엇이 더 빨리 작동하는지 궁금합니다.
파일:
Dictionary.ex5  10 kb
 
피터 코노우 :
해결책이 있습니다. 그러나 일시적으로 음모를 꾸미기 위해 여기에 실행 파일을 넣고 싶습니다. 또한 숙련된 사람들이 내 솔루션과 위의 저자가 제공한 솔루션의 성능을 비교할 것입니다. 무엇이 더 빨리 작동하는지 궁금합니다.
실행 파일을 실행해야 합니다. 입력 필드 가 나타납니다. 다음으로 다른 단어를 입력할 수 있습니다. 일치하는 단어가 있으면 사전에 단어가 있다는 알림이 인쇄물을 통해 표시됩니다. 단어가 없으면 사전에 단어가 추가되었다는 알림이 표시됩니다.