如果我们拥有std::set并且std::vector可以动态增长和缩小,为什么我们需要链表?
NB我真的不明白,为什么会有这么多的选票.唐氏选民,请留下评论.
元组,列表和字典如何存储在python的后端?为什么我们不能在分配后改变元组?它在后台如何工作?
我有一个数字,它有N号.我想将数组元素乘以以下规则;
arr[n]={5,7,2,3,4....}
the first row:A[0]*A[2]*A[3]*A[4]....*A[n]
the second row:A[0]*A[1]*A[3]*A[4]....*A[n]
the third row:A[0]*A[1]*A[2]*A[4]...*A[n]
...........
the n row:A[0]*A[1]*A[2]*A[3]*A[4]....*A[n-1]
Run Code Online (Sandbox Code Playgroud)
我用O(n ^ 2)做到了但是我无法解决它O(n)如果没有除法行元素我怎么能这样做?
在C++中存在一个公共结构数据库,例如在Java中有它java.util.Collection的所有子类.C++中也有类似的东西吗?我不会为我使用的每个数据结构编写代码.
这是2013年本地INOI信息学奥林匹克问题.
假设我们
1393在实轴上有点.我们想要对这个点着色,使得对于每个任意区间[a,b],如果至少有一个1393点的点在区间中,则区间内的至少一个点与该区间中的其他点具有不同的颜色.有多少颜色可以做到这一点?(最佳答案是11).
INOI承诺用11简短回答.我们如何计算这个问题?
class node{
public: node* next;
int data;
};
void insert_node(node* head, int val){
node* n = new node();
n->next = NULL;
n->data = val;
cout << n->data << endl;
if (head == NULL){ //point .1.
head = n; //point .2.
cout<<"checkpoint 1 reached"<<endl;
}
else{
node* p = head;
while (p->next !=NULL)
p= p->next ;
p->next = n;
head->next = n;
}
return ;
}
int main(){
node* head = NULL;
insert_node(head, 3);
insert_node(head, 4);
insert_node(head, 5);
insert_node(head, 6);
insert_node(head, …Run Code Online (Sandbox Code Playgroud) 假设我有一个列表,其中包含另外两个包含一个字符串的列表,
foo = [['12345'],['abcdefg']]
Run Code Online (Sandbox Code Playgroud)
如何使用索引位置值打印出"b"?我知道我可以写清单中的每个项目,比如
['a','b','c','d']
Run Code Online (Sandbox Code Playgroud)
但我想知道是否可以只使用一个字符串.
根据libstdc ++文档的第 3点和第4点,PATRICIA尝试有两种类型的节点:
A(PATRICIA)trie类似于树,但有以下区别:
它明确地将键视为一系列元素.例如,trie可以将字符串视为字符序列; 特里可以将数字视为一系列位.
它不一定是二进制的.每个节点都有扇出n + 1,其中n是不同元素的数量.
它仅在叶节点处存储值.
内部节点具有以下属性:A)每个具有至少两个子节点,并且B)每个节点与其任何后代共享相同的前缀.
我一直在阅读的书(Algorithms in C,Part 1-4 by Robert Sedgewick)似乎描述了一个PATRICIA trie,只用n个节点存储n个值,使用内部节点存储值:
与DST一样,patricia尝试允许仅使用N个节点搜索树中的N个键....我们通过另一个简单的设备避免外部节点:我们将数据存储在内部节点中,并用链接指向外部节点的链接,这些链接指向trie中正确的内部节点
这里似乎有两个信仰阵营:
我想我很担心资源的准确性.据我所知,由于公共前缀引入的问题,不可能只用N个节点表示一个树而不将其表示为二叉树(这似乎违反了libcstd ++ docs的第2点,而在处理变量时则指向第4点) -width keys),并且不会失去严格的单向分支的概念(通过使"叶子节点"和"子节点"的概念有些无效而违反第3点和第4点).这两个特性协同工作以消除"内部节点"的困境,这种困境会导致这些树使用多于N个节点(回想一下:N个项目只有N个节点).
这两组参考文献不能都是正确的; 相互排斥太多了.如果一个参考文献说PATRICIA是二元的而另一个参考文献说它可能不是,那么它们不能被认为是事实上正确的,这只是我在这里看到的一个不一致的例子.哪些参考文献是正确的?
我不得不使用一种数据结构,它将元素保持在某种顺序,以便我可以查询最少元素并有效地插入新元素set ( C++ stl).所以我选择了
.这需要log(n)时间,插入和log(n)用于删除至少元件.
所以我写了以下程序:
#include<iostream>
#include<set>
#include<stdio.h>
using namespace std;
int main()
{
set<int>s1,s2;
set<int>::iterator it;
int tmp,i;
for(i=1;i<=1000000;i++)s1.insert(i);
for(i=1;i<=1000000;i++)
{
it=s1.begin();
s2.insert(*it);
s1.erase(s1.begin());
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但这需要1.67我的机器上的秒数(我的核心3)我期望更少,O(log(1000000)*1000000)即2*10^7我尝试优先级队列也给了我相同的性能.那么我应该实现自己的堆以使其更快或有其他方式吗?
data-structures ×10
c++ ×7
linked-list ×3
arrays ×2
python ×2
algorithm ×1
binary-tree ×1
dynamic ×1
list ×1
math ×1
nodes ×1
pointers ×1
string ×1
variables ×1