比较LinkedLists和Arrays,同时还比较它们与已排序和未排序数据的差异
实际问题
讨论将未排序数据集实现为链表而不是数组的可行性。在插入,删除,检索,计算机内存和应用程序的速度方面会有什么权衡?
讨论将排序数据集实现为链表而不是数组的可行性。在插入,删除,检索,计算机内存和应用程序的速度方面会有什么权衡?
根据您对上述问题的回答,总结在应用程序中使用链接列表的成本和收益。
我的回答/输入:
LinkedLists必须在每次添加新节点时分配内存,在添加许多节点时非常有用,并且大小不断变化,但在添加少量元素时通常较慢
数组在程序运行的开始时分配内存,调整列表的速度很慢(如果必须调整大小,则添加很多元素)
由于索引
,数组中的检索速度更快由于指针
,在LinkedList中添加/删除速度更快
答案 0 :(得分:2)
不确定这是什么类,但对于CS程序,你必须做得比“慢”和“快”做得更好。尝试根据所需的操作数量来量化。您应该熟悉通常用于此类量化的机器 - 使用该机器。
答案 1 :(得分:2)
未分类与排序。我会做一个,然后你真的需要做你的功课
Stackoverflow标记确实需要表来执行此操作。你想说的是对于未排序/数组,排序/数组,未排序/链接列表,排序/链接列表的操作是多么“昂贵”
最后一点:“应用程序的速度”是一个提示,不仅要考虑单个操作的速度。
* Adding
未排序:除非需要调整大小,否则添加数组为O(1) - 只需将其添加到最后。您可能想要讨论一个最小化开销的调整大小策略(提示:不要只是将大小增加一个)
排序:数组添加是O(n) - 找到添加它的地方是O(log(n)),但是你需要向上移动一半元素(平均)来为新的元素添加romm
未排序:链接列表为O(1) - 将其添加到列表的开头或结尾。
已排序:链接列表为O(n) - 虽然您可以再次在O(1)中添加元素,但您需要平均扫描列表的一半以找到放置它的位置。
所以,剩下的就交给你了。发表一个答案,我们会批评它,但为了从你的(大概)昂贵的教育中获得最大收益,你真的需要做一些工作:)
* Removing
* Retrieving
* Sorting
* Overall speed
* Overall memory usage
答案 2 :(得分:1)
Here is a C++ code that illustrates that sorting the data miraculously makes the code faster than the unsorted version. Let’s try out a sample C++ program to understand the problem statement better.
// CPP程序演示处理 //排序和未排序数组的时间
#include <iostream>
#include <algorithm>
#include <ctime>
using namespace std;
const int N = 100001;
int main()
{
int arr[N];
// Assign random values to array
for (int i=0; i<N; i++)
arr[i] = rand()%N;
// for loop for unsorted array
int count = 0;
double start = clock();
for (int i=0; i<N; i++)
if (arr[i] < N/2)
count++;
double end = clock();
cout << "Time for unsorted array :: "
<< ((end - start)/CLOCKS_PER_SEC)
<< endl;
sort(arr, arr+N);
// for loop for sorted array
count = 0;
start = clock();
for (int i=0; i<N; i++)
if (arr[i] < N/2)
count++;
end = clock();
cout << "Time for sorted array :: "
<< ((end - start)/CLOCKS_PER_SEC)
<< endl;
return 0;
}
//输出代码
Output :
Execution 1:
Time for an unsorted array: 0.00108
Time for a sorted array: 0.00053
Execution 2:
Time for an unsorted array: 0.001101
Time for a sorted array: 0.000593
Execution 3:
Time for an unsorted array: 0.0011
Time for a sorted array: 0.000418
Observe that time taken for processing a sorted array is less as compared to an unsorted array. The reason for this optimization for a sorted array is branch prediction.
答案 3 :(得分:0)
@Paul:谢谢
- 卸下
未分类&amp;已排序:数组删除为O(n) - 必须移动所有元素以填充“空洞”
未分类&amp;已排序:链接列表为O(1) - 根据需要更改指针