ZZA的项目学习开发文档和算法学习笔记5/2

23 篇文章 0 订阅
17 篇文章 1 订阅

先复习一下数据结构

考察 T r i e Trie Trie算法的题目通常会限制:字符串只有小写英文字母或者大写英文字母,且字母通常为 26 26 26 52 52 52

trie树可以保证在 O ( n ) O(n) O(n)的时间复杂度下储存和查找字符串

字典树的数组实现方式:

开两个数组:cnt[N], son[N][26],分别用来存储:以某个节点结尾的字符串的数量某一个节点的所有子节点

插入操作:

#include<bits/stdc++.h>

using namespace std;

const int N = 10100;

int cnt[N], son[N][26], idx;

void insert(char str[]){
	int p = 0;
	for (int i = 0; str[i]; i ++ ){
		int u = str[i] - 'a';
		if (!son[u][p]) son[p][u] = ++ idx;
		p = son[p][u];
	}
	cnt[p] ++ ;
}

注解: 这里的idx并不会更新为 0 0 0,综上,不同的节点上的idx都是不一样的
还要将字符串上的每一个字符都映射到 0 − 25 0-25 025之间的数字,便于利用下标储存
在这里插入图片描述
只有一直沿着同一条路走才有相同的son[][],在路上出现分支时,那么在分支往后的地方所有的值都不一样,这就是用数组模拟的成功之处。

查询操作和插入操作一样

例题:
T r i e 字 符 串 统 计 Trie字符串统计 Trie
在这里插入图片描述
代 码 : 代码:

#include<iostream>

using namespace std;

const int N = 100010;

int son[N][26], cnt[N], idx;

char str[N];

void insert(char str[]) {
    int p = 0;
    for (int i = 0; str[i]; i++) {
        int u = str[i] - 'a';
        if (!son[p][u]) son[p][u] = ++idx;
        p = son[p][u];
    }
    cnt[p] ++;
}

int query(char str[]) {
    int p = 0;
    for (int i = 0; str[i]; i++) {
        int u = str[i] - 'a';
        if (!son[p][u]) return 0;
        p = son[p][u];
    }
    return cnt[p];
}

int main() {
    int n;
    cin >> n;
    while (n--) {
        char op[2];
        cin >> op >> str;
        if (op[0] == 'I') insert(str);
        else cout << query(str) << endl;
    }
}

P y g a m e − L e a r n i n g Pygame-Learning PygameLearning

理解 精灵 和 精灵组

在之前我写的图像加载、位置变化、绘制图像 都需要自己编写代码分别处理
但是为了简化开发步骤,pygame 提供了两个类:
pygame.sprite.Sprite()pygame.sprite.Group

游戏框架大概如下图所示:
在这里插入图片描述

其中第一个用于储存图像数据 i m a g e image image和图像位置信息 R e c t Rect Rect的对象

在游戏开发中,通常把 显示图像的对象 叫做精灵( Sprite)

精灵组

一个精灵组可以包含多个精灵对象
1.调用 精灵组 对象的 update()方法
2.可以 自动调用 组内每一个精灵的update() 方法

调用 精灵组 对象的 draw(屏幕对象) 方法

可以将 组内每一个精灵 的 image 绘制在 rect 位置

import pygame


class GameSprite(pygame.sprite.Sprite):
    """游戏精灵基类"""
    
    def __init__(self, image_name, speed=1):
        
        # 调用父类的初始化方法
        super().__init__()
        
        # 加载图像
        self.image = pygame.image.load(image_name)
        # 设置尺寸
        self.rect = self.image.get_rect()
        # 记录速度
        self.speed = speed

    def update(self, *args):
        
        # 默认在垂直方向移动
        self.rect.y += self.speed
        

目的就是简化操作,因为调用精灵对象使代码效率大大增加

目前的 p y g a m e pygame pygame最基本的操作已经基本学习完了,但是 P y t h o n Python Python基本功不够扎实导致 P y g a m e Pygame Pygame的进阶操作无法学习,所以从现在开始夯实基础知识

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值