繁体   English   中英

高级数据结构 C++

[英]Advanced Data Structures in C++

我是 C++ 的新手,想知道是否有人可以帮助我确定一些好的高级数据结构以用于我的大学项目。 我曾尝试联系我的讲师寻求帮助,但他们没有回应。

我正在创建一个自我解决的单词搜索,并且已经完成了一个“简单”版本,其中我使用了一个二维数组和一个字符串向量,但我还需要创建一个具有高级数据结构的高级版本。

无论如何,以下是规范对两者的说明:

Wordsearch Grid - 一种更高级的数据结构,可以识别网格中的任何字母单元格都可以构成八个序列的一部分(水平、垂直和两个对角线,每个都可以从任一方向读取)。 因此,可以基于链接到可以通过一种标准比较方法统一检查的序列的单个“字母单元”对象来创建数据结构。 将从拼图网格的每个单元格的每个方向依次调用此比较方法,以将来自该点的字母序列与字典内容进行比较。 通过跟踪每行的前向水平链接和从左上角开始的每行第一个单元格的向下垂直链接,此结构的常规逐行遍历将仍然是可能的(例如,用于数据加载)。 高级拼图的大小在文本数据文件中定义,为 N x N,其中 N 是 integer 值 >= 9。

单词词典 - 一种更高级的数据结构可以识别许多较长的单词可能以与一些较短的单词(或全部)相同的字母序列开头。 例如,字典可能包含单词 PROJECT 和 PROJECTOR,因此 PROJECTOR 只需要比单词 PROJECT 多匹配两个字母。 如果单词匹配过程必须从头开始每个字典单词串,那么这样的公共序列将被匹配多次,直到找到匹配或搜索完全失败。

如果有人可以通过让我知道哪些数据结构最适合这些来帮助我,我将不胜感激。

谢谢你

有时简单胜于花哨,特别是如果你真的想在 C++ 中实现它。

所以,对于网格,我实际上会考虑只使用一个普通的一维条目数组。 您要做的就是使用不同的方式对其进行迭代。 考虑这个可以存在于std::array<char,N*N> data中的示例网格:

abc
def
ghi

一种在其中搜索的方法是水平搜索,因此:

Iterator begin_horz(std::size_t const row) const {
  return Iterator{begin(data) + row*N, 1};
}
Iterator end_horz(std::size_t const row) const {
  return Iterator{begin(data) + row*N + N, 1};
}

同样,如果你想垂直迭代:

Iterator begin_vert(std::size_t const col) const {
  return Iterator{begin(data) + col, N};
}
Iterator end_vert(std::size_t const col) const {
  return Iterator{begin(data) + col + N*N-N, N};
}

并进一步针对两条对角线。 可以通过为 Iterator 定义反向操作来完成反向操作。

Iterator类型随后将仅通过每个Iterator::operator++传递的值递增底层std::array::iterator

这样做的好处是,数据尽可能紧密地打包,减少缓存未命中的可能性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM