临时笔记¶
Vivado 自定义编辑器 VSCode 无法打开¶
报错内容:vivado unable to launch external text editor
原因:VSCode 默认的执行路径不是 .exe
文件,而是为了方便在 WSL 中使用而包装的脚本文件。查看 Windows Path,可以看到设置在 AppData\Local\Programs\Microsoft VS Code\bin
下,而该目录下只有几个脚本文件:
大致内容如下:
@echo off
setlocal
set VSCODE_DEV=
set ELECTRON_RUN_AS_NODE=1
"%~dp0..\Code.exe" "%~dp0..\resources\app\out\cli.js" %*
endlocal
在 PowerShell 中执行 (Get-Command code).Path
也显示为 AppData\Local\Programs\Microsoft VS Code\bin\code.cmd
,因此 Vivado 对脚本的调用不成功(推测是 Java 调用外部程序,没有 Shell 环境)。
解决方法:真正的 code.exe
在上层目录,将 Path
末尾的 bin
去掉即可。
应付算法考试的东西¶
摊还分析¶
- 聚合分析很简单,\(\frac{T(n)}{n}\) 即可
- 核算法:列出操作的实际代价,然后设计一种摊还代价,让快的操作支付所谓信用,用以偿还之后慢的操作的开支。证明你这样记账后,那些慢的操作的开支都能够被支付就行了。
- 栈,让 push 支付 2,偿还所有 pop
- 二进制计数器,让置位支付 2,偿还所有复位
- 势能法:摊还代价为实际代价加上引起势能变化 \(\Phi{D_n} - \Phi{D_0}\)。0 时势函数为 0。势函数应当总是大于零。
- 栈,push 让势能变高,摊还代价 1+1=2,pop 让势能降低,摊还代价 1-1=0。所有操作代价都是 \(O(1)\),证明了总代价是 \(O(n)\)。
- 数组增长,insert 让势能变高,摊还代价 1+1=2;扩张让势能变低,摊还代价 k-k=0,得证。