<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[crazybobo1207的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/crazybobo1207</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; crazybobo1207]]></copyright><item><title><![CDATA[c语言遍历文件夹中的文件]]></title><link>https://blog.youkuaiyun.com/crazybobo1207/article/details/136137645</link><guid>https://blog.youkuaiyun.com/crazybobo1207/article/details/136137645</guid><author>crazybobo1207</author><pubDate>Sat, 17 Feb 2024 13:30:18 +0800</pubDate><description><![CDATA[文件目录如下，文件夹里还有一些txt文件未展示出来。使用递归实现，深度优先遍历文件夹中的文件。代码如下，用了一点C++的语法。]]></description><category></category></item><item><title><![CDATA[面向对象三大特性：封装、继承、多态]]></title><link>https://blog.youkuaiyun.com/crazybobo1207/article/details/136137567</link><guid>https://blog.youkuaiyun.com/crazybobo1207/article/details/136137567</guid><author>crazybobo1207</author><pubDate>Sat, 17 Feb 2024 13:21:32 +0800</pubDate><description><![CDATA[3.多态：多态一般和继承有关。父类暂时没有图形的具体信息，所以暂时无法实现Area方法，定义为抽象类。需要在子类中实现（重写）父类的Area方法。不管是求什么形状的面积，main函数中永远是通过shape.Area求面积。2.继承：圆形类和三角形类都是从形状类继承而来，父类和子类之间是一般和特殊（a kind of）的关系，圆形是形状的一种，三角形也是形状的一种。1.封装：类里封装了数据和方法，封装实现了信息隐藏，保证了数据安全。设计圆形类和三角形类，求面积。]]></description><category></category></item><item><title><![CDATA[C语言求解猴子分桃子]]></title><link>https://blog.youkuaiyun.com/crazybobo1207/article/details/136098616</link><guid>https://blog.youkuaiyun.com/crazybobo1207/article/details/136098616</guid><author>crazybobo1207</author><pubDate>Sun, 11 Feb 2024 23:17:16 +0800</pubDate><description><![CDATA[问题：海滩上有一堆桃子，五只猴子来分。第一只猴子把这堆桃子平均分为五份，多了一个，这只 猴子把多的一个扔入海中，拿走了一份。第二只猴子把剩下的桃子又平均分成五份，又多了 一个，它同样把多的一个扔入海中，拿走了一份，第三、第四、第五只猴子都是这样做的， 问海滩上原来最少有多少个桃子？其实，仔细观察猴子和桃子的个数，可以发现两者之间有一个函数关系，可以直接根据猴子求得桃子个数~_~如果个数再多，int要换成long long。减少循环次数，程序速度还可以优化。]]></description><category></category></item><item><title><![CDATA[c语言求多边形面积]]></title><link>https://blog.youkuaiyun.com/crazybobo1207/article/details/136098603</link><guid>https://blog.youkuaiyun.com/crazybobo1207/article/details/136098603</guid><author>crazybobo1207</author><pubDate>Sun, 11 Feb 2024 23:05:21 +0800</pubDate><description><![CDATA[多边形有现成的面积公式，直接套用即可。area函数接受两个参数：顶点坐标，顶点个数。]]></description><category></category></item><item><title><![CDATA[结构体数组所有元素（1亿个元素）初始化为相同的值]]></title><link>https://blog.youkuaiyun.com/crazybobo1207/article/details/136091651</link><guid>https://blog.youkuaiyun.com/crazybobo1207/article/details/136091651</guid><author>crazybobo1207</author><pubDate>Sat, 10 Feb 2024 17:42:56 +0800</pubDate><description><![CDATA[如果结构体里的成员都是一些简单的基本数据类型，整个结构体才几十个字节，即使有1亿个元素，用for循环赋值，程序执行时间也只要10^8纳秒级别，0.1秒的样子。编译器优化+高速缓存命中，速度已经飞快了，不用操心那么多。多线程加速效果不明显，3个线程以上基本没有加速效果了，猜测是硬件资源的并行度有限（这样说可能不准确），可能是竞争之类的原因导致的，或者是因为总线宽度有限？一个结构体数组，有1亿个元素，每个元素都要初始化为相同的值，如果没有现成的语法直接支持这样的初始化操作，就得用for循环写，会不会非常耗时？]]></description><category></category></item><item><title><![CDATA[大水仙花数求解]]></title><link>https://blog.youkuaiyun.com/crazybobo1207/article/details/136089086</link><guid>https://blog.youkuaiyun.com/crazybobo1207/article/details/136089086</guid><author>crazybobo1207</author><pubDate>Sat, 10 Feb 2024 00:59:46 +0800</pubDate><description><![CDATA[每次递归，“统计”这个数中某个数字(cur_digit)出现的次数，直到0-9十个数字全被统计。不断递归的结果，是：“可用”的数字位数(unused_bit)越来越少，与此同时，这个数(cur_sum)也越来越大。当0到9的个数全部统计结束，这个cur_sum就是这个数本身。（1）11333355和33331155看上去是不一样的两个数，但是它们又一样，因为相同数字出现的次数一样。运行结果，19位水仙花数有4个，用时0.18秒。输入位数，求解水仙花数。暴力求解，位数如果太多，会超时。]]></description><category></category></item><item><title><![CDATA[C++容器的使用，求解“好运留下来，烦恼丢出去”moshu]]></title><link>https://blog.youkuaiyun.com/crazybobo1207/article/details/136088908</link><guid>https://blog.youkuaiyun.com/crazybobo1207/article/details/136088908</guid><author>crazybobo1207</author><pubDate>Sat, 10 Feb 2024 00:25:28 +0800</pubDate><description><![CDATA[最后留下的那半张就是之前藏起来的那半张，通过程序把中间的变化过程展示出来。（4）见证奇迹的时候，根据性别不同，如果此刻剩下的牌是6张（刚扔了1张），那么2一定在第5个位置。所以，当移动3张纸牌并插入到中间位置时，第一张牌和最后一张牌一定是一样的（如图所示，都是2）（另外，下面的图，名字分别是4个字和3个字，随机的，男女是随机的，南方北方也是随机的）（5）最后，留一张扔一张，最后留下的那半张就是之前藏起来的那半张了。（2）当拿走第一张牌2的时候，另外一张2一定在最下面，这也很重要。程序如下，写的有点乱。]]></description><category></category></item><item><title><![CDATA[C语言指针的几种用途]]></title><link>https://blog.youkuaiyun.com/crazybobo1207/article/details/136000923</link><guid>https://blog.youkuaiyun.com/crazybobo1207/article/details/136000923</guid><author>crazybobo1207</author><pubDate>Fri, 02 Feb 2024 21:36:23 +0800</pubDate><description><![CDATA[数组本身是一个变量，而变量呢，它是内存中的一块区域，所以，通过指针访问数组中的元素，实际上就是通过指针获得了变量所在内存的控制权。由于数组元素在内存中是连续分布的，所以这个指针可以通过++或者--操作访问数组里的元素，这个指针它还描述了“位置信息”。程序追求三个目标“简洁、高效、安全”，c程序的错误，除了逻辑错误之外，最多的就是内存错误，“高效”是c语言的优点，但是安全性……count是一个指针，它指向了原来的实参，通过指针可以直接修改原来的实参，实际上，通过指针获得了实参所在内存的控制权。]]></description><category></category></item><item><title><![CDATA[字符串匹配之BF算法、KMP算法]]></title><link>https://blog.youkuaiyun.com/crazybobo1207/article/details/135983646</link><guid>https://blog.youkuaiyun.com/crazybobo1207/article/details/135983646</guid><author>crazybobo1207</author><pubDate>Fri, 02 Feb 2024 00:12:54 +0800</pubDate><description><![CDATA[如果主串这次的匹配，是从主串的100位置开始比较的，那么当匹配失败时，下次匹配应该从101位置开始比较，所以i应该先退回到这次比较的开始位置100（主串应该从当前位置i往回退多少个字符呢？刚才说过了，j的值等于已经匹配成功的字符个数，所以“j的值和t的长度相等”说明已经匹配成功的字符个数等于t的长度，即t已经匹配成功。如果s[i]和t[j]不相等，那么，重置i和j的值，然后重新尝试匹配。方法4：KMP算法，经典的字符串匹配算法，和BF算法的区别主要在于，当匹配失败时，如何重置i和j的值，这个……]]></description><category></category></item><item><title><![CDATA[求素数个数]]></title><link>https://blog.youkuaiyun.com/crazybobo1207/article/details/135581825</link><guid>https://blog.youkuaiyun.com/crazybobo1207/article/details/135581825</guid><author>crazybobo1207</author><pubDate>Sun, 14 Jan 2024 12:38:55 +0800</pubDate><description><![CDATA[求素数个数]]></description><category></category></item><item><title><![CDATA[kmeans聚类算法C++实现]]></title><link>https://blog.youkuaiyun.com/crazybobo1207/article/details/135581479</link><guid>https://blog.youkuaiyun.com/crazybobo1207/article/details/135581479</guid><author>crazybobo1207</author><pubDate>Sun, 14 Jan 2024 12:38:03 +0800</pubDate><description><![CDATA[kmeans算法实现和动态演示]]></description><category></category></item><item><title><![CDATA[C++ STL set的使用，一道算法题，化繁为简、化难为易]]></title><link>https://blog.youkuaiyun.com/crazybobo1207/article/details/134588059</link><guid>https://blog.youkuaiyun.com/crazybobo1207/article/details/134588059</guid><author>crazybobo1207</author><pubDate>Thu, 23 Nov 2023 23:29:41 +0800</pubDate><description><![CDATA[在for auto循环中，加入到set中的新元素，等会也会自动被访问（被处理）。最初，当1在集合中时，2*1+1=3被加入到集合，这个3等会也会继续被访问（被处理），也就是说3*2+1=7会被加入到集合，这就是一个无限循环，这个无限循环恰恰就是我们想要的。下面的代码没有什么复杂逻辑，看不到去重，也看不到排序，都是set的功劳。数据量加到10万，set说：小菜一碟，我的效率不错吧。看似不难，就是排序、去重而已，元素个数如果不是50，而是10万、100万，要用纯C语言写出高效的算法，还是有一定难度的。]]></description><category></category></item><item><title><![CDATA[约瑟夫环 --- C++ STL 容器的使用]]></title><link>https://blog.youkuaiyun.com/crazybobo1207/article/details/134574525</link><guid>https://blog.youkuaiyun.com/crazybobo1207/article/details/134574525</guid><author>crazybobo1207</author><pubDate>Thu, 23 Nov 2023 12:55:01 +0800</pubDate><description><![CDATA[准备使用vector容器，它类似于C语言的数组，优点是容量可以动态增长，缺点是有大量删除操作时，效率可能有点低，因为删除某个元素之后，后面的元素需要前移，从而保证所有元素的地址是连续的。如果用纯C语言数组写，而且不使用递归，代码还是要写好几行的。因为算法伪代码写出来之后，代码也自然写出来了。使用vector容器之后，代码不是最简单的（使用递归可以一句话完事），也不是效率最高的（因为有删除操作），但是，代码写起来很自然。重置begin=刚删除元素的位置+1（若删除元素后，后面元素会自动前移，则不用+1）;]]></description><category></category></item><item><title><![CDATA[C++ STL 之 无序map（unordered_map）的使用]]></title><link>https://blog.youkuaiyun.com/crazybobo1207/article/details/134564558</link><guid>https://blog.youkuaiyun.com/crazybobo1207/article/details/134564558</guid><author>crazybobo1207</author><pubDate>Wed, 22 Nov 2023 23:26:59 +0800</pubDate><description><![CDATA[但是，如果数据量超过百万，无脑双重for循环肯定会超时（如果是十万数据量，超时不明显，毕竟双重for循环只有10^5*10^5=10^10次，刚好是1秒左右），如果自己定义一个数组a[1000001]（当然不能直接这样写，要动态申请内存），用来统计每个数出现的次数，也是可行的（比如55这个数出现的次数可以直接保存在a[55]中，100万这个数出现的次数可以保存在a[1000000]中）。但是，如果数据的范围没有限制在100万以内，就会出现问题，如果有1亿零55这种很大的数，这个数出现的次数存放在哪里？]]></description><category></category></item><item><title><![CDATA[人工智能之进化计算：基于遗传算法求解TSP问题，C/C++实现]]></title><link>https://blog.youkuaiyun.com/crazybobo1207/article/details/134432113</link><guid>https://blog.youkuaiyun.com/crazybobo1207/article/details/134432113</guid><author>crazybobo1207</author><pubDate>Thu, 16 Nov 2023 00:24:27 +0800</pubDate><description><![CDATA[算法主要思想：根据当前种群生成两份样本，第一份：用当代最好的一半样本直接变异，生成一份新的样本；第二份：从当代最好的一半样本中随机选择，构成新的另一半样本，不变异。第一代种群的个体可以随机生成，也可以先利用贪心算法，生成一个较优的路径（在初始种群中有一个优秀的个体），这一步有无对最后结果没有影响。和生物界中生物的繁殖进化一样，遗传算法的过程主要包括：选择，交叉，变异，每次迭代都能生成比上一代更好的种群。使用多线程，每个线程单独求解，最后汇总所有线程的结果，取最优的。每个数据集的距离计算公式不一样，参见。]]></description><category></category></item><item><title><![CDATA[机器学习一元线性回归的几种实现]]></title><link>https://blog.youkuaiyun.com/crazybobo1207/article/details/134431328</link><guid>https://blog.youkuaiyun.com/crazybobo1207/article/details/134431328</guid><author>crazybobo1207</author><pubDate>Wed, 15 Nov 2023 23:25:47 +0800</pubDate><description><![CDATA[运行结果如下，对于某一个输入值x，可以通过前面几个方法求得的w和b值，利用y=wx+b求得y值，与此同时，也可以利用训练好的神经网络，从输入层到隐藏层到输出层，依次加权求和（神经网络中没有使用激活函数，只能拟合线性函数），计算出y值。神经网络虽然不知道w和b值，但是它计算出来的y值和利用y=wx+b计算出来的y值几乎相等。然后，对于一个输入值x，可以利用这个神经网络，预测输出值y。方法5： 神经网络（BP神经网络，有输入层、隐藏层、输出层），c实现。然后求y=wx+b的w和b值。]]></description><category></category></item><item><title><![CDATA[C/C++ 实现贝叶斯分类算法]]></title><link>https://blog.youkuaiyun.com/crazybobo1207/article/details/134282228</link><guid>https://blog.youkuaiyun.com/crazybobo1207/article/details/134282228</guid><author>crazybobo1207</author><pubDate>Wed, 08 Nov 2023 11:27:51 +0800</pubDate><description><![CDATA[下面是用冷门函数式编程语言写的，代码比C简单很多，算出来的概率0.178089，和上图一致，都是P(J|0,0,0,1)，即：对于样本（帅、性格好、高、不上进），预测嫁的概率是0.178089。最后比较两个概率的大小，得到预测结果。1表示肯定，0表示否定）和1个分类结果（嫁不嫁，1表示嫁，0表示不嫁），如果有更多的真实样本，预测效果会更好。运行结果如下，首先是20个样本的分类预测结果（20个样本既作为训练数据，也作为测试数据），准确率80%（20次预测错了4次），不是很高，主要是因为样本数量比较少。]]></description><category></category></item><item><title><![CDATA[C/C++ 实现K近邻分类算法]]></title><link>https://blog.youkuaiyun.com/crazybobo1207/article/details/134281116</link><guid>https://blog.youkuaiyun.com/crazybobo1207/article/details/134281116</guid><author>crazybobo1207</author><pubDate>Wed, 08 Nov 2023 09:45:12 +0800</pubDate><description><![CDATA[运行结果如下（1，2，3分别表示讨厌，有点喜欢，很喜欢），100个测试样本错了4个，算法没有问题，一般是样本有问题，比如一个男的，他的3个特征反映出这个男的很优秀，10个女的有9个女的会喜欢这个男的，偏偏有1个女的不喜欢，对于这样一个样本，程序给出的预测结果和真实结果会不一致。另外，偷了个懒，没有动态申请内存，因为样本数据量不大，栈空间基本够用。每行有4个数据，前3个是样本特征（飞行公里数，玩游戏时间百分比，吃冰激凌公升数），最后1个是分类结果（很喜欢，有点喜欢，讨厌）。原始数据的分隔符是制表符\t。]]></description><category></category></item><item><title><![CDATA[C++实现A*寻路算法]]></title><link>https://blog.youkuaiyun.com/crazybobo1207/article/details/134257181</link><guid>https://blog.youkuaiyun.com/crazybobo1207/article/details/134257181</guid><author>crazybobo1207</author><pubDate>Tue, 07 Nov 2023 00:07:22 +0800</pubDate><description><![CDATA[和dijkstra算法一样，整个图是慢慢被探索的，所以也需要定义两个集合，一个是已经处理（探索）过的点的集合，另一个是待处理的点的集合（“待处理的点的集合”并不等于“未处理过的点的集合”，前者指的是已经看到但未处理的点，后者还包括那些在远处尚未看到的点）。A*算法的核心公式是F（起点到终点的距离）=G（起点到当前点的距离，即已经走过的路）+H（当前点到终点的距离，即还没走过的路）。2.将该点的8个邻接点（边界点、障碍物、已经处理过的点，这三者除外）放入open_list中，当遇到了终点时，break;]]></description><category></category></item><item><title><![CDATA[C/C++实现手写数字识别，分别处理 32*32 文本数据集和mnist 28*28 png数据集]]></title><link>https://blog.youkuaiyun.com/crazybobo1207/article/details/133972496</link><guid>https://blog.youkuaiyun.com/crazybobo1207/article/details/133972496</guid><author>crazybobo1207</author><pubDate>Sun, 22 Oct 2023 14:47:37 +0800</pubDate><description><![CDATA[简便起见，对样本个数做了一些简化，32*32数据集的训练数据是180*10=1800个，测试数据是80*10=800个，mnist数据集的训练数据是5000*10=5万个，测试数据是800*10=8千个（原始测试样本是1万个，每个数字的测试样本个数不同）。从数据量对比来看，后者是前者的280倍（训练数据集是28倍，测试数据集是10倍），对应的程序运行时间（计算测试样本的预测准确率）后者也是前者的200多倍（排序算法很重要，如果不使用小根堆求TOP K，而是使用传统的整体数据排序，估计运行速度会差很多）。]]></description><category></category></item></channel></rss>