[문자열] 우아한 폭력 - 문자열에 큰 문제 선고 해시를

  무거운 브러시 제목 / 게임을 선고 할 때 종종 문제가 발생,이 문제는 문자열에 무거운 문장에 대해 이야기하는 것입니다.

 

해시는 무엇입니까 ▎

  우리가 일반적으로 생각 중공업 문장? 샤오 총통이 먼저 버킷 종류라고 생각, 그것은 해시 방법이다 이런 종류의 사실, 해시는 더 적절한 배럴의 무리로 이해했다.

  15,411,356을 예를 들어, 현재 (즉 반복되지이다) 디지털 여러 총을 판단 할 수 있도록, 당신에게 숫자의 무리를 제공합니다. 해결하기 위해 아이디어를 해시하는 것은 이것이다 :

  

  버킷의 숫자를 넣어, 각 버킷은 숫자, 그들에 얼굴에 해당하는 수를 나타냅니다, 판단 여러 디지털 무언가로 변환 판사는 여러 배럴이있다.

  방법이 배럴을 유지하는 방법 : 그래서, 다음 문제에 대해 생각? 같은 ...... 배열 인덱스 배럴의 수를 표현하기 위해 절대적으로 불가능 반복의 양만큼이 배럴을 유지하기! 우리는 버킷까지의 숫자가 배열 요소에 대응하는 값이 무엇인지, 각 버킷 배열 첨자를 사용할 수있다. 예를 들어, 배열을 사용하여 이들 유지 버킷라고하는 [3] ++만큼 숫자 3에 직면했을 때, 그것에.

  사실, 이것은 해시, 그래서 더 생생한 배럴의 더미에 그 이해입니다.

 

해시 문자열에서 ▎

  여기를 참조하십시오, 당신이 원하는 것, 해시 문자열에 대해 얘기 할 게 없다? 진리가 아닌가? 당연하지! 그것에 대해 생각하는 방법을 문자열 배열이 첨자 저장하기? 배열 첨자 아, 정수!

  이 방법에서 그것은 매우 가볍고 넓은이며, 우리는 정수 처리에 문자열을 변환 할 수 있습니다!

  기억 하는가? Shihai을 배울 수있는 처음에 배운 ASCII 코드는, 우리는 정수 캐스트로 대체 될 수있다.

  그러나 문제는 다시, 어떻게 ASCII로 문자열을 대표하는? A는 예를 들면 65 ASCII 코드는 AB, B는 66 ASCII 코드이다.

  1) 용액 : AB 65 + 66 = 131으로 표현된다. 반대로 실시 예는 : BA가 다음과 같이 표현된다 (66) + 65 = 131, AB 및 BA가 동일하지 수 있고;

  뺄셈, 곱셈, 추가 사용과 같다 문헌 2), 값이 고유하지 도시

  3) 조립 : AB 그래서 정말 어떤 반례를 줄 수 없었다, 6566로 표시되어 있지만 디지털 값이 커질수록, 또한 그것은 6566 6 566 그것은 여부 돌아갈을 구분? 또는 6,56 6 그것? 문자열 같은 원래의 모습을 알고하지 않는 것 같습니다.

  당연히, 우리는이 문제가 쉽게 밴드 회전하지라고 생각합니다. 문제가 발생하지 발생 덜 밴드의 종류 걸릴까요? 우리는 사건이 특정 될 수로 등 27,233,19260817을하는 경향이있다. (예는 나중에 설명 할 것이다).

  때로는 오래 오래 부호의 범위를 벗어난 후, 그것을 어떻게 할까? 그래서 우리가 일반적으로 큰 소수 다이 방법 모듈을 사용합니다, 금형의 수는 문제의 데이터 크기를 볼 수는 얼마나이다.

  어떤 경우는 3 % 2 = 1.5 = 1 (비유가 일반적으로 너무 작은되지 계수) 2 %, 소위됩니다 다루는 모듈 번호와 두 숫자로, 경우에 발생 해시 충돌 때 이러한 충돌을 줄이기 위해 질문 않습니다.

 

▎ 예 - 해시 문자열 [템플릿]

제목 설명

언급 한 바와 같이, 문자열 N 합계의 다른 스트링의 요구 갯수 (문자열 숫자, 대문자와 소문자, 대소 문자를 포함하는 미 문자열의 i 번째의 길이) N의 주어진 스트링.

입력 및 출력 형식

입력 형식 :

 

첫 번째 행은 정수 N 포함 스트링 수있다.

다음 N 라인 문자열 제공된 문자열을 포함한다.

 

출력 형식 :

 

스트링의 서로 다른 수의 정수를 포함하는 출력 라인을 포함하는 방법.

 

샘플 입출력

입력 샘플 # 1 : 
5
알파벳
YYYY
알파벳
ABCC
12345
출력 샘플 # 1 : 
4

설명

시간의 제약 : 1000MS, 128M

데이터 규모 :

데이터의 30 % : N <= 10 Mi≈6, Mmax 순 <= 15;

데이터의 70 % : N <= 1000 Mi≈100, Mmax 순 <= 150

데이터의 100 % : N <= 10000 Mi≈1000, Mmax 순 <= 1,500

샘플 설명 :

제 샘플 스트링 (ABC)와 세 번째 문자열 (ABC)는 그 문자열 {AAAA, ABC, ABCC, 12345}의 세트를 구비하고, 동일하도록 네 개의 다른 캐릭터 총 .

   이 질문은 완전히 템플릿 제목입니다 직접 잘 생각을 설정합니다.

 

▎Code은 말보다 더 크게 말한다!

  말 수가 적은 사람이 직접 코드 (주의 사항 참조)했다

  

1 #INCLUDE <iostream>
 2 #INCLUDE <알고리즘>
 3  사용  스페이스 성병;
4  문자열 의; INT의 N; INT의 해시 [ 10000 ], 모드 = 19,270,817 , K = 30 , ANS = 1 ;
5  INT의 해시 ( 문자열 STR)
 6  {
 7          INT LEN = str.length ();
8          INT의 값 = 0 ;
도 9          에 대해 ( int로 I = 0 ; I <렌; 내가 ++ )
 10         * = 값 + K 값 (( INT ) STR [I] - 96 ); // 스위치 헥스 
11.          리턴 값; // 여기서 실제로 금형 볼 수 있지만 너무 대규모 데이터 
(12)이다  }
 13는  INT ) (주
 14  {
 15          CIN >> N-,
 16           ( INT I = 1. ; I <= N-; I ++는 )
 17.          {
 18                  CIN >> S가,
 . 19                  해쉬 [I]는 해시 (들) =; // 각 문자열 변환의 저장 후에 해시 값 
20이다          }
 (21)은          정렬 (해시 + . 1해시 + N- +는 1이다. ); // 정렬이 목적은 캐릭터와 동일한 해시 값을 제외하는 
22 인          를 들어 ( int로 I = 2 ; I <= N-; I는 ++ )
 (23)는          IF ! (해쉬 [I]는 해쉬 [= I- . (1) ]) ANS ++; // 해시 값이 다른 경우, 캐릭터가 같은 두 아니다 
24          COUT << ANS;
 25          반환  0 ;
 26이다 }

 

▎map은 무엇입니까?

  이 질문에 대한 큰 무기 --map이 말을하는 것입니다. 간단한 소개 :

  1) 헤더 : #INCLUDE <지도>

  2) 정의 :지도 <유형, 유형> 변수 이름;

       첫 번째 유형은 상기 타겟 어레이의 형태이며, 초 가변 타입의 값의 배열은

  3) 사용 : 어떤 배열 첨자가 배열로 이해 될 수있는 정의를지도,이 효과는 아이디어를 시작하는 지금 그 질문을했다 정확하게

  4) 밤나무 들어 예를 들어, 정수 배열 스트링들 배열 첨자이다 정의하면지도를 작성할 수 <문자열, INT> S;

  어떻게 그냥 질문을 할까? 직접 일반 해시 그것에 댓글을 작성하지 않습니다.

1 #INCLUDE <iostream>
 2 #INCLUDE <지도>
 3  사용  스페이스 성병;
4 지도 < 문자열 , INT > S; 문자열 STR [ 100000 ]; int로 N, ANS;
5  INT 주 ()
 6  {
 7      CIN >> N;
(8)      에 대해 ( int로 I = 1 ; i가 N = <; 내가 ++ )
 9      {
 10          CIN >> STR [I];
11          S [STR [I] = 1 ;
12      }
 13     위한 ( int로 I = 1 난 ++; 나는 <= N )
 14      {
 15          의 경우 (S [STR [I]] == 1 )
 16          {
 17              ++ ANS를 ;
18              S [STR [I] = 0 ;
19          }
 20      }
 21      COUT << ANS;
22      반환  0 ;
23 }

 

▎는 아니지만 전자의 방법으로지도 서 왜

  지도는 배열처럼, 사실, 우리는 단순히지도를 매핑이 매우 느립니다, 단순히 폭력 쿼리 시간 복잡도이 상상할 수있는, 그리고 때로는 AC의 대상이 될 수 있지만, 가끔 만날 수없는, 좋은 보인다 피사체의 시간 요구 사항, 그것은 정직 문자열에서 그것의 해시입니다.

 

추천

출처www.cnblogs.com/TFLS-gzr/p/10927097.html