随笔分类 - Algorithm
一致性哈希算法
摘要:一致性哈希算法 使用场景 现在我们假设有100台redis data服务器,一份数据101进来的时候,以散列公式hash(i)&100,计算所存放的服务器,假设hash(i) = i,那么数据被散列到标号为1的服务器,然后这个时候服务器新增了一台,然后散列公式为hash(i)%101,这个时候请求访
阅读全文
编程珠玑-外部排序问题
摘要:问题描述:n个不同的数,范围在0~10的7次方之间(为了追求模拟效果,也就是排序的内容超出了内存容量,用的10的8次方),然后需要我们用有限的内存和时间内尽快排序,注意,不能有相同的数字.否则出错1.问题准备,首先要准备0-10的7次方之间的数据打乱后放到磁盘中,那么我们有两种实现方式实现方式1: ...
阅读全文
记录开发代码量的小程序
摘要:这段时间在开发网站,想要去记录自己的开发代码量,所以写了一个小脚本,用来记录,代码如下: 1 #-*- coding: UTF-8 -*- 2 #用来检测当前的代码量 3 import sys,os 4 #全局变量,记录当前的代码行数 5 count = 0 6 #根据文件名称指定文件读取策略,...
阅读全文
在所有的输入的数里面找出具有最高频率而且频率相同的数
摘要:如题,比如输入1 1 1 1 2 2 2 2 3 3 3 4 4 4 4 4 4 5 5 5 ,那么输出的应该是1 2 ,因为他们出现的频率相同的情况下,出现的频率是最高的,附上代码 1 #include 2 3 using namespace std; 4 5 //简化一下 设置输入的文字的...
阅读全文
线性筛选法求质数
摘要:还是之前的问题,求出MAXSIZE以内的所以质数下面我们看下原理所有的合数都可以分解为两个数的乘积,那么我们建立一个isPrime[MAXSIZE+1]的表,先把所有的元素设置成默认为是质数,true,设置两重循环,将i*j处的值设置成false,这样最后得到的是true元素对应的角标就是质数了,下面附上代码:#include #include using namespace std;#define max 99999int prime[max+1];bool isPrime[max+1];int count = 0;int main(){ for (int i = 0;i #inclu...
阅读全文
Eratosthenes筛选法求解质数
摘要:问题说明:除了自身之外,无法被其它整数整除的数称之为质数,要求质数很简单,但如何快速的求出质数则一直是程式设计人员与数学家努力的课题, 在这边介绍一个着名的 Eratosthenes求质数方法。解法:首先知道这个问题可以使用回圈来求解,将一个指定的数除以所有小于它的数,若可以整除就不是质数,然而如何减少回圈的检查次数?如何求出小于N的所有质数?我们先来看一个丧心病狂的低效率的解决方式://检验质数bool checkZS(int a){ for (int i = 2;i #include using namespace std;#define n 99999int main(){ ...
阅读全文
蒙地卡罗法求 PI
摘要:问题: 蒙地卡罗为摩洛哥王国之首都,该国位于法国与义大利国境,以赌博闻名。蒙地卡罗的基本原理为以乱数配合面积公式来进行解题,这种以机率来解题的方式带有赌博的意味,虽然在精确度上有所疑虑,但其解题的思考方向却是个值得学习的方式。算法说明:蒙地卡罗的解法适用于与面积有关的题目,例如求PI值或椭圆面积,这边介绍如何求PI值;假设有一个圆半径为1,所以四分之一圆面积就为PI,而包括此四分之一圆的正方形面积就为1,如下图所示:其中c为落在圆中的次数,n为落在正方形中的次数代码如下:/*问题:蒙地卡罗法求 PI蒙地卡罗为摩洛哥王国之首都,该国位于法国与义大利国境,以赌博闻名。蒙地卡罗的基本原理为以乱数配合
阅读全文
背包问题(Knapsack problem)采用动态规划求解
摘要:问题说明:假设有一个背包的负重最多可达8公斤,而希望在背包中装入负重范围内可得之总价物品,假设是水果好了,水果的编号、单价与重量如下所示:0李子4KGNT$45001苹果5KGNT$57002橘子2KGNT$22503草莓1KGNT$1100解法背包问题是关于最佳化的问题,要解最佳化问题可以使用「动态规划」 (Dynamicprogramming) ,从空集合开始,每增加一个元素就先求出该阶段的最佳解,直到所有的元素加入至集合中,最后得到的就是最佳解。下面我们看下代码:/*问题:假设有一个背包的负重最多可达8公斤,而希望在背包中装入负重范围内可得之总价物品算法说明:采用动态规划,在当前阶段求解
阅读全文
字符串核对之Boyer-Moore算法
摘要:算法说明:在计算机科学里,Boyer-Moore字符串搜索算法是一种非常高效的字符串搜索算法。它由Bob Boyer和J Strother Moore设计于1977年。此算法仅对搜索目标字符串(关键字)进行预处理,而非被搜索的字符串。虽然Boyer-Moore算法的执行时间同样线性依赖于被搜索字符串的大小,但是通常仅为其它算法的一小部分:它不需要对被搜索的字符串中的字符进行逐一比较,而会跳过其中某些部分。通常搜索关键字越长,算法速度越快。它的效率来自于这样的事实:对于每一次失败的匹配尝试,算法都能够使用这些信息来排除尽可能多的无法匹配的位置。算法原理:假设被检索文字列是“1234567890”
阅读全文
在一个很长的字符串中搜索自定义字符串的问题(通过多线程实现)
摘要:问题:今日的一些高阶程式语言对于字串的处理支援越来越强大(例如Java、Perl等),不过字串搜寻本身仍是个值得探讨的课题.今天看到这个题目,我在想,能不能通过多线程的形式,一个线程用于搜索位置,主线程用于比对,这样子同一时刻在做两件事,效率就提高了,我们来看下代码:#include #include #include using namespace std;#define MAXSIZE 1690#define Search_Size 3//上面定义搜索的长度,下面定义搜索的字符char SH[Search_Size] = "ab";char A[MAXSIZE] = &
阅读全文
老鼠走迷宫
摘要:#include #include #include using namespace std;int MG[7][7]={{2,2,2,2,2,2,2}, {2,0,0,0,0,0,2}, {2,0,2,0,2,0,2}, {2,0,0,2,0,2,2}, {2,2,0,2,0,2,2}, {2,0,0,0,0,0,2}, {2,2,2,2,2,2,2}};void printMG(){ for (int i = 0;i LJ;//定义一个栈,用于保存路径int SPosit[2] = {1,1};//入口位置int EPosit[2] = {5,5};//出口位置bool state...
阅读全文
三色旗帜分类
摘要:问题描述:假设有一条绳子,上面有红、白、蓝三种颜色的旗子,起初绳子上的旗子颜色并没有顺序,您希望将之分类,并排列为蓝、白、红的顺序,要如何移动次数才会最少,注意您只能在绳子上进行这个动作,而且一次只能调换两个旗子。#include #include using namespace std;//三色旗算法://假设有一条绳子,上面有红、白、蓝三种颜色的旗子,起初绳子上的旗子颜色并没有顺序,您//希望将之分类,并排列为蓝、白、红的顺序,要如何移动次数才会最少,注意您只能在绳子上//进行这个动作,而且一次只能调换两个旗子。//算法说明:要使用最少的个数,就是用一个脚标从头开始移动,碰到红色就放到前面
阅读全文
巴斯卡三角形
摘要:先看程序运行结果可以看出第i行的元素是由上一行的元素得来的,下面是我写的算法:#include using namespace std;#define max 10//写的递归函数int calculate(int *pretemp,int row){ //跳出条件 if (row > max) { delete pretemp; return 0; } //刚开始第一行的时候指针为空 if (pretemp == NULL) { for(int i = 1;i #defineN12longcombi(intn...
阅读全文
浙公网安备 33010602011771号