O (1)의 배열에 링크 목록을 복사 할 수 있습니까 (둘 다 크기가 n입니까?)?o (1)의 배열에 링크 목록을 복사 할 수 있습니까 (둘 다 크기가 n입니까?)?
즉, 링크 목록의 요소와 배열의 크기는 동일하지 않습니다.
O (1)의 배열에 링크 목록을 복사 할 수 있습니까 (둘 다 크기가 n입니까?)?o (1)의 배열에 링크 목록을 복사 할 수 있습니까 (둘 다 크기가 n입니까?)?
즉, 링크 목록의 요소와 배열의 크기는 동일하지 않습니다.
하나의 짧은 대답. 번호
질문이 불완전하고 일부 제약 조건이 누락되었지만 답은 분명히 아니오입니다.
아니요 : n
요소를 복사해야하는 경우 n
작업이 필요합니다. O (n)에서 목록을 탐색하고 배열의 각 요소를 O (1)에 삽입 할 수 있습니다. 가변 개수의 요소를 처리하는 일정한 시간을 기대할 수는 없습니다.
그리고 여러분은'n'을 알고 있다고 가정하고 있기 때문에 배열 중간 복사본을 성장시킬 필요가 없습니다. – delnan
아니요 ... 복사 작업 자체가 O (1) 연산 인 동안 N 번 발생하므로 전체 연산의 복잡도는 O (N)이됩니다.
당신이 Linked List
및 Array
을 고려 무엇을 조금 다시 정의하지 않는 한 제
당신이 가지고있는 경우 : 불변의 구조
그런 다음 모든 Linked List
는 Array
(당신이 요소 n
에 있다면, 그것은 (1) n-1
및 n+1
에 갈 O는, 그래서 "읽기"일부가 될 수있다 동급 일 것입니다.) 당신이 "용기"에서 "포함"을 분할하는 경우이 시점에서, 당신은 (AN Array
, 또는 Linked List
에 Array
, 또는 Array
또는 모든 O의 Linked List
에 Linked List
에 Linked List
1을 Array
을 복사 할 수). (C에서 #) I 의미 포함 된 컨테이너에서 분할에서 : 데이터 소스도를 허용하는 생성자, 복사 생성자
struct MyArray
{
private int[] baseArray;
public int this[int index]
{
get
{
return baseArray[index];
}
}
}
struct MyList
{
private int[] baseArray;
public Tuple<int, int> First()
{
return new Tuple<int, int>(0, baseArray[0]);
}
public Tuple<int, int> Next(Tuple<int, int> current)
{
return new Tuple<int, int>(current.Item1 + 1, baseArray(current.Item1 + 1));
}
}
를 단순히 복사 baseArray에 대한 참조 (이 될 O (1) 때문에 우리는 단지 참고 문헌 만 복사하고있다.) 그리고 다른 모든 필요한 방법들.
(너무 많은이 답변을 downvote하지 마십시오. 그것은 더는 도발 및/또는 상자 밖으로 생각입니다)
(나는 그들이 매우 사실을 지적 C 번호를 struct
의를 사용하고 있습니다 light objects. 실제 "고기"는 baseArray
의 "내부"입니다.이 구조체는 참조와 메소드를 약간 넘는 것입니다.
참조를 복사하는 것이 "목록 복사"와 실제로 동일한 것입니까? – Jason
@Jason'string a = "Hello"; string b = a;'문자열의 참조를 복사하는 것이 "문자열 복사"와 실제로 같은 것입니까? 문자열이 변경되지 않기 때문에 .NET에서이를 수행 할 수 있습니다. – xanatos
@xanatos - 모든 것이 불변이라고 가정하면 순식간에 배열 위에 링크 된 목록을 사용할 이유가 거의 없습니다. List가 불변이라고 가정하면 그 사본은 O (1)입니다. 아무 때나 그럴 때까지 새로운 버전을 만들기 위해 O (n) 사본이 생깁니다. 그리고 만약 당신이 그걸 가지고 무엇인가를하지 않으려한다면, 왜 그것을 첫번째 장소에서 변형시킬 것입니까? – James
* * 당신 생각은 어떨까요? 어떤 아이디어? –