- 浏览: 512052 次
- 性别:
- 来自: 北京
最新评论
-
jkxydp:
算法运行的结果根本就不对。
BM算法. -
soarwindzhang:
感谢博主的分享,我今天看了您的UFSET非递归的路径压缩时感觉 ...
并查集 -
zhangning290:
楼主好像只考虑了坏字符规则,。没有考虑好后缀
BM算法. -
lsm0622:
文字描述有错误 误导新学者
求有向图的强连通分量(scc):Tarjan算法 -
knightchen:
博主,你太强了!这篇文章对我学习C++多线程很有帮助!谢谢
并发学习之一_windows下ZThread在CodeBlocks上的安装与配置
文章列表
1,HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。 它是一个URI scheme(抽象标识符体系),句法类同http:体系。用于安全的HTTP数据传输。https:URL表明它使用了HTTP,但HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)。这个系统的最初研发由网景公司进行,提供了身份验证与加密通讯方法,现在它被广泛用于万维网上安全敏感 ...
ant:一种编译打包工具.
(1)Ant是一种基于Java的build工具。理论上来说,它有些类似于(Unix)C中的make ,但没有make的缺陷。
(2)既然我们已经有了make, gnumake, nmake, jam以及其他的build工具为什么还要要一种新的build工具呢?因为Ant的原 ...
1,简介:
curl是一个利用URL语法在命令行方式下工作的文件传输工具。
它支持很多协议:FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以及 LDAP。
curl同样支持HTTPS认证,HTTP POST方法, HTTP PUT方法, FTP上传, kerberos认证, HTTP上传, 代理服务器, cookies, 用户名/密码认证, 下载文件断点续传, 上载文件断点续传, http代理服务器管道( proxy tunneling), 甚至它还支持IPv6, socks5代理服务器, 通过http代理服务器上传文件到FTP服务器等等, ...
1,原理:
密匙认证需要依靠密匙,首先创建一对密匙(包括公匙和密匙,并且用公匙加密的数据只能用密匙解密),并把公匙放到需要远程服务器上。这样当登录远程服务器时,客户端软件就会向服务器发出请求,请求用你的密匙进行认证。服务器收到请求之后,先在你在该服务器的宿主目录下寻找你的公匙,然后检查该公匙是否是合法,如果合法就用公匙加密一随机数(即所谓的challenge)并发送给客户端软件。客户端软件收到 “challenge”之后就用私匙解密再把它发送给服务器。因为用公匙加密的数据只能用密匙解密,服务器经过比较就可以知道该客户连接的合法性。
2,核心:
将客户端的公钥拷贝到远端机器即可.
这样客户端 ...
1,有不限数目的1、5、10、20、50面额的纸币,有多少种方法凑出100元
解答:实质就是暴力枚举
#include<iostream>
#include<cstring>
using namespace std;
const int Len = 5;
int ans = 0;
int m[Len] = {50, 20, 10, 5, 1};
int total[Len] = {2, 5, 10, 20, 100};
int n[Len];
int sum = 100;
void GetNum(int m[], int n[])
{
...
1,一段实例代码:
void DeleteListNode(node* pCurrent)
{
assert(pCurrent != NULL);
node* pNext = pCurrent -> next;
if (pNext == NULL)
pCurrent = NULL;
else
{
pCurrent -> next = pNext -> next;
pCurrent -> data = pNext -> data;
delete pNext;
}
}
1,一步
增加,删除,或修改一个字符。
2,计算总步数,使得两个字符串相等。
注:增加一个字符和删除一个字符实质是一样的。
问题可以归结为:
(1)一步操作后,再将A[2,...]和B[1,...]变成相同字符串。
(2)一步操作后,再将A[1,...]和B[2,...]变成相同字符串。
(3)一步操作后,再将A[2,...]和B[2,...]变成相同字符串。
3,得到一种递归的方法:
#include<iostream>
#include<cstring>
using namespace std;
int minValue(int t1, int t2 ...
方法一、
神奇的双重while循环。
注:显然可以利用这种方法,打印出任意一个N维数组的任意组合。
方法二、递归(实质就是DFS)
实例代码:
#include<iostream>
#include<cstring>
using namespace std;
//键盘数字上的字符
char c[10][10] = {
"", "", "ABC", "DEF",
"GHI", "JKL", "MNO" ...
1,题意:给定s1和s2,判定s2是否能够被s1做循环移位得到的字符串包含。
2,解决:
方法一:
#include<iostream>
#include<cstring>
using namespace std;
bool isMatch(char* src, char* des)
{
int len = strlen(src);
for (int i = 0; i < len; i++)
{
char tempchar = src[0];
for (int j = 1; j &l ...
1,可以将者看成两个独立的问题。
个需要比较N次,需要比较2*N次。
2,我们可以两两分组。
每一对中较小的放左边,较大放右边。 N/2次。
奇数位比较N/2次,找到最小值。
偶数位比较N/2次,找到最大值。
总的比较次数:1.5N。
缺点:破坏了原数组。
3,维持两个变量min和max。
取出两个数,相比较1次。
较小的和min比较,决定是否更新min。
同理,更新max。
可见处理两个数,比较3次。
总的比较次数:1.5N
优点:不会破坏原来的数组。
4,分治思想
#include <iostream>
using namespace std;
void max ...
1,方法一:
最经典的辗转相除法.
int gcd(int x, int y)
{
return (!y)? x:gcd(y, x % y);
}
缺点:取模运算开销较大,容易成为瓶颈.
2,方法二:
int gcd(int x, int y)
{
if (x < y)
return gcd(y, x);
if (y == 0)
return x;
else
return gcd(x-y, y);
}
缺点:免去了取模,迭代次数却增加了不少.
3,方法三:
有效利用x,y的奇偶性.
若x,y均为偶数,则f(x,y) = 2*f ...
1,题意:把一个含有N个元素的数组循环右移K位.
2,注意:这里有个潜在的误区,一般人都会假设K < N.
3,实现代码:
void Reverse(int data[], int b, int e)
{
while (b < e)
{
data[b] ^= data[e];
data[e] ^= data[b];
data[b] ^= data[e];
}
}
void RightShift(int data, int N, int K)
{
K %= N; //核心:避免这个误区
Reverse(data, 0, N - ...
1,题意:2n个正整数,分成两组n,使其和最接近.
2,思路:
动态规划: isOK[i][v]表示是否可以找打i个数,使得他们之和等于v.
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
const int m = 0xffff;
bool isOK[100][m];
void HalfSum(int data[], int N)
{
memset(isOK, 0, sizeof(isOK));
isOK ...
1,如果N可以分解为几个连续整数的和,则N的因式分解必然要有奇数。
证明如下:
a. 首先证明,只要N的因式分解中有奇数,N就能表示为自然数连和。
如果N的因式分解中有奇数,假设为s,且N= k * s,
如果k > s/2,
则 N可以表示为这个序列的和:k - (s / 2), k - (s / 2) + 1 ... k + (s / 2);
例如 54 = 6 x 9, 可表示为 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10;(6 x 9,偶数为6,则6在这9个自然数的序列的中间)
如果 k & ...
1,问题实质:寻找数组中出现的半数以上的数.
int MoreHalfNum(int data[], int n)
{
int ret;
int nTime = 0;
for (int i = 0; i < n; ++i)
{
if (nTime == 0)
{
ret = data[i];
++nTime;
}
else
{
if (data[i] == ret)
...