当前位置: 首页 > 知识库问答 >
问题:

设计O(1)数据结构

闻人思聪
2023-03-14
////////////////////////////////////////////////////////////////
// Implement a container that have the following methods:
// Java:
//     public class Container<E>
//     {
//         // data memebers
//         ...
//         public Container();
//             // constructor
//             // Complexity: Constant
//
//         public int size();
//              // return the total number of elements in the container
//              // Complexity: Constant
//
//         public E get(int index);
//              // get an element from the container by its index
//              // Complexity: Constant
//
//         public void set(int index, E element);
//              // set an element in the container by its index. index >= 0 && index < size()
//              // Complexity: Constant
//
//         public void add_front (E element);
//              // add a new element to the front of the container i.e. its index is 0
//              // Complexity: Constant (amortized time)
//
//         public void remove_front ();
//              // remove the element at the front of the container
//              // Complexity: Constant
//
//         public void add_back (E element);
//              // add a new element to the back of the container i.e. its index is size()
//              // Complexity: Constant (amortized time)
//
//         public void remove_back ();
//              // remove the element at the back of the container
//              // Complexity: Constant
//     }
//
// Examples:
//   at beginning   => []

//   add_front(0)   => [0]
//   add_front(-1)  => [-1, 0]
//   add_back(1)    => [-1, 0, 1]
//   add_back(2)    => [-1, 0, 1, 2]
//   get(0)         => -1
//   get(3)         => 2
//   set(3, 8)      => [-1, 0, 1, 8]
//   remove_front() => [0, 1, 8]
//   remove_back()  => [0, 1]
////////////////////////////////////////////////////////////////
    null
low--;
storage.put(low, element);

高++;storage.put(high,element);

低++;

高--;

共有1个答案

燕雨石
2023-03-14

因为add_front()和add_back()的复杂度需要保持不变,而且remove_front()和remove(back)之后不需要内存效率,所以可以使用数组!它们比哈希表简单,在运行时复杂性中没有“具有高概率”。

您可以从大小为3的数组开始,将第一个元素放在中间,这样就有空间容纳一个add_front和一个add_back。然后当它溢出时,只需移动大小为6的数组中间的元素。通常,在每次溢出时,数组大小会增加一倍。

显然,您需要通过数据结构中的一些整数变量来跟踪数组的开始和结束位置及其当前容量

 类似资料:
  • 我在Java编码,我需要一个排序的整数数据结构,它有最大的O(log(n))插入时间和O(1)按索引查找。是否有一个内置的数据结构可以做到这一点,或者如果没有,我如何自己编程一个? 我知道集合可以完成第一个任务,但要查找元素I,我需要在元素I之前遍历所有元素。

  • 即使在最坏的情况下,是否有任何数据结构可以提供O(1)——即常数——插入复杂性和O(log(n))搜索复杂性? 排序后的向量可以进行O(log(n))搜索,但插入需要O(n)(考虑到我并不总是在前面或后面插入元素这一事实)。而列表可以进行O(1)插入,但不能提供O(log(n))查找。 我想知道这样的数据结构是否可以实现。

  • 注:本节未经校验,如有问题欢迎提issue akka.io 包已由Akka和spray.io 团队协作开发。其设计采用spray-io 模块的开发经验,并加以改进为更一般基于actor的服务使用。 要求 为了形成通用的可扩展的IO层基础,使之适合于广泛的应用,在Akka remoting 和spray HTTP 是原有基础上,为设计的关键驱动因素建立了以下要求: 数以百万计的并发连接的可扩展性 从

  • 队列是一种先进先出(FIFO,first-in-first-out)的数据结构 javascript代码实现队列: <!doctype html> <html> <head> <meta charset=utf-8 /> <title>Queue Sample</title> </head> <body> <script type="text/javascript">

  •        相对于结构化数据(即行数据,存储在数据库里,可以用二维表结构来逻辑表达实现的数据)而言,不方便用数据库二维逻辑表来表现的数据即称为非结构化数据,包括所有格式的办公文档、文本、图片、XML、HTML、各类报表、图像和音频/视频信息等等。        非结构化数据库是指其字段长度可变,并且每个字段的记录又可以由可重复或不可重复的子字段构成的数据库,用它不仅可以处理结构化数据(如数字、符

  • 问题内容: 我有一个JTable,它是使用表模型从数据结构加载的。数据结构的格式为。示例数据为: 上述数据格式在DS中表示为 我已经成功地使用表模型在Jtable中表示了上述给定的数据。一旦将数据从DS加载到表中,我就必须允许用户编辑。现在这是我遇到的问题。我的疑问是是否应该保留数据结构与表中的更改同步,还是应该在用户完成编辑后从表中重新创建DS,然后将其替换为旧的DS。 我还需要验证数据(例如,