整数の離散化

1.離散化の概要:

一部のアルゴリズムの問​​題では、数値範囲が非常に大きくなります(0〜1 0 9 10 ^ 9など)。1 09ですが、その数は比較的少なく、たとえば1 0 5 10 ^ 5だけです。1 05、しかし私たちのプログラムでは、これらの値は下付き文字として使用する必要があり、これらの値の間の順序関係に依存し、それがいくらであっても関係ありません.1 0 9 10 ^ 9を開きます1 0せいぜい10 5 10 ^ 5しかないので、 9の配列は明らかに賢明ではありません。1 05データの場合、値がいくら大きくても、これらの数値を0〜10 5 10 ^ 5に一意にマッピングできます。1 05つのうち、開く必要があるのは1 0 5 10 ^ 5だけです。1 05の配列で十分であり、マッピングプロセスは離散化です。


2.手順:

 (1)去重
 (2)二分查找映射的数

3.コードテンプレート:
(1)重複排除

    vector<int>alls;//假设vector中存了需要离散化的所有数据
    sort(alls.begin(),alls.end());
    alls.erase(unique(alls.begin(),alls.end()),alls.end());

独自の機能

(2)二分探索

int find(int x)
{
    
    


    int l=0;r=alls.size()-1;
    while(l<r)
    {
    
    
        int mid=l+r>>1;
        if(alls[mid]>=x)r=mid;
        else l=mid+1;
    }
    return r;//return r+1表示映射以1开始
}

ここに画像の説明を挿入
                                                                                                                                       -ある科学の超電磁銃

おすすめ

転載: blog.csdn.net/jahup/article/details/112609493