문제

지금까지 내 최고의 샷 :

배달 차량은 일련의 배송을해야합니다 (D1,디2,...디N), 그리고 어떤 순서로든 그렇게 할 수 있습니다. 즉, 세트 d = {d의 가능한 모든 순열1,디2,...디N} 유효한 솔루션이지만 특정 솔루션은 경로의 한쪽 끝에 기지국을 떠나기 전에 결정해야합니다 (예 : 차량 LIFO에 패키지를로드해야한다고 상상해보십시오).

또한, 다양한 순열 비용은 동일하지 않다. D 사이에 이동하는 거리의 정사각형의 합으로 계산할 수 있습니다.I -1 그리고 d, 여기서 d0 방향 변화와 관련된 모든 세그먼트는 3 배나 많은 비용이 들었다는 경고와 함께 기지국으로 간주됩니다 (철도 또는 공압 튜브에서 진행되고 있으며 다른 트래픽을 방해한다고 상상해보십시오).

배송 세트가 주어지면 D 기지국에서의 거리로 표시됩니다 (그래서 abs(d-d제이) 두 배송 사이의 거리)와 반복자 permutations(D) 각 순열을 연속적으로 생성하고 다른 순열보다 적은 비용 또는 동등한 순열을 찾습니다.

이제이 설명에서 직접 구현하면 다음과 같은 코드로 이어질 수 있습니다.

function Cost(D) ...

function Best_order(D)
    for D1 in permutations(D)
        Found = true
        for D2 in permutations(D)
            Found = false if cost(D2) > cost(D1)
        return D1 if Found

O (n*n!^2), 예를 들어 꽤 끔찍합니다.

내 질문 : 당신은 자연스럽게 무질서한 사람들을 더 나쁜 정렬 알고리즘의 구현 (또는 다르게 끔찍한)?

도움이 되었습니까?

해결책

신청자가 겉보기에 복잡한 질문으로 간단한 솔루션을 알아 차릴 수 있는지 확인하기 위해 인터뷰 에이 질문을 사용하고 있다고 가정합니다.

이 가정은 잘못되었습니다 -MARKUSQ

당신은 너무 많은 정보를 제공합니다.

이것을 해결하기위한 열쇠는 포인트가 한 차원이고 종류가 필요한 전부라는 것을 인식하는 것입니다. 이 질문을 더 어려워주기 위해서는이 사실을 가능한 한 많이 숨 깁니다.

가장 큰 단서는 거리 공식입니다. 방향을 바꾸는 것에 대한 페널티를 소개합니다. 내 마음에 오는 첫 번째는이 형벌을 최소화하는 것입니다. 형벌을 제거하려면 특정 방향으로 주문해야합니다.이 순서는 자연스러운 정렬 순서입니다.

나는 길을 바꾸는 것에 대한 형벌을 제거 할 것입니다. 그것은 너무 많은 것을 포기합니다.

또 다른 주요 단서는 알고리즘에 대한 입력 값 : 정수 목록입니다. 그들에게 순열 목록을 제공하거나 심지어도 제공하십시오 모두 순열. 이로 인해 O (n!) 알고리즘이 실제로 예상 될 수 있다고 생각하게됩니다.

나는 그것을 다음과 같이 표현할 것이다.

N 전달 위치의 가능한 모든 순열 목록이 주어지면 각각의 순열 (D1, d2, ..., dN)에 의해 정의 된 비용이 있습니다.

P의 비용이 다른 순열보다 작거나 동일하도록 반환 순열 P.

실제로해야 할 일은 첫 번째 순열에서 읽고 정렬됩니다.

비용을 비교하기 위해 단일 루프를 구성하는 경우 알고리즘의 BIG-O 런타임이 N이 전달 위치 수 (다른 트랩)인지 묻습니다.

다른 팁

이것은 직접적인 답이 아니지만 더 많은 설명이 필요하다고 생각합니다.

d 부정적인 것이 허용됩니까? 그렇다면 내가 볼 수있는 한 혼자서 정렬하는 것만으로는 충분하지 않습니다.

예를 들어:

d0 = 0

deliveries = (-1,1,1,2)

이 경우 최적의 경로는 1 > 2 > 1 > -1.

편집 : 이것은 실제로 최적의 경로는 아니지만 요점을 보여줍니다.

처음으로 최적의 솔루션을 찾은 후 다시보고 할 수 있습니다.

"다음 소송이 다음 규칙 세트에서 가장 최적이라는 증거를 제공합니다. 여기서 최적은 모든 단계가 모든 단계를 고려하여 모든 단계 비용의 합으로 결과가 가장 적은 것을 의미합니다. (A..Z) 한 번만 존재해야합니다.

유죄 판결 :

A->C->D->Y->P->...->N

무대 비용 :

A->B = 5,
B->A = 3,
A->C = 2,
C->A = 4,
...
...
...
Y->Z = 7,
Z->Y = 24."

그것은 누군가를 잠시 동안 바쁘게 유지해야합니다.

이것은 나에게 생각 나게한다 배낭 문제, 여행 세일즈맨보다 더. 그러나 배낭은 NP- 하드 문제이기도하므로 다이나믹 프로그래밍을 사용하여 다이나믹 프로그래밍을 사용하여 다이나믹 프로그래밍을 사용하여 문제를 해결할 수 있습니다. 기본 문제는 다음과 같습니다.

무게 w를 초과하지 않고 최소한 v의 값을 달성 할 수 있습니까?

이제 문제는 V가 독특 할 때 상당히 좋은 솔루션을 찾을 수 있습니다.

무게 단위당 뚜렷한 값 (VJ = PJ/WJ)을 갖는 각 항목 j 유형의 배낭 문제는 가장 쉬운 NP- 완성 문제 중 하나로 간주됩니다. 실제로 경험적 복잡성은 O ((log n) 2)의 순서이며, 매우 큰 문제는 매우 빠르게 해결 될 수 있습니다. 예를 들어 2003 년에는 N = 10,000을 가진 인스턴스를 해결하는 데 필요한 평균 시간이 상품 개인용 컴퓨터를 사용하여 14 밀리 초 미만이었습니다.1.

따라서 여러 정류장/패키지가 동일한 VJ를 공유하여 사람들이 정말 어려운 솔루션에 대해 생각하도록 초대 할 수 있다고 말할 수 있습니다.

그러나 동일한 값 VJ를 공유하는 다중 항목의 퇴화 사례에서는 vj = 상수가 O (2N/2N)의 서브 세트 합계 문제인 극단적 인 경우에는 훨씬 더 어려워집니다.

따라서 값 당 중량을 값 당 거리로 바꾸고 여러 거리가 실제로 동일한 값을 공유 할 수 있다고 말하면 일부 사람들은이 함정에 빠질 수 있습니다.

이것은 단지 (NP-Hard)가 아닙니다. 여행 세일즈맨 문제? 당신이 훨씬 더 힘들게 만들 가능성이없는 것 같지 않습니다.

아마도 실제 알고리즘이 불분명하도록 문제를 해결하는 것일 수 있습니다. 예를 들어 경로를 단일 레일 철도로 묘사하여 사람이 역 추적이 더 많은 비용이 든다는 도메인 지식에서 추론해야합니다.

누군가가 재귀 비교를하고 싶은 유혹을받는 방식으로 질문을 설명하는 것은 어떻습니까?

BTW, 이것의 목적은 무엇입니까 - 그것은 인터뷰 대상자를 고문하는 것 같은 것 같습니다.

배달 트럭이베이스로 돌아와야하는지 여부 (왕복 여행)인지 아닌지에 대해 더 명확해야합니다. 트럭 인 경우 하다 반환, 간단한 종류 하지 않습니다 가장 짧은 경로를 생성하십시오. 가장 먼 지점에서 기본 비용까지 수익의 제곱은 너무 많은 경로를 생성합니다. '아웃'도중에 홉을 놓치고 뒤로 도중에 사용하는 것이 더 저렴합니다.

누군가를 나쁜 대답으로 속이는 경우 (예를 들어, 모든 정보를 제공하지 않음으로써) 어리 석음이나 속임수가 원인입니까?

그들이 자아의 거짓말에주의를 기울이지 않으면 현명한 사람의 지혜는 얼마나 위대합니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top