通俗易懂的Dijkstra算法
看了下网上的一些讲的这个算法,有的说的太复杂了 其实一点都不通俗易懂 我们假设有A、B、C、D、E四个节点,我们想找到从A到E的最短路径(边权和最小) 我们定义DA(x)D_A(x)DA(x)表示当前计算出来的从A到X的最短距离 定义C(X,Y)C(X,Y)C(X,Y)表示从X直接到Y的距离 12345A——8——B| ╲ ╲ 2 18 15| ╲ ╲C——9——D——11——E 文字描述 记全部节点所在的集合为U 先构建一个映射f:x→DA(x),x∈{B、C、D、E}f: x \rightarrow D_A(x),x\in\{B、C、D、E\}f:x→DA(x),x∈{B、C、D、E},再构建一个集合C:{}C:\{\}C:{}来存放已经寻找过了的节点。 初始化 初始从A开始直接寻找,然后将结果直接存放在fff中,C:{A}C:\{A\}C:{A} 循环迭代 寻找fff值域中值最小的项对应的节点,且该节点没有被搜索过。记该节点为NNN 从该节点作为桥梁进行搜索 对于{x∣x∈U,x∉C}\{x|x\in U,x\notin...
不是人人都需要学习汇编
现在的计算机行业分得越来越细了,有软件工程,有人工智能等等,需要使用汇编的场景也算是非常少了。 计算机教学行业早该改一改了,都现在这个时间点了,还要求每个计算机专业的学生学习8086汇编,真的好笑。更加糟糕的是,我们的汇编考试非常愚蠢,汇编指令本来就很繁多,特别是对于复杂指令集而言,但是我们的考试却禁止查看参考文档。(好歹你随便参加一个什么算法比赛,都会提供参考文档吧😅) 显然我并不是想说汇编在现在就没用了,编译器、逆向工程任需要使用,但是又有多少人有这样的需求呢?特别是对于现代软件而言,大部分都是高级语言通过一层又一层的抽象实现的,各种runtime、抽象高级语言、GC的存在造成了晦涩难懂的汇编指令。我们目前学习的汇编太太太基础了。 我只想说,不是人人都需要学习汇编。
C++:狗屎语言
这段时间在写CPP大作业,才算真正被CPP恶心到 狗屎的include设计 这个是我觉得做的最垃圾的地方,c的include是真的给你include,明明是个编译型语言,必须要我指定包含哪些文件,这还需要是单向的,否则动不动就死递归include了。虽说有头文件卫士这玩意,这还是容易编译出错。 这些include还是传递性的,给代码分析器造成了不小的麻烦,导致代码提示不是慢就是质量差。 垃圾的std标准库 连个最基础的string都搞不好,考虑到当年没unicode,这个就不说了,但是为什么连个最基础的split、replace∗^*∗都不提供. 随便找一个成熟的第三方库,基本上都是自己实现了一个string 注: replace 指的是像py中的用一个字符串替换一个字串 除此之外,像什么vector也是跟屎一样,没有contain、remove 函数 乱七八糟的包管理 其实我这句话就是错的,这种垃圾语言连包管理器都没有,使用第三方包的方式简直“百花齐放”,什么静态链接动态链接的,写一个大一点的项目还要把别人的代码放进来,把一个项目膨胀几百倍。 ...
蓝桥杯15届Java-A组吊坠题目解析
当时考蓝桥杯(java)的时候,也没怎么学过算法,一看这道题涉及到了图论,直接就放弃了。现在回过头来学了下,写个解析。 题目 小蓝想制作一个吊坠,他手上有 n 个长度为 m 的首尾相连的环形字符串{s1, s2, · · · , sn} ,他想用 n − 1 条边将这 n 个字符串连接起来做成吊坠,要求所有的字符串连完后形成一个整体。连接两个字符串 si, sj 的边的边权为这两个字符串的最长公共子串的长度(可以按环形旋转改变起始位置,但不能翻转),小蓝希望连完后的这 n − 1 条边的边权和最大,这样的吊坠他觉得最好看,请计算最大的边权和是多少。 分析 这道题涉及到两个问题 这很显然是一个涉及到图论的问题,可以采用与最小生成树类似的算法 对于两个节点,它们之间的边权的计算 边权计算 采用动态规划来计算 1234567891011121314static int similarity(String a, String b) { a=a+a;//由于首尾相连,等效于将本身内容复制一遍再求最长公共子串 int[][] dp=new...
c++UI库slint上手体验
首先这个玩意需要安装Rust开发环境 https://www.rust-lang.org/learn/get-started 然后需要Rust的某个工具链 1rustup target add --toolchain stable-x86_64-pc-windows-msvc x86_64-pc-windows-gnu 但是这玩意在国内由于网络原因根本动不了,所以先要为Rustup设置镜像仓库 可以参考下文设置环境变量 https://www.jianshu.com/p/876b1cca26d8 弄好之后,运行cmake就好了 体验感受 遗憾 没有多窗口支持 由于界面脚本与程序不同,接口都需要从UI暴露出来 缺少路由等支持
MC红石三极管
使用网上的传统三极管设计有一个缺陷,当被控制电路频率过高时,三极管无法导通。 使用传统三极管非常不稳定 但是使用红石中继器+粘性活塞就非常稳定了 于是我就用这玩意做了一个可变频的折磨🐏的。。(x
RAID0阵列重组数据恢复
本文采用DiskGenius作为主要工具 注意:似乎只有DiskGenius专业版有此功能 Step1 将所有磁盘连接电脑 step2 Attention:一定要保证磁盘的添加顺序正确,块大小设置正确 根据经验,似乎当磁盘顺序调整正确时能够识别到损坏的分区,这时候再不断调整块大小,在设置正确后就能看到全部文件 Step3 使用DiskGenius自带的分区备份功能即可备份该分区上的文件,或者直接拷贝文件也行(速度有点慢) 参考资料 DiskGenius Doc-RAID数据恢复
定积分中值定理
注:这是我的数学期末报告,发这里算了 课本的不严谨 正如何老师所言,课本上的定积分中值定理是不严谨的。 课本上的定理描述如下: 对于在[min(a,b),max(a,b)]上的连续函数f(x)有∫abf(x)dx=f(ξ)(b−a),ξ∈[min(a,b),max(a,b)]\begin{aligned} &对于在 [\min(a,b) ,\max(a,b)]上的连续函数f(x)\\ &有\int_a^b f(x)dx=f(\xi)(b-a),\xi \in [\min(a,b) ,\max(a,b)] \end{aligned} 对于在[min(a,b),max(a,b)]上的连续函数f(x)有∫abf(x)dx=f(ξ)(b−a),ξ∈[min(a,b),max(a,b)] 上述定理中的ξ\xiξ并不能称作中值,因为它取到了边界值。若要将其称作中值,应当将其范围限制在开区间(min(a,b),max(a,b))(\min(a,b)...
英语7选5乱蒙(不重复),全错的概率
英语七选五乱蒙,当然是不重复地蒙。 求这个概率,最容易想到的当然是穷举法,但是七选五的穷举要求不重复,那么,使用递归来求解是一个不错的解决方案 本文主要使用python来实现 首先计算所有情况的总数 1all=7*6*5*4*3 定义递归函数f(list),这个函数的作用就是选择一个答案并且保证这个答案与相应的正确答案不同,其中输入参数list代表之前的选择情况。 我们不妨记正确答案为[1,2,3,4,5]。 如果列表长度已经达到了5,那么就说明选完了,将allIncorrect自增。 否则,挨个尝试选1~7,记作next,并且要使这个值不能是正确答案next!=len(list)+1,也不能重复出现next not in list,之后将list复制一份,添加next到末尾,继续调用f(list)。 1234567891011def f(list): global allIncorrect if len(list)==5: allIncorrect+=1 return for next in...