복셀의 3D 볼륨을 분해하는 알고리즘을 구현해야합니다. 알고리즘은 절단 계획의 각면에있는 정점과 절단 계획을 통과하는 두 번째 단계에서 식별하는 것으로 시작합니다.정렬되지 않은 목록에서 정렬 된 목록으로 전환 할시기는 언제입니까? [최적화]
이 프로세스는 정렬 된 목록의 이점을 사용하여 최적화 할 수 있습니다. 분리 점을 식별하는 것은 O log (n)입니다. 하지만 축마다 하나의 정렬 된 목록을 유지해야하며 꼭지점과 가장자리에 대해이 목록을 유지해야합니다. 이것은 GPU에서 사용하도록 구현 될 것이므로 메모리 관리 (예 : CUDA)에 대한 제약도 있습니다. 침입 목록 M/trees 및 C가 부과됩니다.
완전한 "voxelization"으로 ~ 4000 포인트와 12000 개의 가장자리로 오래 갈 것입니다. 다행히도 똑똑한 전략을 사용하여 처리 된 복셀을 제거하고 잔량을 최소화하여 주문 수량을 최소로 유지함으로써 최적화 할 수 있습니다. 이 경우에는 100 점 미만과 300 개의 가장자리를 가질 것으로 예상됩니다. 따라서 프로세스를 관리하기가 더 복잡해 지지만 더 효율적으로 처리 할 수 있습니다.
따라서 정렬 된 데이터 구조를 사용하면 얻는 이점이 간단한 침입 링크 된 목록과 비교할 때 노력과 복잡성 오버 헤드가 필요할 때를 결정하는 데 도움이되는 질문입니다.
당신이 옳습니다. 각 커트를 위해 나는 2에있는 분할을 분할해야한다. 사실 나는 목록의 한 부분을 유지하고 일반적으로 작은 부분이되는 다른 부분의 요소를 추출합니다. 그런 다음 몇 가지 새로운 요소를 추가해야합니다. 그래서 나무는 나쁜 선택입니다. 정렬 된 이중 연결 목록이 더 좋습니다. 축마다 하나의리스트가 있습니다. 가장자리가 각 목록의 범위를 정의하기 때문에 꼭지점 삽입을 최적화 할 수 있습니다. 분할 모서리 삽입 위치 검색은 이전 모서리 위치에서 시작할 수 있습니다. – chmike
이러한 데이터 구조를 유지 관리하는 오버 헤드로 인해 첫 번째 솔루션에서 발생하는 동일한 값을 다시 계산하지 않아도되는지 궁금해하기 시작합니다. (Simon의 답변에 대한 내 의견을 참조하십시오). – chmike
'다시 계산'하는 경우 재 계산 대신 'answer-key'테이블/사전/트리/정렬 목록 및 참조를 만드는 것이 가장 좋습니다. – DevinB