D1字符串哈希

字符串哈希

具体流程

1.选取两个互质函数b、h(b<h),这里h也可以用unsigned long long等使自然溢出

2.初始化b^n(n=1,2,3...)

3.递推求出哈希值 h[i]=h[i-1]*d+s[i] h[0]=0;

4.注意 s[i]不能为零

T1 寻找主串中匹配串出现的次数

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#define ULL unsigned long long
using namespace std;
const ULL N=1000001;
const ULL b=999979;
ULL power[N],sum[N];
int T;
int main()
{
    power[0]=1;
    for(int i=1;i<N;++i)
        power[i]=power[i-1]*b;//预处理 
    scanf("%d",&T);
    while(T--){
        char s1[N],s2[N];
        scanf("%s%s",s1+1,s2+1);
        int len1=strlen(s1+1),len2=strlen(s2+1);
        sum[0]=0;
        for(int i=1;i<=len2;i++)
            sum[i]=sum[i-1]*b+(ULL)(s2[i]-'A'+1);
        ULL s=0;//匹配串的哈希值
        for(int i=1;i<=len1;i++)
            s=s*b+(ULL)(s1[i]-'A'+1);
        int ans=0;
        for(int i=0;i<=len2-len1;i++)
        {
            if(s==sum[i+len1]-sum[i]*power[len1])
                ans++;
        }
        printf("%d\n",ans);
    }
    return 0;
}
字符串匹配

哈希表

T1 图书管理

add 书名 新加入

find 书名 查找 输出yes/no

1.head数组记得要取比模数大!

2.cin>>数组名称读入到空格;gets(数组名称)读入剩余一整行

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int mod1=1e6+3,mod2=1e6+9,pl=47,p2=79,N=30000;
int tot=0,nex[N+5],head[mod1+5],end[N+5];
void insert(int x,int y)//哈希表插入操作 邻接表 
{
    nex[++tot]=head[x];
    head[x]=tot;
    end[tot]=y;
}
int query(int x,int y)
{
    for(int i=head[x];i;i=nex[i])
    {
        if(end[i]==y)
            return 1;
    }
    return 0;
}
int main()
{
    int n;
    scanf("%d",&n);
    while(n--)
    {
        char s[205],op[10];
        cin>>op;
        gets(s); 
        int len=strlen(s);
        int sum1=0,sum2=0;
        for(int i=0;i<len;i++)
        {
            sum1=(sum1*pl+s[i])%mod1;
            sum2=(sum2*p2+s[i])%mod2;
        }//双哈希
        if(op[0]=='a')
            insert(sum1,sum2);
        else
        {
            if(query(sum1,sum2))
                printf("yes\n");
            else printf("no\n");
        }
    }
    return 0;
}
图书管理

 

转载于:https://www.cnblogs.com/WJill/p/11229512.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值