首页 > 其他分享 >「学习笔记」离散化

「学习笔记」离散化

时间:2023-08-20 15:23:44浏览次数:44  
标签:学习 20 int 化后 离散 笔记 数组 数据

一、离散化

介绍

照片要曾经说过:“你们这再优化,也比不过我离散化的速度。”

  可以看出离散化再一些题目中还是十分吃香的。百度百科上是这样解释离散化的:

离散化,把无限空间中有限的个体映射到有限的空间中去,以此提高算法的时空效率。
通俗的说,离散化是在不改变数据相对大小的条件下,对数据进行相应的缩小。例如:
原数据:{ \(1,999,100000,15\) };处理后:{ \(1,3,4,2\) };
原数据:{ \(100,200\) },{ \(20,50000\) },{ \(1,400\) };
处理后:{ \(3,4\) },{ \(2,6\) },{ $ 1,5$ };

  所以说,离散化是改变了数据的具体数值的,那么也就表明,离散化适用于不在乎数据的具体大小,只需利用数据间相对大小即可求解的情况。

  离散化又分为两种,第一种是重复的元素离散化后的数字还是相同的,第二种就是离散化后数字不同。

第一种

int a[20], b[20];

int main() {
    cin >> n;
    for (int i = 1; i <= n; i++)
        cin >> a[i], b[i]=a[i]; //原数组a[],离散化后的数组b[]
    sort(a + 1, a + 1 + n);
    int len = unique(a + 1, a + 1 + n) - a - 1;
    for (int i = 1; i <= n; i++)
        b[i] = lower_bound(a + 1, a + len + 1, b[i]) - a;
    for (int i = 1; i <= n; i++)
        cout << b[i] << ' ';
    return 0;
}
/*
输入:
5
1114 555 34789 22456 114514
输出:
2 1 4 3 5
*/

第二种

  第二种就比较简单了,就是利用结构体排序,排完后直接存到离散化后的数组里即可:

struct node {
    int val, id;
    friend bool operator <(node x1, node  x2) {
        return x1.val < x2.val; //根据需要来判断是大根堆还是小根堆
    }
}
a[20];

int n;

int b[20];

int main() {
    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> a[i].val;
        a[i].id = i;
    }
    sort(a + 1, a + 1 + n);
    for (int i = 1; i <= n; i++)
        b[a[i].id] = i;
    for (int i = 1; i <= n; i++)
        cout << b[i] << ' ';
    return 0;
}
/*
输入:
5
114 114 33 514 1919810
输出:
2 3 1 4 5 
*/

以上就是离散化的两种实现方式,一定要仔细观察代码片段中的各个细节,发现其中的精髓。
…………
我才不会告诉你数组有b20

标签:学习,20,int,化后,离散,笔记,数组,数据
From: https://www.cnblogs.com/Aewrxuk/p/17644035.html

相关文章

  • 「学习笔记」归并排序
    关于归并排序,百度百科是这样定义的:归并排序是建立在归并操作上的一种有效,稳定的排序算法,该算法是采用分治法(DivideandConquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路......
  • Java学习笔记(十五)
    第九章 多线程9.1 多线程这里只是讲一下多线程基础,后面Java高级会讲juc、多线程高级等1、什么是多线程?同一个程序同时做多个事情。程序:为了完成某个任务,功能,而选择一种编程语言(例如:Java)编写的一组指令的集合。进程:当程序启动时,操作系统会给这个程序分配一块独立的内存空间,以及......
  • 无涯教程-TensorFlow - 多层感知器学习
    多层感知器定义了人工神经网络最复杂的体系结构,多层感知器学习的示意图如下所示-MLP网络通常用于监督学习格式,用于MLP网络的典型学习算法也称为反向传播算法。现在,无涯教程将重点介绍针对图像分类问题的MLP实现。#导入MINST数据fromtensorflow.examples.Learnfk.mnistim......
  • 蓝桥杯Web笔记
    一、node.js1、概念(1)Node.js是一个免费的、开源的、跨平台的JavaScript运行时环境,不是一门语言,也不是一个框架、库,而是一个JavaScript的运行环境。让JavaScript脱离了浏览器,能够允许开发人员在浏览器之外编写命令行工具和服务器端脚本例如:我们常关注的浏览器的兼容性,PC端和手机......
  • FEMU模拟器学习笔记
     QEMU参数解析  QEMU的main函数进来后,首先要进行参数解析。一个启动模拟器的命令行如下:x86_64-softmmu/qemu-system-x86_64-name"FEMU-ZNSSD-VM"-enable-kvm-cpuhost-smp2-m4G-devicevirtio-scsi-pci,id=scsi0-devicescsi-hd,drive=hd0-drivefile=/home......
  • 【深度学习 | CNN】“深入解析卷积神经网络与反卷积:从生活案例到原理的全面指南” (从
    ......
  • 【刷题笔记】26. Remove Duplicates from Sorted Array
    题目Givenasortedarraynums,removetheduplicatesin-placesuchthateachelementappearonlyonceandreturnthenewlength.Donotallocateextraspaceforanotherarray,youmustdothisbymodifyingtheinputarrayin-placewithO(1)extramemory.E......
  • 拥抱数据变革:知识引导的机器学习
    机器学习(ML)在大规模数据可用的许多应用中的成功,导致了人们对科学学科中类似成就的期望越来越高。数据科学的使用在涉及尚未完全理解的过程的科学问题中尤其有希望。然而,纯粹用数据驱动的方法来建模物理过程可能会有问题。例如,它可以创建一个复杂的模型,它既不能超越训练它的数据,......
  • 一文了解机器学习中分类和回归的差异
    前言分类和回归是数据挖掘和机器学习中常见的两个主要预测问题。分类算法分类算法是拟合一个模型或函数的过程,该模型或函数有助于将数据分为多个类别,即离散值。在分类中,根据输入中给定的一些参数,数据被分类到不同的标签下。在分类任务中,我们应该使用独立特征来预测离散的目......
  • 贪心,构造学习笔记
    贪心构造不会黄题绿题懵逼横批:依托答辩\(\text{CF1764C}\)题目描述有一些点,每一个点有一个点权\(a_i\)。你可以在任意点之间连边,最终的图需要满足不存在\(a,b,c\)满足\(a_a\leqslanta_b\leqslanta_c\)并且\(ab,bc\)之间有连边。思路点拨我们连出来的图一定可以......