嘿伙计们可以为我解释一下这个重要的符号吗?
答案 0 :(得分:1)
由于你有一个数组,这意味着连续的内存。这需要在任何给定索引处进行查找将在一个操作中,因为不需要像在链接列表中那样进行迭代。所以它是O(1)。
比较两个没有排序或排序的ArrayList对象,A和B是O(n ^ 2),因为ArrayList A中的每个元素都必须与B中的每个元素进行比较。因此,A中有n个元素,B中有n个元素这将导致A中的每个元素都需要与B进行n次比较。由于A中有n个元素,n次比较n次,O(n ^ 2)。
虽然如果使用排序算法,它将与排序算法一样快,例如O(n log n)时间或O(n),具体取决于所使用的排序算法。
在未排序的数组中搜索特定目标值确实是O(n)。这是因为您必须搜索数组中的每个元素以检查它是否存在。由于列表中有n个元素,这意味着有n个比较。
答案 1 :(得分:1)
1-因为数组元素可以随机访问(不需要像链表那样从一个单元格移动到另一个单元格)所以你基本上可以说数组[28]是O(1)
2-比较两个数组列表可以通过一种方式完成,这将导致较低的大O但是有了排序。
您可以使用mergesort或quicksort O(nlg(n))对每个arraylist进行排序,然后比较O(n)中的两个排序列表。结果是O(nlgn)。
但是另一种算法(没有排序)会遍历一个数组(n)中的每个元素。然后检查元素是否是另一个数组(n)(并标记它以正确处理重复)。后一种算法是O(n ^ 2)。
3-是的。你必须逐个浏览整个列表,直到找到所需的元素。