【发布时间】:2021-10-12 21:53:51
【问题描述】:
给定一个描述超矩阵的字符串,例如
"[[[1,2],[4,5],[6,7]]" which is a 3,2 matrix
或
"[[1,2,3],[4,5,6]]" which is a 2,3 matrix
或
"[ [[1,2],[3,4],[4,6]], [[7,8],[9,10],[11,12]] ]" which is a 2,3,2 matrix
等
有没有找到矩阵维度的好方法?例如,我正在寻找一种算法,它会为第三个矩阵报告 2,3,2。我可以保证每个维度都有不变的元素,即没有丢失的数字。可以假设字符串可以被标记为整数、逗号和左右方括号。我对可能使用的方法更感兴趣,我认为它可能是递归的。我玩弄了建造一棵树的想法,但我不确定这最终会有所帮助。显然,我可以使用 numpy 并查看形状非常轻松地使用 python 做到这一点,但我正在寻求可能的算法的建议。
【问题讨论】:
-
(1) 遍历字符串并维护一个名为
depth的变量,初始化为 0,在每个 '[' 处增加 1,在每个 ']' 处减少 1。 (2) 在遍历字符串时,计算每个深度的逗号数。保留一个计数器列表,以便每个深度都有一个计数器。只要变量depth首次再次小于该深度,就停止计算给定深度的逗号。 -
哇,谢谢你的快速回答,我先研究一下。
-
检查一串括号是否正确平衡是一个标准问题;见Wikipedia: Dyck language。了解如何使用递归或迭代来解析带括号的字符串非常有用。您不仅需要它来确定矩阵的维度,还需要解析算术表达式,例如 3*(4-(5+6))
-
我可以解析表达式,但我有一个生成维度的心理障碍。