UVaOJ 644 - Immediate Decodability

AOAPC I: Beginning Algorithm Contests (Rujia Liu) :: Volume 1. Elementary Problem Solving :: String


Description

通讯中的编码方式,要求每个字符对应的二进制编码,

不能是其他字符对应编码的前缀。

对于几组编码方式,检查是否可行。


Type

String


Analysis

判断每个字符串是否是其他字符串的前缀即可。

如果存在某个字符串是其他字符串的前缀,则编码不可行。

(题目实在太直白了,感觉只是把题目又念了一遍)


Solution

// UVaOJ 644
// Immediate Decodability
// by A Code Rabbit

#include <cstdio>
#include <iostream>
#include <string>
using namespace std;

const int MAXN = 100000;

string str[MAXN];
int top;

bool IsPrefix(string , string);

int main() {
    int cnt_case = 0;
    top = 0;
    while (cin >> str[top]) {
        if (str[top] == "9") {
            bool bo = false;
            for (int i = 0; i < top; i++)
                for (int j = 0; j < top; j++)
                    if (i != j && IsPrefix(str[i], str[j]))
                        bo = true;
            printf("Set %d is %simmediately decodable\n", ++cnt_case, bo ? "not " : "");
            top = 0;
        } else {
            top++;
        }
    }

    return 0;
}


bool IsPrefix(string a, string b) {
    for (int i = 0; i < a.length(); i++)
        if (a[i] != b[i]) return false;
    return true;
}
 
【直流微电网】径向直流微电网的状态空间建模与线性化:一种耦合DC-DC变换器状态空间平均模型的方法 (Matlab代码实现)内容概要:本文介绍了径向直流微电网的状态空间建模与线性化方法,重点提出了一种基于耦合DC-DC变换器状态空间平均模型的建模策略。该方法通过对系统中多个相互耦合的DC-DC变换器进行统一建模,构建出整个微电网的集中状态空间模型,并在此基础上实施线性化处理,便于后续的小信号分析与稳定性研究。文中详细阐述了建模过程中的关键步骤,包括电路拓扑分析、状态变量选取、平均化处理以及雅可比矩阵的推导,最终通过Matlab代码实现模型仿真验证,展示了该方法在动态响应分析和控制器设计中的有效性。; 适合人群:具备电力电子、自动控制理论基础,熟悉Matlab/Simulink仿真工具,从事微电网、新能源系统建模与控制研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①掌握直流微电网中多变换器系统的统一建模方法;②理解状态空间平均法在非线性电力电子系统中的应用;③实现系统线性化并用于稳定性分析与控制器设计;④通过Matlab代码复现和扩展模型,服务于科研仿真与教学实践。; 阅读建议:建议读者结合Matlab代码逐步理解建模流程,重点关注状态变量的选择与平均化处理的数学推导,同时可尝试修改系统参数或拓扑结构以加深对模型通用性和适应性的理解。
**HT-Immediate Block Ack(高吞吐量即时块确认)** 是 IEEE 802.11n 标准中定义的一种确认机制,用于在高吞吐量(HT)无线局域网中更高效地确认多个 MPDU 的接收情况。它是 **BlockAck(块确认)机制的一种实现方式**,并且在接收端收到聚合帧(A-MPDU)后**立即返回 BlockAck 响应帧(BA)**,以提升无线通信的效率。 --- ## ✅ 一、HT-Immediate Block Ack 的定义 ### ✅ 1. **定义** HT-Immediate Block Ack 是指: - 发送端使用 **BlockAck No Ack Policy** 发送多个 MPDU; - 接收端在收到这些 MPDU 后,**立即发送 BlockAck(BA)帧**,而不是对每个 MPDU 单独进行 ACK; - BA 帧中包含一个 bitmap,表示哪些 MPDU 已成功接收。 ### ✅ 2. **主要目的** - 减少每个 MPDU 的确认开销; - 支持 A-MPDU(聚合 MPDU)传输; - 提高无线网络的吞吐量和效率。 --- ## ✅ 二、HT-Immediate Block Ack 的工作流程 ### ✅ 1. **BlockAck 会话建立** - 通信双方通过 **ADDBA Request/Response** 帧协商 BlockAck 参数(如窗口大小、TID、起始序列号等); - 建立 BlockAck 会话。 ### ✅ 2. **发送端发送 A-MPDU** - 使用 BlockAck No Ack Policy; - 多个 MPDU 被聚合为一个 A-MPDU 发送; - 不要求每个 MPDU 都立即收到 ACK。 ### ✅ 3. **接收端处理 A-MPDU** - 将每个 MPDU 插入重排序缓冲区(Reorder Buffer); - 若收到 BAR 帧,则立即返回 BA 帧; - 若未收到 BAR,但 BlockAck Policy 是 Immediate,则在收到最后一个 MPDU(MoreFrag=0)后**立即返回 BA 帧**。 ### ✅ 4. **发送端接收 BA 帧** - 根据 BA 的 bitmap 判断哪些 MPDU 成功接收; - 对未确认的 MPDU 进行重传。 --- ## ✅ 三、BlockAck Policy 类型 IEEE 802.11 支持以下几种 BlockAck 策略: | BlockAck Policy | 是否需要 BAR | 是否立即返回 BA | 说明 | |------------------|--------------|------------------|------| | Normal Ack Policy | ❌ 否 | ❌ 否 | 每个 MPDU 都需要单独确认(传统方式) | | BlockAck No Ack Policy | ✅ 是 | ❌ 否 | 需要 BAR 触发 BA 响应 | | HT-Immediate BlockAck | ❌ 否 | ✅ 是 | 接收端收到最后一个 MPDU 后立即返回 BA | --- ## ✅ 四、HT-Immediate BlockAck 的帧交互示例 ```text STA A (发送端) AP (接收端) | | |<----- A-MPDU (MPDU 1, 2, 3) ---->| | | |<----- BlockAck (BA) bitmap ----->| | | ``` - A-MPDU 中包含多个 MPDU; - 接收端在收到最后一个 MPDU 后,立即返回 BA; - BA 中的 bitmap 表示哪些 MPDU 已接收。 --- ## ✅ 五、C语言模拟 HT-Immediate BlockAck 的行为 以下是一个简化版的 BlockAck 机制模拟,展示 HT-Immediate BlockAck 的基本行为: ```c #include <stdio.h> #include <stdint.h> #include <string.h> #define MAX_SEQ 4096 #define WINDOW_SIZE 64 typedef struct { uint16_t seq; int received; } MPDU_STATUS; MPDU_STATUS scoreboard[MAX_SEQ]; // 用于记录接收状态 int start_seq = 0; // BlockAck 窗口起始序列号 // 初始化 scoreboard void init_scoreboard() { for (int i = 0; i < MAX_SEQ; i++) { scoreboard[i].received = 0; } } // 接收一个 MPDU,并记录其序列号 void receive_mpdu(uint16_t seq, int is_last_frag) { printf("Received MPDU: Seq %d\n", seq); scoreboard[seq].seq = seq; scoreboard[seq].received = 1; // 如果是最后一个分片,且是 HT-Immediate BlockAck Policy if (is_last_frag) { printf("Triggering HT-Immediate BlockAck...\n"); send_blockack(); } } // 发送 BlockAck 帧(包含 bitmap) void send_blockack() { printf("Sending BlockAck (BA) Frame:\n"); printf("Bitmap: "); for (int i = 0; i < WINDOW_SIZE; i++) { uint16_t seq = (start_seq + i) % MAX_SEQ; if (scoreboard[seq].received) { printf("1"); } else { printf("0"); } } printf("\n"); } int main() { init_scoreboard(); // 模拟接收 A-MPDU 中的多个 MPDU receive_mpdu(100, 0); // MoreFrag = 1 receive_mpdu(101, 0); receive_mpdu(102, 1); // MoreFrag = 0 -> 触发 BlockAck return 0; } ``` --- ## ✅ 六、总结 | 内容 | 说明 | |------|------| | ✅ HT-Immediate BlockAck 是什么? | IEEE 802.11n 中的块确认机制 | | ✅ 是否需要 BAR 帧? | 否 | | ✅ 是否立即返回 BA? | 是 | | ✅ 主要优点 | 减少确认开销,提高吞吐量 | | ✅ 适用场景 | A-MPDU 聚合传输 | --- ###
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值