概述在Linux系统中,ls -l命令是我们日常使用最频繁的命令之一,它能够以长格式显示文件的详细信息。本文将深入解析ls -l的实现原理,并逐步讲解如何用C语言实现一个简化版的ls -l命令。
// 输出示例:-rw-rw-r-- 1 miao miao 4 9月 15 20:28 a.txt
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
#include <pwd.h>
#include <grp.h>
#include <time.h>
#include <string.h>
int main(int argc, char* argv[]){
if (argc < 2){
printf("%s filename\n", argv[0]);
return -1;
}
// 通过stat函数获取文件信息
st...
什么是字符串匹配
暴力解法
KMP算法
具体实现
补充:
KMP(Knuth-Morris-Pratt)算法是一种高效的字符串匹配算法,用于在一个主串中查找一个模式串的位置。它通过预处理模式串,避免了在匹配失败时重复比较已经匹配的部分,从而提高了匹配效率。
该算法在1977年被提出,取三位贡献者的姓名首字母组成算法名称。
什么是字符串匹配字符串匹配问题是计算机科学中的一个经典问题,其核心目标是在一个较长的文本串(Text)中查找是否存在一个或多个与给定模式串(Pattern)完全相同的子串。
例如:
文本串(T):"ABABDABACDABABCABAB"
模式串(P):"ABABCABAB"
那么模式串可以在文本串的索引11处匹配
暴力解法知道控制语句用法的人都知道,这个问题可以套两层循环来解决,从文本串的第1个字符开始,与模式串逐字符比对,如果发现不匹配,则从文本串的第2个字符开始重新比对,以此类推,该解法时间复杂度为$O(m*n)$,效率较低。
KMP算法KMP算法通过预处理模式串...
出于科研项目要求,我需要开发一个能个性化定制界面与功能的BLE手机上位机软件,在经过简单的调研后,主要有以下两种开发路径:
Android Studio
MIT APP Inventor
其中AS需要Java基础,且开发周期长;MIT APP Inventor图形化编程,20min可上手,于是我选择后者,最终也能达到我想要的效果。
选择建议如下:
选 Android Studio:如果你想成为专业开发者,或开发功能复杂、可发布的商业应用。
选 MIT App Inventor:如果你是学生,或只想快速做一个简单应用
于是在B站看了几个包浆的教学视频后,我开始上手制作,过程意外地顺利
首先,你需要明确你的APP要包含哪些模块
如下图所示,在登陆官网后,你可以把你需要的模块在侧边栏拖入主页面
依次描述我的思路
上图中组件1是BLE设备搜索与断联按钮
2是BLE连接状态,3是波形图,4是实时数值,5是清空按钮;
当然也有后端组件Ⅰ,是BLE模块,这个在官网没有,需要下载拓展包,https://iot.appinventor.mit.edu/ 这个网站里可以找...
MFCC的核心思想是模仿人耳对声音的非线性感知特性(人耳对低频声音比高频声音更敏感),从而更好地表示语音特征。其流程可以概括为以下步骤:
分帧
目的:语音信号是非平稳信号,其特性是随时间变化的。但在一个非常短的时间段内,可以近似认为是平稳的。分帧就是将长信号切分成许多短片段来分析。
操作:使用一个固定长度的窗口以一定的帧移沿着信号滑动并截取数据。
加窗
目的:减少每一帧信号在其两端处的频谱泄漏,使帧两端平滑地衰减到零,从而降低后续傅里叶变换后旁瓣的强度。
操作:将每一帧信号乘上一个窗函数。
傅里叶变换和功率谱计算
目的:将信号从时域转换到频域。
操作:
对每一帧加窗后的信号进行FFT,得到复数频谱。
然后计算其功率谱(取模的平方)。P = |FFT(frame)|² / N (N是FFT点数)
梅尔滤波器组滤波
目的:模拟人耳的听觉特性。人耳对于不同频率的感知能力是不同的,在低频区域区分度高,在高频区域区分度低。梅尔刻度是一种将实际频率转换为更符合人耳感知的频率刻度。
操作:
定义一组三角带通滤波器(梅尔滤波器组),这些滤波器在梅尔刻度上是等宽的,但在线性频率刻度上是不...
1. 数学
2. 数组
3. 链表
4. 哈希散列
5. 栈与队列
6. 类与OOP应用
7. 二叉树
8. 回溯
9. 贪心
10. 动态规划
1. 数学1.1 基础有一天, 小明收到一张奇怪的信, 信上要小明计算出给定数各个位上数字为偶数的和。例如:5548,结果为12,等于 4 + 8 。小明很苦恼,想请你帮忙解决这个问题
#include <iostream>
using namespace std;
int main(){
int n, sum = 0;
//input
while(cin >> n){
// calculation
while (n != 0){
int res = 0;
res = n % 10;
if ((res % 2) == 0) sum += res;
n = (n - res) / 10;
}
cout << sum <<...
目录:
Ch0 数字图像的概念
图像分类:模拟图像与数字图像
数字图像处理的基本特点
数字图像处理的基本内容
Ch1 图像技术基础
图像与像素
数字化过程
像素的属性
像素间的基本关系
像素间的距离
印刷品中的半调输出技术
图像坐标变换
图像的质量
图像储存的数据结构
图像文件格式
*光盘读取原理
Ch2 空间域图像增强
灰度映射
图像求反(负片)
幂次变换
动态范围压缩
阶梯量化
灰度切分/阈值切分
位平面切片
图像运算(逐像素进行)
算术运算(一般用于灰度图像)
代数运算
逻辑运算
直方图变换
*直方图均衡化方法:
*直方图规定化方法:
镜头边界的检测
图像空间平滑滤波增强
图像中的噪声
邻域平均线性滤波(均值滤波)
中值滤波法
空间域滤波推广
基本低通滤波器设计原则:
微分滤波器模板系数设计
高增益滤波
Ch3 频域图像增强
理论基础
二维卷积
二维离散傅里叶变换
基本性质
DFT的问题
频域图像增强
一般步骤
频域平面与图像空域特性的关系
滤波器
理想低通滤波器的定义
理想低通滤波器的分析
Butterworth低通滤波器
理想高通滤...
在之前的基础上改进了一部分
硬件上把串口和SWD下载口引出来了,夹具下载有点不稳定
同时把手头上的LCD模组和红外传感器模组给用了,没有额外购买物资,成品图如下:
左边是V1,右边是V2
软件部分增加了一些图像处理的功能:
图像平滑:双线性插值
void interpolateTemperature(float *src, float *dst, uint8_t src_w, uint8_t src_h, uint8_t dst_w, uint8_t dst_h) {
float x_ratio = (float)(src_w-1) / dst_w;
float y_ratio = (float)(src_h-1) / dst_h;
for (int y = 0; y < dst_h; y++) {
for (int x = 0; x < dst_w; x++) {
float x_src = x * x_ratio;
...
目录:
Step 1 : 安装MathJax引擎并更换渲染引擎:
Step 2 : 更新MathJax的cdn链接
Step 3 : 更改部分转义规则
Step 4 (可选) : 主题未预配置下使用Hexo-filter-mathjax
测试
在写一些内容时,会遇到需要添加数学公式的地方,Hexo部分主题不支持公式的渲染,比如我正在使用的vivia主题,在查阅一些资料之后,我使用MathJax引擎实现了vivia主题下的数学公式渲染。
MathJax简介:https://www.osgeo.cn/mathjax/basic/mathjax.html
该引擎是一款可在所有现代浏览器中工作的开源js显示引擎,辅助页面作者编写含有数学公式的文档
Step 1 : 安装MathJax引擎并更换渲染引擎: 操作包括卸载Hexo自带的Hexo-math,卸载默认的对MathJax不友好的marked引擎
npm uninstall hexo-math --save
npm install hexo-renderer-mathjax --save
npm ...