func: static void find_best_state(uint8_t best_state[256][256], const uint8_t one_state[256]){
  
      int i,j,k,m;
  
      double l2tab[256];
  
  
  
      for(i=1; i<256; i++)
  
          l2tab[i]= log2(i/256.0);
  
  
  
      for(i=0; i<256; i++){
  
          double best_len[256];
  
          double p= i/256.0;
  
  
  
          for(j=0; j<256; j++)
  
              best_len[j]= 1<<30;
  
  
  
          for(j=FFMAX(i-10,1); j<FFMIN(i+11,256); j++){
  
              double occ[256]={0};
  
              double len=0;
  
              occ[j]=1.0;
  
              for(k=0; k<256; k++){
  
                  double newocc[256]={0};
  
                  for(m=0; m<256; m++){
  
                      if(occ[m]){
  
                          len -=occ[m]*(     p *l2tab[    m]
  
                                        + (1-p)*l2tab[256-m]);
  
                      }
  
                  }
  
                  if(len < best_len[k]){
  
                      best_len[k]= len;
  
                      best_state[i][k]= j;
  
                  }
  
                  for(m=0; m<256; m++){
  
                      if(occ[m]){
  
                          newocc[    one_state[    m]] += occ[m]*   p ;
  
                          newocc[256-one_state[256-m]] += occ[m]*(1-p);
  
                      }
  
                  }
  
                  memcpy(occ, newocc, sizeof(occ));
  
              }
  
          }
  
      }
  
  }
  