zoukankan      html  css  js  c++  java
  • 离散化

    离散化

    离散化适用于数据的权值不重要,数据权值之间的相对位置及大小关系重要的一种优化方法。而离散化也有许多方法,其中各有好坏。

    1.排序解法(可处理重复元素)

    bool cmp(ha c, ha b)
    {
        return c.num < b.num;
    }
    int main() 
    {
    	scanf("%lld", &n);
    	for (int i = 1; i <= n; i++)
    		scanf("%lld", &data[i]), a[i].id = i, a[i].num = data[i];
    	sort(a + 1, a + 1 + n, cmp);
    	for (int i = 1, j = 0; i <= n; i++)
    	{	
    		if (a[i].num != a[i - 1].num || i == 1) j++;
    			data[a[i].id] = j;
    	}	
    }
    

    2.STL解法(可处理重复元素)

    scanf("%d", &n);
      for (int i = 1; i <= n; i++)
        scanf("%d", &a[i]), t[i] = a[i];
      sort(t + 1, t + n + 1);
      m = unique(t + 1, t + n + 1) - t - 1;
      for (int i = 1; i <= n; i++)
        a[i] = lower_bound(t + 1, t + m + 1, a[i]) - t;//a[i]=返回下标
    

    3.二维离散化(此二维离散化为坐标离散化,非数据离散化)

    	scanf("%d%d", &l, &w);
    	scanf("%d", &n);
    	for (int i = 1; i <= n; i++)
    		scanf("%d%d", &a[i].j, &a[i].i), a[i].id = i;
    	sort(a + 1, a + 1 + n, cmp1);
    	for (int i = 1; i <= n; i++)
    	{
    		if (a[i].i != a[i - 1].i || i == 1)
    			cnti++;
    		yi[a[i].id] = cnti;
    	}
    	sort(a + 1, a + 1 + n, cmp2);
    	for (int i = 1; i <= n; i++)
    	{
    		if (a[i].j != a[i - 1].j || i == 1) 
    			cntj++;
    		xj[a[i].id] = cntj;
    	}
    
  • 相关阅读:
    假丶依赖注入
    .NET Core 傻瓜式CSRedisCore缓存
    .NET Core MD5加密 32位和16位
    数据库所对应的函数
    使用通配符进行过滤
    WHERE 子句操作符
    不同的数据库查询行数的方式
    第一课了解SQL
    微服务架构综述
    三层应用与单块架构
  • 原文地址:https://www.cnblogs.com/liuwenyao/p/10994723.html
Copyright © 2011-2022 走看看