Mr. Kin's Blog

计算机知识分享/软件应用讲解

1   数组和字符串

1.1   数组

  • 集合的定义:由一个或多个确定的元素所构成的整体。
  • 集合的特性:
    • 集合里的元素类型不一定相同
    • 集合里的元素没有顺序
  • 列表(又称线性列表)的定义:是一种数据项构成的有限序列,即按照一定的线性顺序,排列而成的数据项的集合。
    • 列表的概念是在集合的特征上形成的,它具有顺序,且长度是可变的。
    • 列表最常见的表现形式:数组和链表
      • C++和Java中,数组中的元素类型必须保持一致。
      • Python数组叫list,元素类型可以不同,具有更多高级功能。
    • 特殊类型的列表:栈和队列
  • 列表和数组的区别
    • 数组
      • 数组有索引,用来标识每项数据在数组中的位置,且在大多数编程语言中,索引是从 0 算起的。
      • 数组中的元素在内存中是连续存储,且每个元素占用的相同大小内存。
    • 列表
      • 列表没有索引
      • 列表中的元素在内存中可能彼此相邻,也可能不相邻。例如链表。

1.2   数组的操作

对于数组,计算机会在内存中为其申请一段连续的空间,并且会记下索引为 0 处的内存地址

  • 读取元素:读取数组中的元素,是通过访问索引的方式来读取的,索引一般从 0 开始。寻找索引为2的元素,实际就是在索引为0的元素内存地址上偏移+2得到新地址的元素。
    • 时间复杂度:O(1)
  • 查找元素:由于只保存了索引为 0 处的内存地址,因此需要从数组开头逐步向后查找。
    • 时间复杂度:O(N)
  • 插入元素
    • 末尾插入:只需要一步(根据数组的长度和位置计算出需插入元素的内存地址插入即可)。
    • 中间插入:需要在数组中腾出空间,才能继续操作插入(这种操作,更推荐使用链表)。
  • 删除元素:与插入元素类似
    • 末尾删除:只需要一步
    • 中间删除:删除中间元素后,后面的元素需要对该位置进行操作
    • 时间复杂度:O(N)。数组长度N,例如删除第一个元素,总步骤数:1+(N-1)=N。(1为删除操作,N-1为移动操作)

1.3   字符串

字符串是由字符串数组形成的。

2   参考文献

[1] 数组和字符串[EB/OL]. https://leetcode.cn/leetbook/detail/array-and-string/.

“程序设计类教学辅助教学平台”(Programming Teaching Assistant,亦简称 PTA)(依稀记得以前这玩意叫PAT),面向高校和社会的程序自动评测、开放式的教学辅助平台。

练习代码文件的仓库链接:点击跳转

难点题解主要参考PAT(tiny656)和[PAT(枝桠)]

基础编程题目集PTA平台

函数题

6-1 简单输出整数PTA平台

简单的for循环运用

6-2 多项式求值PTA平台

先罗列多项式值,分析构成规律,再去考虑如何编写逻辑。(当年我是傻乎乎分开两个for循环处理,因此导致会导致部份用例运行超时)

6-3 简单求和PTA平台

for循环中应为i<N,注意main函数最后赋值的下标,即需要保持和main函数中for循环的条件一致。(当年是挺傻乎乎的)

6-4 求自定类型元素的平均PTA平台

for循环中应为i<N,注意main函数最后赋值的下标,即需要保持和main函数中for循环的条件一致。

6-5 求自定类型元素的最大值PTA平台

for循环中应为i<N,注意main函数最后赋值的下标,即需要保持和main函数中for循环的条件一致。

第一个MaxNum应该设为数组里的元素。如果设为0的话,当元素全为负数时,没法输出最大值。(也不知道我当年是怎么想出这种傻乎乎的逻辑)

1   Docker Desktop

1.1   Docker Unexpected error

问题:无法启用Docker Desktop,提示报错Docker Unexpected error

原因:之前有安装并卸载过Docker Desktop。重新安装Docker Desktop有可能触发此问题。

解决方法:

1
2
3
wsl --unregister docker-desktop
wsl --unregister docker-desktop-data
# 运行上面两条命令,然后重新启动Docker Desktop

2   参考文献

[1] Docker Unexpected error[EB/OL]. https://github.com/docker/for-win/issues/14034.

1   数学计算

  • 对于指数函数来说底数不能为负数,而对于代数运算来说却可以为负数。因为n总是表示正整数,底数为负数是可以的,这个式子仍然是有限次代数运算的极限
  • 乘除法的计算本质:计算过程中的错位相加是为了保证各行的小数点位置相同,实际就是保证各个数字的权重相同。

2   生活琐事

当花费大量时间却无法解决一个问题时,若非紧急状态,建议先将该问题放一边。等到放松或者忙完另外一件事情甚至于明天再重新去思考解决这个问题。

3   生活记录

  • 灭蟑螂:洗衣服+饭+白糖。
  • 去打印店,一定得输出PDF再打印。
  • 肠粉容易导致胃胀气。
  • 不要买大豆油,加热有腥臭味。买花生油。
  • 湖南人fh不分,弗兰银/湖兰人/胡建人。
  • 出门在外吃饭,看大货车司机。
  • 学生票要取纸票,得刷磁条才能享受优惠,否则检票时会面临补票的问题。
  • 四六级口语分两天,笔试一天(上午四,下午六)。
  • 2021花呗弹窗说需上报征信。
  • 京东白条的注销,需要下载京东金融白条>设置>账户安全>注销白条用户>继续注销,或者直接在京东金融客服,输入注销白条,可以直接跳转。
  • 信用卡(透支信用贷款),小额消费贷款(多笔记录不利于征信)

4   医学

  • 睡眠一定要规律,否则生物钟不好调整适应,会造成人体免疫力下降。
  • 关于外伤伤口的处理:生理盐水清洗伤口即可,剩下等身体自动修复。消毒可以用碘伏。P.S.切忌使用紫药水,不仅致癌,还会形成结痂无法观察伤口。
  • 烫伤疼痛明显:冷水冲洗30分钟。

4.1   药品清单

  • 蚬壳胃散-海螵蛸
  • 小柴胡冲剂
  • 复方黄芩片-肇庆新湖制药
  • 复方穿心莲-广州白云山和记黄埔中药
  • 氯芬黄敏片-广州白云山明兴制药
  • 复方氨酚烷胺片(感冒)
  • 维C银翘片-国药集团德众(佛山)药业有限公司
  • 腹可安片-广州白云山一药业
  • 正露丸(喇叭丸)-大幸药品
  • 桂林西瓜霜-桂林三金药业
  • 冰硼散(微毒性)
  • 维C片
  • 维B片
  • 盐酸小襞碱片
  • 枸地氯雷他定片-扬子江药业集团
  • 脾氨肽口服冻干粉
  • 攻肤之王-广州泽上堂生物科技有限公司

1   基础

ffmpeg -i input.avi -metadata key=value -codec copy output.avi
ffprobe "file" #查看metadata

1.1   查询命令

1
2
3
4
5
ffmpeg.exe -h -> help.txt # 打印帮助文件
ffmpeg -h encoder=libx264
ffmpeg -hwaccels # 查看支持的硬件加速选项
ffmpeg -codecs | grep cuvid # 查看cuvid提供的GPU编解码器(grep为Linux命令)
ffmpeg -f lavfi -i nullsrc -c:v nvenc -gpu list -f null none_output (-hwaccel_device N 和 -gpu N)

1.2   硬件编码

1
2
3
4
5
6
-c:v h264_nvenc -rc:v vbr_hq -cq:v 19 -b:v 2500k -maxrate:v 5000k -profile:v high
ffmpeg -hwaccel cuvid -c:v h264_cuvid -i <input> -c:v h264_nvenc -b:v 2048k -vf scale_npp=1280:-1 -y <output>
ffmpeg -vsync 0 -hwaccel cuvid -c:v h264_cuvid -i input.mp4 -c:a copy -c:v h264_nvenc -b:v 5M output.mp4
-hwaccel cuda -hwaccel_output_format cuda
ffmpeg -vsync 0 –hwaccel cuvid -c:v h264_cuvid –resize 1280x720 -i input.mp4 -c:a copy -c:v h264_nvenc -b:v 5M output.mp4
ffmpeg -r 30 -f image2 -i %4d.jpg -r 30 -c:v h264_nvenc -profile:v high -level 5.1 -preset slow -rc:v vbr_hq -cq:v 19 -b:v 2500k -maxrate:v 5000k ../output.mp4

2   实战案例

2.1   合并多个视频文件

1
2
3
4
5
6
ffmpeg -f concat -i filelist.txt -c copy output.mp4
# filelist.txt
# file '1.flv'
# file '2.flv'
# file '3.flv'
# file '4.flv'

3   常见知识点

  • yuv420p的p代表planar
  • k和K都是表示$10^3/2^{10}$,K之后的只有大写,比如M表示$10^6/2^{20}$(详见Expression Evaluation
  • bufsize配合maxrate参数使用可控制编码时的码率波动,例如264的cbr恒定码率编码中,同时设置b:v maxrate minrate bufsize(前三个都是设置为1M,bufsize设置为50k,最后编码出来的码率波动最小996kbit/s,1001kbit/s)。bufsize is the "rate control buffer",即码率控制缓存。作用是每次达到bufsize大小,都是计算并调整到average平均码率。
  • filter chain之间的filter用分号,普通的filter之间用逗号
  • aac编码:网络视频128k;高质量192k

4   常见错误/警告

4.1   时间戳问题

常见于 Non-monotonous DTS in output stream

完美的解决方式暂未找到,网上的解决方法基本为:先转为 mts 文件,后转为 mp4。(本质是重新编码,确实可以解决时间戳错误,但也会劣化音质和画质。)

4.2   deprecated pixel format used, make sure you did set range correctly

This is just a warning, not an error. You can safely ignore it when using ffmpeg from the command-line, and you don't have to fix anything.

The warning occurs when converting from a yuv420p source to JPEG, which makes ffmpeg choose yuvj420p as output format. That format is required for writing files with the mjpeg encoder.

These two pixel formats have different color ranges: the former is from 16–235, which is "limited range" (also called "MPEG" range), the latter defaults to 0–255, which is "full range". The warning is meant for using FFmpeg as a library in your own code (like here). See also the comments on this question.

R.I.P