草庐IT

Prim算法

全部标签

SM4加密算法例程(新增CTR模式)

说明SM4和AES只是加密算法不同,使用起来几乎没有区别,AES相关的例程可以参考:基于mbedtls的AES加密(C/C++)基于OpenSSL的AES加密(C/C++)本文主要介绍SM4加密算法,并提供库里没有的CTR模式模式加密模式介绍ECB模式(ElectronicCodebook):特点:独立性:每个明文块都独立地使用相同的密钥进行加密,因此加密过程是相互独立的。并行性:由于每个块之间没有依赖关系,ECB模式具有较好的并行性,可以同时加密多个块。加密过程:将明文划分为固定大小的块(例如128位)。对每个块独立使用AES加密算法,使用相同的密钥。输出得到相应的密文块。CBC模式(Cip

c++ - C++ 中 strstr() 函数的时间复杂度、空间复杂度和算法是什么?

我很好奇在C++中使用默认的老式strstr()函数的成本。它的时间和空间复杂度是多少?它使用哪种算法?我们还有其他具有以下最坏情况时间和空间复杂度的算法:设n=字符串长度,m=模式长度Knuth-Morris-Pratt算法:时间=O(n+m),空间=O(m)Rabin-Karp算法:时间=O(n*m),空间=O(p)(p=组合长度m的p模式)Boyer-Moore算法:时间=O(n*m),空间=O(S)(S=字符集的大小)就时间和空间复杂性而言,strstr()在任何方面都优于上述算法? 最佳答案 在C标准中它只是说,在§7.2

c++ - 柴油发电机驱动算法

我有一个旧的柴油发电机,我在给调速器编程时遇到了很大的问题。我需要引擎保持在2400-2800RPM之间我有强大的RC汽车伺服插入发动机的throttle杆,伺服在22°(最小)和95°(最大)燃油喷射之间移动我用Atmelmeg328微Controller驱动它。速度通过哈尔效应传感器和飞轮上的单个磁铁测量。我测量转一整圈所需的时间,并据此计算RPM(这意味着如果引擎速度更快,代码会更频繁地对其使用react=>喷射量变化更快)首先我尝试了最简单、最愚蠢的方法。如果RPM大于我的需要,则将伺服后退=>较小的燃油喷射量。如果RPM低于所需的步进伺服前进。结果证明这是一个非常糟糕的主意,

c++ - 用于查找图像堆栈中每个像素的平均值的快速数据结构或算法

我有一堆图像,我想计算其中每个像素的平均值。例如,设(x_n,y_n)为第n张图像中的(x,y)像素。因此,图像堆栈中三幅图像的像素(x,y)的平均值为:mean-of-(x,y)=(1/3)*((x_1,y_1)+(x_2,y_2)+(x_3,y_3))我的第一个想法是将每个图像的所有像素强度加载到具有单个线性缓冲区的数据结构中,如下所示:|Allpixelsfromimage1|Allpixelsfromimage2|Allpixelsfromimage3|为了找到图像堆栈中像素的总和,我执行了一系列嵌套的for循环,如下所示:for(intcol=0;col基本上img*img_

c++ - 快速 nbody 算法/解决方案(使用 opengl/c++/??)

我正在从事一个(c++,opengl)项目,我需要有很多相互影响的粒子,如果我是正确的话,这被称为nbody问题。有人知道这样的算法有什么解决方案吗。我知道barneshut算法,也许我可以看看openCL,不过我不只是想知道您是否使用了其他解决方案。我将创建的代码将包含很多:for(inti=0;ilimit){....}}}亲切的问候,北河三 最佳答案 Kd-trees非常适合寻找最大距离内的所有物体(在本例中为粒子)。如果树是平衡的,查找是O(logn)。 关于c++-快速nbod

c++ - 在无向树中寻找路径的算法

假设我有一棵无向树,我需要在两个节点之间找到一条路径(唯一路径)。最好的算法是什么。我可能可以使用Dijkstra算法,但对于树来说可能有更好的算法。C++示例会有所帮助但不是必需的谢谢 最佳答案 假设每个节点都有一个指向其父节点的指针,那么只需从每个起始节点向根节点回溯树。最终,这两条路径必须相交。交集测试可以像维护节点地址的std::map一样简单。更新当您更新问题以指定无向树时,以上内容无效。一种简单的方法是简单地从节点#1开始执行深度优先遍历,最终您将到达节点#2。这是树的大小的O(n)。假设有一个完全通用的树,我不确定是否

c++ - 算法:查找给定范围内的数字计数

给定一个未排序的数字数组,其中可能存在重复项,对数组进行预处理,以便找到给定范围内数字的计数,时间为O(1)。例如,7,2,3,2,4,1,4,6.数字的计数都是>=2和是5.(2,2,3,4,4). 最佳答案 对数组进行排序。对于已排序数组中的每个元素,将该元素插入到哈希表中,以元素的值作为键,并将其在数组中的位置作为关联值。任何被跳过的值,您都需要插入。要查找范围内的项目数,请在哈希表中查找范围每一端的值的位置,然后从上限减去下限以找到范围的大小。 关于c++-算法:查找给定范围内的

c++ - OBB(定向边界框)算法中的点?

给定形成OBB的中心点、宽度、高度和角度,如何确定给定点P是否在OBB内?谢谢 最佳答案 我认为你的问题中的皱纹是边界框可以旋转?如果是这样,对我来说最简单的解决方案似乎是在以边界框中心为中心的旋转坐标平面中进行所有计算。要计算点相对于这些轴的坐标:newy=sin(angle)*(oldy-centery)+cos(angle)*(oldx-centerx);newx=cos(angle)*(oldx-centerx)-sin(angle)*(oldy-centery);(您可能需要根据角度的测量方式进行调整,我会把它留给您,因为

【动态规划】【C++算法】956 最高的广告牌

作者推荐【动态规划】【map】【C++算法】1289.下降路径最小和II本文涉及知识点动态规划汇总956.最高的广告牌你正在安装一个广告牌,并希望它高度最大。这块广告牌将有两个钢制支架,两边各一个。每个钢支架的高度必须相等。你有一堆可以焊接在一起的钢筋rods。举个例子,如果钢筋的长度为1、2和3,则可以将它们焊接在一起形成长度为6的支架。返回广告牌的最大可能安装高度。如果没法安装广告牌,请返回0。示例1:输入:[1,2,3,6]输出:6解释:我们有两个不相交的子集{1,2,3}和{6},它们具有相同的和sum=6。示例2:输入:[1,2,3,4,5,6]输出:10解释:我们有两个不相交的子集

c++ - 需要帮助在 C++ 中实现 Karatsuba 算法

先介绍一下背景:-我是第一次发布海报,是一名大学学生(不是编程专业)。-这不是作业题,我只是为了好玩才这样做。-我的编程经验包括一个学期(3个月)的C++和高中的一些QBasic。-是的,我查看了GMP和Bignum库;从原始代码中学习东西非常困难,尤其是在不了解程序员意图的情况下。此外,我想自己学习如何做。我正在为任意大的整数编写一个乘法函数。我使用字符数组来表示这些数字,末尾有一个+或-作为标记(例如“12345+”、“31415-”)。我目前正在实现Karatsuba算法。问题是使用递归和动态内存分配,该函数比原始方法慢5倍。我可以使用一些关于如何减少运行时间的提示。char*d