단어 주파수를 계산하는 topk가 정말 빨리 배열하는 것보다 빠릅니까

  • 처음에 나는 topk 문제 더미의 정렬 효율이 더욱 높다고 생각했지만 (정말 어리석다) 아래의 코드 출력 시간차는 같다. 이것은 더미의 정렬이 topk 문제 더미의 정렬에 사용되는 시간과 같다는 것을 설명한다.
  • 분석: 이 현상을 분석하면 먼저 빠른 배열의 시간 복잡도는 O(n*log(n))이고 배열에 대한 정렬은 두 가지 과정으로 나뉜다. 첫 번째 과정은 축적 과정, 즉 아래 코드의 get 이다.kk() 함수의 첫 번째 순환은 잎 노드가 아닌 마지막 노드(즉 색인 n/2곳)부터 무더기를 조정해야 하기 때문에 시간 복잡도는 O(n/2*log(n))이다.두 번째 과정은 앞 k를 정렬하는 것이다. 이 부분의 시간 복잡도는 O(k*log(n))이기 때문에 정렬 계산 topk의 시간 복잡도는 O(n/2*log(n))+O(k*log(n))=O(n*log(n))이다.사실 빠른 줄과 같다.
  • 의 이해득실, 공사에서 우리는 보통 어떤 텍스트의 top-k를 빈번하게 계산해야 한다. 이때 모든 k가 무더기 정렬의 두 번째 과정을 다시 채택하면 시간 복잡도가 선형적으로 증가하고 한 번의 정렬보다 못하다. 앞으로 top를 원하는 만큼 top를 적게 해야 한다.그러나 nltk는 빠른 배열의 이런 방식으로 topk를 구하지 않았다
  • import math
    import nltk
    import jieba
    import collections
    import datetime
    #start end     heap   
    def shift(start,end,heap):
       per_head=start
       left_child_index=2*start+1
       max_index=left_child_index
       while max_index<=end:
           if max_index

    좋은 웹페이지 즐겨찾기