
算法
文章平均质量分 95
arbboter
也曾梦想上天,还是默默无闻,而今迈步从头越
展开
-
【加密算法】SM2国密算法原理、C++跨平台实现(含完整代码和示例)
本文围绕SM2算法展开,系统介绍了其技术原理与实现方法。首先,从算法基础入手,概述了SM2的核心数学原理、关键参数及组件构成。接着,深入解析了数字签名、加密解密流程以及密钥交换协议,并探讨了椭圆曲线数学优化技术,展示了SM2在性能与安全性上的优势。安全性分析部分则从算法设计、抗攻击能力及与RSA/AES的对比入手,全面评估了SM2的安全性。最后,通过C++跨平台自实现(Header-Only)展示了源码封装、单元测试及输出结果,为开发者提供了实用参考。本文旨在为SM2算法的理论研究与工程实践提供清晰指导。原创 2025-04-11 16:21:55 · 417 阅读 · 0 评论 -
【加密算法】SM4国密算法原理、C++跨平台实现(含完整代码和示例)
本文系统阐述了SM4国密算法的技术体系与工程实践。通过分组密码基础理论建立算法框架,明确其128位分组/密钥长度及32轮迭代结构。在原理层面,重点解析轮函数中复合域S盒的非线性变换机制,并对比ECB/CBC工作模式的适用场景。安全性分析从差分攻击概率到侧信道防御方法,论证算法合规性,并通过性能数据揭示与AES的差异。最终以CBC模式源码实现收尾,提供Header-Only库设计与单元测试验证方案,为开发者提供完整技术参考。原创 2025-04-07 17:26:44 · 732 阅读 · 0 评论 -
微信红包算法代码实现
微信红包算法思考学习研究闲来无事,研究下微信的红包算法,也思考下可以实现的其他算法,略作记录。微信红包的随机算法不是在发红包时就算好的,而是用户在领取红包时实时计算出客户领取红包金额,因此红包的算法重点在于如何公平地算出领取人领取的红包金额。可以转换为问题:从资金为S、个数为N的红包池中公平地随机取一个随机数,要求保证每个人都可以领取到红包。总额随机法算法描述:假设当前红包池的金额为...原创 2019-10-11 16:17:07 · 7600 阅读 · 0 评论 -
实用代码段整理
字符串截断 GBK编码的字符串,截取前n字节,且保证截取部分不包含半个汉字。std::string Substr(const std::string& strSrc, const size_t& nLen){ std::string strSub = strSrc.substr(0, nLen); if (strSub.length() &lt...原创 2016-11-28 19:26:48 · 741 阅读 · 0 评论 -
城市行--求网格中的可达路径数
今天遇到的一个题目,题目描述大概是这样的:有一个城市东西方向有四条平行且间距相同的道路,南北方向有六条平行且间距相同的街道,这几条道路横穿贯通整个城市,现有一个人从城市的最西南角想到城市的最东北角上去,且只往东或者往北方向走,求有多少种方案?当时画了下图,想到了用递归方法,不过因为时间问题没有深想,也想到了用穷举法,不过最后还是没有做出来。题中所述可转化为下图:也就原创 2015-03-07 21:59:43 · 4095 阅读 · 0 评论 -
快速排序
基本思想 快速排序的基本思想是基本思想是,通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。快速排序使用分治法来把一个串(list)分为两个子串行(sub-lists)。注意分组的时候先从右边开始比较,因为之前记录的基数是开始的位置,所以循环之前开始部分是空的,因此从右边开始。分组时需原创 2014-12-20 17:42:34 · 1765 阅读 · 0 评论 -
排序-冒泡排序
思想冒泡排序基本思想是将n个记录看作按纵向排列,每趟排序时从下至上对每对相邻记录进行比较,若次序不符合要求就交换。每趟排序结束时都能使排序范围内关键字最大的记录象一个气泡一样升到表上端的对应位置,整个排序过程共进行n-1趟,依次将关键字最大、次大、第三大…的各个记录置于表的第一个、第二个、第三个… 位置上。原创 2014-07-10 22:33:11 · 1229 阅读 · 0 评论 -
排序-简单选择排序
思想:第i趟简单选择排序是指通过n-i次关键字的比较,从n-i+1个记录中选出关键字最小的记录,并和第i个记录进行交换。共需进行i-1趟比较,直到所有记录排序完成为止。例如:进行第i趟选择时,从当前候选记录中选出关键字最小的k号记录,并和第i个记录进行交换。基本实现代码for (int i=0; i<nLen-1; i++){ for(int j=i+1; j<nLen; j++) {原创 2014-07-13 09:33:55 · 1496 阅读 · 0 评论 -
希尔排序
概要 希尔(Shell)排序的主要思想是分组分别用插入排序实现排序,然后不断缩小分组时的相邻组内元素的距离达到排序效果,经过几步之后,整个序列基本有序,最后整体利用插入排序即可完成排序。这里为什么选择插入排序呢?因为排序过程中“基本有序”越来越好,所以采用插入排序最好。主要代码及示例#include #include #include void She原创 2014-12-20 20:49:13 · 1567 阅读 · 0 评论 -
全排列算法
问题引出:对于一个序列,如果需要知道其全排列有多少种方案,我们可以很快地用数学知识求得全排列后的子排列方案数目,但是如果需要全部罗列出来那些全排列的结果,那么怎么实现呢?问题分析:如果给出一个序列,如何枚举出其全排后的子序列?下面通过分析序列“1234”,给出其全排列。首先我们排列出第一个数,如果我们第一次选择1,那么后面的步骤则是全排列“234”;如果是2,那么后面的步骤原创 2014-03-26 09:38:24 · 1471 阅读 · 0 评论 -
ACM解题--(1)ASCII码排序
ASCII码排序时间限制:3000 ms | 内存限制:65535 KB难度:2描述输入三个字符(可以重复)后,按各字符的ASCII码从小到大的顺序输出这三个字符。输入第一行输入一个数N,表示有N组测试数据。后面的N行输入多组数据,每组输入数据都是占一行,有三个字符组成,之间无空格。输出对于每组输入数据,输出一行,字符中间用一个空格分开。样例原创 2014-03-26 16:03:36 · 1372 阅读 · 0 评论