찾다

 >  Q&A  >  본문

java - 如何提高大量的字符串比较速度

PHP中文网PHP中文网2807일 전1438

모든 응답(17)나는 대답할 것이다

  • 阿神

    阿神2017-04-18 10:01:45

    저는 알고리즘 바보이지만 사용 가능한 컴퓨팅 리소스가 있으므로 원래 아이디어(폭력적인 브레인리스 병렬 컴퓨팅 흐름)를 따르고 질문의 예를 수행하겠습니다.

    run.py

    으아악

    간단한 포인트 데이터 생성

    으아악

    글쎄, 10000 작동하는 candidates.txt1000000 bg_db.txt 작동하는
    를 만들고 실행하여 시간을 확인합니다.

    으아악

    주제의 실제 데이터는 수천만행candidates.txt이고 시간은 bg_db.txt
    16*1000/(60*24) = 11.11으로 단순 추정하면 11일입니다. 사용된 노드 구성
    으아악

    정말 시간이 오래 걸리고 최적화가 시급합니다

    회신하다
    0
  • 巴扎黑

    巴扎黑2017-04-18 10:01:45

    @무합지존의 아이디어를 바탕으로 두 배의 공백과 4비트를 사용하여 4가지 유형의 문자를 표현하면 일관성 없는 문자 번호에 대한 후속 검색을 단순화할 수 있습니다.

    회신하다
    0
  • 黄舟

    黄舟2017-04-18 10:01:45

    앉아서 마스터가 나타날 때까지 기다리세요

    회신하다
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-18 10:01:45

    아이디어는 다음과 같습니다.
    첫 번째: 예를 들어 4개의 서로 다른 데이터를 비교합니다.
    **TGACGGGTGACACCCA(문자열의 특정 4개 위치에서 문자 삭제), 문자 길이를 다음으로 변경합니다. 16, 완전히 동일한 문자열 일치
    맵 등을 사용하여 TGACGGGTGACACCCA를 키 값으로 저장하고, 차이점 4가지를 값으로 저장

    두 번째: 3개의 서로 다른 데이터 비교
    위 내용을 바탕으로 위의 값을 비교하여 길이가 3인 동일한 문자열을 비교합니다

    등등

    회신하다
    0
  • PHP中文网

    PHP中文网2017-04-18 10:01:45

    CUDA와 같은 병렬 컴퓨팅에 대해 배울 수 있습니다. 수많은 단순 연산을 반복하면 성능이 향상됩니다

    회신하다
    0
  • 怪我咯

    怪我咯2017-04-18 10:01:45

    으아악

    회신하다
    0
  • 黄舟

    黄舟2017-04-18 10:01:45

    4개의 문자를 00, 01, 10, 11로 단순화하는 아이디어를 제공하세요.
    비교할 때 XOR을 먼저 수행하여 동일하면 00이 되고, 동일하지 않으면 01, 10, 11이 됩니다.
    그런 다음 XOR 결과의 인접한 각 쌍에 대해 OR을 수행하면 00이 0이 되고 01, 10 또는 11이 1이 됩니다. 마지막으로 1의 수를 센다. 모두 비트 연산이므로 이론적으로는 매우 빠릅니다.

    근데 제가 C를 못 배워서 코드를 못 올리네요.

    회신하다
    0
  • 취소회신하다