Young Tableau问题的随笔

本文介绍了一种使用递归算法解决YoungTableau填数问题的方法,即在一个由N个小方块组成的特定形状内,从1到N的整数按规则填入,求所有合法填法的数量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Young Tableau问题的描述是这样的,一个由N个小方块组成的阵列(不一定要是矩形,可以是一个任意"光滑"且"单调"的组合),从1到N这N个数填入方块中,要求全部填满并且一个数只能填一个方格一次.并且满足,每个数的上方的数和左方的数比它大.求最后一共有多少种填法.比如一个4*4格子的正方形,1~16这16个数按照上述规则填入,那么一共多少种填法.

笔者根据理解,还是用程序实现了一下算了.不遍历输出所有种类的填法,只算数目而已.语言就用java,比较没挑战性,就练习一下.思想主要就一个递归:16肯定是占据左上角的格子,然后15就可以有两个选择了,对每种选择依次填下去.
笔者的解决方法,觉得可以视为一个树状展开,树的层次从上到下依次可看做16,15,14...,3,2,1. 比如填入15时可以有两个格可选,那么对目前来说就是两个叶子节点,对每一个15的填法,填14时就按照规则找到14可以填的格子作为该节点的儿子,最终要找的就是有多少个叶子节点而已.
需要根据题目的要求找到依次每个数(从16 downwards to 1)填入时有多少种可填法,填完了就将此格置位.某个格子在某个时刻是不是可填,依赖于上方和左方的格子是否已填,如果上方或者左方是边界,那么就如同已填.
代码如下:
public void find(){
boolean[][]initialMatx = generateMatx();
int nowFilling=ROW*COLUMN-1;
System.out.println(doExpend(nowFilling, initialMatx));
}

其中
private int doExpend(int nowFilling, boolean[][] nowMatx)
为递归函数,找到该节点有多少种填法后,把信息布尔矩阵复制并更新一遍,进行迭代即可.需要注意的是返回值,每个节点新增的儿子数需要减1(也就是父亲自己)才是迭代到当前的叶子节点的新增数,于是把此节点的兄弟姐妹数加上SUM(每个兄弟姐妹的儿子节点的数目-1)就是当前的叶子节点数,如果迭代完毕,到了数字1(实际上,只需要进行到数字3完成就可以了,因为2和1必定无法继续增加系统的叶子),则返回1,因为它只有自身,作为一片叶子而存在.
private int doExpend(int nowFilling, boolean[][] nowMatx) {
if(nowFilling==1){
return 1;
}
List<Grid> thisCount = findLegalGridToFill(nowMatx);
int[] ChildNumber = new int[thisCount.size()];
for (int k = 0; k < thisCount.size(); k++) {
Grid grid = thisCount.get(k);
//为每个分支复制新的matx,递归,结果累加至返回值
int stepNew = nowFilling -1;
boolean[][] thisNewMat = this.getNewMatx(nowMatx, grid.getRow(), grid.getCol());
ChildNumber[k]=doExpend(stepNew, thisNewMat);
}
int ExpandingDiff=0;
for(int ch = 0;ch<ChildNumber.length;ch++){
ExpandingDiff+=(ChildNumber[ch]-1);
}
return thisCount.size()+ExpandingDiff;
}
### Tableau 常见问题及解决方法 #### 1. 图形未正常显示 当在使用 Tableau 创建可视化时,如果图形未能正常显示,可能由以下几个原因引起: - 数据源连接异常:确认数据源已成功连接并加载至工作表中[^1]。 - 字段映射错误:检查维度和度量字段是否被正确分配到列或行架構中[^1]。 - 计算逻辑问题:查看是否有自定义计算字段存在语法错误或其他不兼容的情况[^1]。 ```python # 示例代码用于验证Python脚本调用Tableau REST API是否存在配置问题 import tableauserverclient as TSC server = 'https://your-tableau-server' username = 'your_username' password = 'your_password' tableau_auth = TSC.TableauAuth(username, password) server_connection = TSC.Server(server) try: with server_connection.auth.sign_in(tableau_auth): all_workbooks, pagination_item = server_connection.workbooks.get() except Exception as e: print(f"Error connecting to the server: {e}") ``` #### 2. 学习困难与资源不足 对于初次接触 Tableau 的用户来说,可能会感到难以入手或者无法快速掌握其功能。以下是几种有效的应对策略: - 利用官方文档进行系统化学习,特别是《Get Started Tutorial》系列教程[^2]。 - 实践驱动的学习方式至关重要;建议寻找公开可用的数据集来进行反复练习[^2]。 - 积极参与 Tableau 用户社区交流活动,从中汲取灵感并与同行建立联系[^2]。 #### 3. 日志文件解析难题 某些情况下,用户可能需要通过分析日志文件来排查具体的技术故障。然而,在不同操作系统环境下(如基于M1芯片的Mac设备),启动 `Tableau Log Viewer` 可能面临额外挑战。 - 对于 M1 芯片支持情况下的特殊处理措施已被记录下来作为指导手册的一部分[^3]。 #### 4. REST API 使用障碍 开发人员利用 Tableau 提供的RESTful接口实现自动化任务管理时常会遭遇困惑之处。 - 明确所选API版本需匹配目标服务器端部署状况[^4]。 - 推荐借助Postman工具测试请求参数设置准确性以便调试更高效[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值