卓越飞翔博客卓越飞翔博客

卓越飞翔 - 您值得收藏的技术分享站
技术文章20258本站已运行347

在一个扩展矩阵中,返回C++中的前一个元素

<?xml encoding="utf-8" ?>

在一个扩展矩阵中,返回C++中的前一个元素

基于扩展矩阵讨论一个问题。扩展矩阵是尺寸按某个因子不断增加的矩阵。

这里我们有一个字符矩阵,其尺寸按2的倍数扩展,即如果原始矩阵的尺寸是N * N,那么扩展后的矩阵尺寸变为2N * 2N。我们给出了一个字符序列位于 (i, j) 处,我们需要返回位于 (i, (j - N - 1)%N) 处的字符序列。

让我们通过可视化一些初始扩展矩阵来理解。

Given Matrix -> [ a, b ] [ c, d ], 2 X 2 matrix
Multiplying with { a, b, c, d }
A X [ a, b ]
B X [ a, b ]
C X [ a, b ]
D X [ a, b ]
[ c, d ] [ c, d ] [ c, d ] [ c, d ]

Expanded Matrix -> [ aa, ab, ba, bb ]
[ ac, ad, bc, bd ]
[ ca, cb, da, db ]
[ cc, cd, dc, dd ], 4X4 matrix
To expand again, multiply it by { a, b, c, d } and a matrix of size 8X8 will be formed.

Expanded Matrix - > [ aaa, aab, aba, abb, baa, bab, bba, bbb ]
[ aac, aad, abc, abd, bac, bad, bbc, bbd ]
[ aca, acb, ada, adb, bca, bcb, bda, bdb ]
[ acc, acd, adc, add, bcc, bcd, bdc, bdd ]
[ caa, cab, cba, cbb, daa, dab, dba, dbb ]
[ cac, cad, cbc, cbd, dac, dad, dbc, dbd ]
[ cca, ccb, cda, cdb, dca, dcb, dda, ddb ]
[ ccc, ccd, cdc, cdd, dcc, dcd, ddc, ddd ]

这是两个初始扩展矩阵;假设我们得到了一个字符序列“bcc”,那么我们需要返回刚刚剩下的序列,即“add”。另外,假设矩阵是循环的,即如果给定序列位于 (i, 0),则返回 (i, N-1) 处的序列

Input: abb
Output: aba
Explanation: The sequence just left to abb is aba in the 8X8 matrix.

Input: aadc
Output: aacd

Input: abbcd
Output: abbcc

寻找解决方案的方法

首先考虑问题,想到的唯一解决方案是找到包含给定序列但看起来不是很复杂的扩展矩阵。我们需要首先形成矩阵,然后搜索序列。

高效方法

在查看了一些最初扩展的矩阵之后,我们发现了一种模式,通过该模式我们可以看到前一个元素。即

  • 从最后一个索引开始遍历字符序列。

  • 如果索引元素是 ' b'或'd',然后将其更改为'a'或'c'并停止遍历数组。

  • 如果索引元素为'a'或'c', ' 将其更改为 'b' 或 'd' 并移至下一个索引并检查它。

示例

C++ 代码上述方法

#include <bits/stdc++.h>
using namespace std;
int main (){
   string seq = "abbcd";
   int n = seq.length ();
   // traverse through the string from last.
   for (int i = n; i >= 0; i--){
      // if the element is b or d, change them and stop traversing.
      if (seq[i] == 'b'){
      seq[i] = 'a';
      break;
   }
   if (seq[i] == 'd'){
      seq[i] = 'c';
      break;
   }
   // if an element is b or d, change them and move to the next element.
   if (seq[i] == 'a')
      seq[i] = 'b';
   else if (seq[i] == 'c')
      seq[i] = 'd';
   }
   cout << "The Previous sequence is: " << seq;
   return 0;
}

输出

The previous sequence is: abbcc

结论

在本文中,我们讨论了扩展字符矩阵及其形成方式。我们还讨论了在扩展矩阵中查找前一个元素的问题。我们通过理解扩展字符矩阵创建的模式解决了这个问题。

我们还讨论了解决这个问题的 C++ 代码,我们可以用任何编程语言(如 C、Java、Python 等)编写这些代码。我们希望您会发现本教程很有帮助。

卓越飞翔博客
上一篇: 提升PHP项目可维护性的秘密武器:PHPDepend代码测量软件
下一篇: 返回列表
留言与评论(共有 0 条评论)
   
验证码:
隐藏边栏