아이디어는 다음과 같습니다. 첫 번째: 예를 들어 4개의 서로 다른 데이터를 비교합니다. **TGACGGGTGACACCCA(문자열의 특정 4개 위치에서 문자 삭제), 문자 길이를 다음으로 변경합니다. 16, 완전히 동일한 문자열 일치 맵 등을 사용하여 TGACGGGTGACACCCA를 키 값으로 저장하고, 차이점 4가지를 값으로 저장
두 번째: 3개의 서로 다른 데이터 비교 위 내용을 바탕으로 위의 값을 비교하여 길이가 3인 동일한 문자열을 비교합니다
4개의 문자를 00, 01, 10, 11로 단순화하는 아이디어를 제공하세요. 비교할 때 XOR을 먼저 수행하여 동일하면 00이 되고, 동일하지 않으면 01, 10, 11이 됩니다. 그런 다음 XOR 결과의 인접한 각 쌍에 대해 OR을 수행하면 00이 0이 되고 01, 10 또는 11이 1이 됩니다. 마지막으로 1의 수를 센다. 모두 비트 연산이므로 이론적으로는 매우 빠릅니다.
저는 알고리즘 바보이지만 사용 가능한 컴퓨팅 리소스가 있으므로 원래 아이디어(폭력적인 브레인리스 병렬 컴퓨팅 흐름)를 따르고 질문의 예를 수행하겠습니다.
으아악간단한 포인트 데이터 생성
으아악글쎄,
으아악10000
작동하는candidates.txt
과1000000
bg_db.txt
작동하는를 만들고 실행하여 시간을 확인합니다.
주제의 실제 데이터는 수천만행
정말 시간이 오래 걸리고 최적화가 시급합니다candidates.txt
이고 시간은bg_db.txt
16*1000/(60*24) = 11.11
으로 단순 추정하면 11일입니다. 사용된 노드 구성으아악
@무합지존의 아이디어를 바탕으로 두 배의 공백과 4비트를 사용하여 4가지 유형의 문자를 표현하면 일관성 없는 문자 번호에 대한 후속 검색을 단순화할 수 있습니다.
앉아서 마스터가 나타날 때까지 기다리세요
아이디어는 다음과 같습니다.
첫 번째: 예를 들어 4개의 서로 다른 데이터를 비교합니다.
**TGACGGGTGACACCCA(문자열의 특정 4개 위치에서 문자 삭제), 문자 길이를 다음으로 변경합니다. 16, 완전히 동일한 문자열 일치
맵 등을 사용하여 TGACGGGTGACACCCA를 키 값으로 저장하고, 차이점 4가지를 값으로 저장
두 번째: 3개의 서로 다른 데이터 비교
위 내용을 바탕으로 위의 값을 비교하여 길이가 3인 동일한 문자열을 비교합니다
등등
CUDA와 같은 병렬 컴퓨팅에 대해 배울 수 있습니다. 수많은 단순 연산을 반복하면 성능이 향상됩니다
으아악
4개의 문자를 00, 01, 10, 11로 단순화하는 아이디어를 제공하세요.
비교할 때 XOR을 먼저 수행하여 동일하면 00이 되고, 동일하지 않으면 01, 10, 11이 됩니다.
그런 다음 XOR 결과의 인접한 각 쌍에 대해 OR을 수행하면 00이 0이 되고 01, 10 또는 11이 1이 됩니다. 마지막으로 1의 수를 센다. 모두 비트 연산이므로 이론적으로는 매우 빠릅니다.
근데 제가 C를 못 배워서 코드를 못 올리네요.