이 질문에 대한 세균은 업계의 동료 개발자 몇 명과의 토론에서 나왔습니다.
많은 장소에서 프로젝트 관리자는 복잡한 데이터 구조에주의를 기울이고 일반적으로 표준 라이브러리 / 패키지에 기본적으로 존재하는 모든 것을 고집합니다. 일반적인 아이디어는 성능이 심각하게 방해받지 않는 한 이미 사용 가능한 것을 조합하여 사용하는 것 같습니다. 이것은 코드베이스를 단순하게 유지하는 데 도움이됩니다. 이는 외교가 아닌 사람들에게 “우리는 높은 마멸을 가지고 있으며 우리가 고용 한 새로운 것은 그리 좋지 않을 수도 있습니다”라는 의미입니다.
따라서 CS 마약 중독자를위한 블룸 필터 또는 건너 뛰기 목록 또는 재생 트리가 없습니다. 여기에 다시 질문이 있습니다. 사무실에서 가장 복잡한 데이터 구조는 무엇입니까?
훌륭하고 정교한 실제 소프트웨어가 어떤지에 대한 이해를 돕습니다.
답변
조회를 위해 건너 뛰기 목록을 사용했습니다. 내가 일하는 곳에는 표준 구현이 있으며 모든 사람들이 그것을 사용하는 것이 좋습니다. IP 주소를 효율적으로 저장하고 검색하기 위해 patricia 시도를 사용했습니다. 다시 구현이 이미 존재했습니다.
답변
저는 Java 개발자입니다. Java Collection Framework 는 90 %의 데이터 구조 문제를 해결할 수 있지만 다른 10 %는 노력이 필요합니다. 전문가가 작성한 정교한 표준 라이브러리를 실제로 이해한다면 대부분의 경우 도움이 될 것입니다.
복잡한 데이터 구조는 실제 환경에서 유지하기가 어렵습니다. 코드가 엉망이되는 것을 피하기 위해 작은 문제로 나눕니다. 각각의 작은 문제는 Java Collection Framework 로 해결할 수 있습니다 . 솔루션이 가장 똑똑하지는 않지만 (더 많은 메모리가 필요하고 느려질 수 있지만) 작동하고 유지 관리하기 쉽습니다. 절충입니다.
복잡한 데이터 구조를 작성해야하는 경우 교과서를 선택합니다 🙂
답변
내가 작업에서 사용한 가장 복잡한 데이터 구조는 하나의 문제였습니다. 그러나 그것은 20 년 전이었습니다.
산업용 소프트웨어 개발의 문제점은 대부분의 산업용 프로그래머가 컴퓨터 과학 (CompSci) 졸업생이 아니라는 것입니다. 따라서, 평균 CompSci 대학원생이 당연한 것으로 생각하는 기술은 빵과 버터 프로그래머가 유지하기에는 너무 어려운 것으로 간주됩니다.
업계에서 일반적인 CompSci 지식이 부족한 것은 심각한 문제입니다. 예를 들어, 내가 만난 소프트웨어 개발자의 수를 잃어 버렸습니다.! (a! = 5 && b! = 3) 및 a == 5 || b == 3은 논리적으로 동일합니다. DeMorgan의 정리를 적용하는 방법을 아는 사람은 이러한 표현이 논리적으로 동일하다는 것을 인식 할 수 있습니다. 비 CompSci 졸업생 대부분은 DeMorgan의 정리에 대해 들어 본 적이 없습니다. 상당한 코드 기반을 조사하면 부정적인 논리 하위 표현을 부정하는 많은 표현이 발견됩니다. 부정 논리 하위 표현식이 포함 된 코드의 가독성은 이러한 표현식을 부정이 아닌 형식으로 변환하여 거의 항상 향상됩니다.
답변
한 번은 이벤트 기반 시뮬레이션을 위해 일정 대기열 (O (1) 우선 순위 대기열)을 작성하여 프로파일 링에서 기존 힙이 병목 현상임을 보여주었습니다.
또한 약 80000 개의 상태를 가진 유한 상태 머신을 포함하는 제품을 출시했습니다.이를 생성하는 코드는 조금 어리 석었습니다.
답변
오래 전부터 은하계에서 … 어셈블러의 RTOS에서 Knuth의 “버디 버퍼”를 사용한 팀에서 일했습니다.
또한 1024 x 1024의 세계에서 256 세대를 지원하는 Conway의 인생 게임.
답변
처음부터 너무 특별한 것을 사용하지 않으면 이중 연결 목록이 됩니다.
그리 흥미롭지는 않지만 다른 구조를 사용했습니다. 그러나 당신의 질문은 처음부터 말했다.
답변
일반적인 재무 데이터 목록을 포함하는 해시 테이블 트리는 묻지 않습니다. 때때로 나는 카우보이 였으면 좋겠다. 별빛 아래의 단순한 삶