用空间换取时间(哈希算法)

哈希算法:简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数,Hash算法是一个广义的算法,也可以认为是一种思想,使用Hash算法可以降低时间复杂度
例题:遍历B中所有元素看是否在A中存在(A是否包含于B)
代码如下:
bool checkString1(const char *A,const char *B)
{
const char *pa;
const char *pb;
for(pb=B;*pb!=’\0’;pb++)
{
for(pa=A;*pa!=’\0’;pa++)
{
if(*pb == *pa)
{
break; //跳出一层循环
}
}
if(*pa == ‘\0’) // 没有找到(有一个不在直接return false)
{
return false;
}
}
return true;
}

int main()
{
const char *str1 = “abcdeabcxyzzz”;
const char *str2 = “ababcdddexx”;
if(checkString1(str1,str2))
{
printf(“str1>=str2\n”);
}
else
{
printf(“不存在\n”);
}
return 0;
}
总结:时间复杂度为O(n^2)空间复杂度为O(1)
改进:
bool checkString(const char *A,const char *B)
{
int arr[26] = {0}; //0:‘a’,1:‘b’,2:‘c’,3:‘d’,4:‘e’… y=x-‘a’
while(*A != ‘\0’) //登记A中所有的字母
{
arr[*A-‘a’] = 1; //++ O(1),哈希
A++;
}
while(*B != ‘\0’)
{
if(arr[*B-‘a’] == 0)
{
return false;
}
B++;
}
return ture;
}

int main()
{
const char *str1 = “abcdeabcxyzzz”;
const char *str2 = “ababcdddexx”;
if(checkString1(str1,str2))
{
printf(“str1>=str2\n”);
}
else
{
printf(“不存在\n”);
}
return 0;
}
总结:时间复杂度为O(1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值