【FB】

小肥的面经,小肥的代码:http://collabedit.com/gmysb

1. 开会的题目,问给一堆会议,每个会议一个开始时间,结束时间,问有没有 overlap

2. 如果这些会议有overlap 求最小需要多少房间

第二个解法简直是精典!

struct Meeting{
    double start;
    double end;
}

struct CompI{
    bool operator()(const Meeting& meet1, const Meeting meet2)
        return meet1.start < meet2.start;
}

bool CheckMeetOverlap(vector<Meeting>& meetings){
    int num = meetings.size();
    if (num<=1)
        return true;
        
    sort(meetings.begin(),meetings.end(),CompI);
    for(int i = 1; i< num; i++){
        if (meetings[i].start < meetings[i-1].end)
            return false;
    }
    return true;
}

//second question
struct MeetingTimePoint{
    double time;
    bool isStart;
    MeetingTimePoint(double time_input, bool isStart_input):time(time_input),isStart(isStart_input){};
}

struct CompII{
    bool operator()(const MeetingTimePoint& meeting1, const MeetingTimePoint& meeting2){
        return meeting1.time<meeting2.time;
    }
}

int minRoom(vector<Meeting>& meetings){
    int num = meetings.size();
    if (num<=1)
        return num;
    
    vector <MeetingTimePoint> meetingInfo; 
    for(int i = 0; i< num; i++){
        MeetingTimePoint current_start = MeetingTimePoint (meetings[i].start, true);
        MeetingTimePoint current_end = MeetingTimePoint (meetings[i].start, false);
        meetingInfo.push_back(current_start);
        meetingInfo.push_back(current_end);        
    }
    sort(meetingInfo.begin(),meetingInfo.end,CompII);
    int currentRoom = 0;
    int minRoom = 0;
    for(int i = 0; i<meetingInfo.size(); i++){
        if (meetingInfo[i].isStart == true)
            currentRoom++;
        else
            currentRoom--;
        minRoom = max(minRoom, currentRoom);
    }
    return minRoom;
}






基于数据驱动的 Koopman 算子的递归神经网络模型线性化,用于纳米定位系统的预测控制研究(Matlab代码实现)内容概要:本文围绕“基于数据驱动的 Koopman 算子的递归神经网络模型线性化,用于纳米定位系统的预测控制研究”展开,提出了一种结合数据驱动方法与Koopman算子理论的递归神经网络(RNN)模型线性化方法,旨在提升纳米定位系统的预测控制精度与动态响应能力。研究通过构建数据驱动的线性化模型,克服了传统非线性系统建模复杂、计算开销大的问题,并在Matlab平台上实现了完整的算法仿真与验证,展示了该方法在高精度定位控制中的有效性与实用性。; 适合人群:具备一定自动化、控制理论或机器学习背景的科研人员与工程技术人员,尤其是从事精密定位、智能控制、非线性系统建模与预测控制相关领域的研究生与研究人员。; 使用场景及目标:①应用于纳米级精密定位系统(如原子力显微镜、半导体制造设备)中的高性能预测控制;②为复杂非线性系统的数据驱动建模与线性化提供新思路;③结合深度学习与经典控制理论,推动智能控制算法的实际落地。; 阅读建议:建议读者结合Matlab代码实现部分,深入理解Koopman算子与RNN结合的建模范式,重点关注数据预处理、模型训练与控制系统集成等关键环节,并可通过替换实际系统数据进行迁移验证,以掌握该方法的核心思想与工程应用技巧。
10-28
Linux FB(Framebuffer)是 Linux 内核提供的一种图形设备接口,用于在系统中显示图形。 ### 结构定义 Linux FB 中定义了一些结构体来描述颜色相关信息,如 `struct fb_bitfield` 用于表示颜色位域。其中包含 `red`、`green`、`blue` 和 `transp`(透明度)等成员。例如 `struct fb_bitfield red;` 用于表示红色在帧缓冲内存中的位域信息,如果是真彩色模式,这些位域信息有具体含义,否则只有长度参数有意义 [^1]。 ### 参数说明 在 Ubuntu 18 系统中,编译并执行相关程序可以查看 FB 的参数。编译命令为 `gcc -o fb_settings_read fb_settings_read.c`,执行命令为 `sudo ./fb_settings_read`。执行结果会显示可变屏幕信息(var screeninfo)和固定屏幕信息(fix screeninfo)。可变屏幕信息包含分辨率(`xres`、`yres`)、虚拟分辨率(`xres_virtual`、`yres_virtual`)、偏移量(`xoffset`、`yoffset`)、每像素位数(`bits_per_pixel`)等;固定屏幕信息包含设备 ID(`id`)、内存长度(`smem_len`)等 [^2]。 ### 原理 以 CRT 显示器为例,其通过 3 个电子枪轰击磷粉来完成颜色显示。电子枪需要进行从左到右的水平扫描和从上至下的垂直扫描,改变电子枪的电压就能显示不同颜色。当电子枪完成一行扫描后重新回到下一行的开始,这一过程被称为“水平折回” [^3]。 ### 使用方法示例 以下是一个简单的使用 Linux FB 进行像素绘制的示例代码: ```c #include <stdio.h> #include <fcntl.h> #include <linux/fb.h> #include <sys/mman.h> #include <sys/ioctl.h> int main() { int fbfd = 0; struct fb_var_screeninfo vinfo; struct fb_fix_screeninfo finfo; long int screensize = 0; char *fbp = 0; // 打开帧缓冲设备文件 fbfd = open("/dev/fb0", O_RDWR); if (fbfd == -1) { perror("Error: cannot open framebuffer device"); return 1; } // 获取可变屏幕信息 if (ioctl(fbfd, FBIOGET_VSCREENINFO, &vinfo) == -1) { perror("Error reading variable information"); return 1; } // 获取固定屏幕信息 if (ioctl(fbfd, FBIOGET_FSCREENINFO, &finfo) == -1) { perror("Error reading fixed information"); return 1; } // 计算屏幕大小 screensize = vinfo.xres * vinfo.yres * vinfo.bits_per_pixel / 8; // 将帧缓冲内存映射到用户空间 fbp = (char *)mmap(0, screensize, PROT_READ | PROT_WRITE, MAP_SHARED, fbfd, 0); if ((int)fbp == -1) { perror("Error: failed to map framebuffer device to memory"); return 1; } // 在屏幕上绘制一个像素点 int x = 100; int y = 100; long int location = (x+vinfo.xoffset) * (vinfo.bits_per_pixel/8) + (y+vinfo.yoffset) * finfo.line_length; *(fbp + location) = 255; // 蓝色 *(fbp + location + 1) = 0; // 绿色 *(fbp + location + 2) = 0; // 红色 *(fbp + location + 3) = 0; // 透明度 // 解除内存映射 munmap(fbp, screensize); close(fbfd); return 0; } ``` ### 配置 Linux FB 的配置通常涉及修改 `/etc/fstab` 等文件,以及调整内核参数。例如,在某些情况下可以通过修改内核启动参数来指定使用的帧缓冲设备。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值