데이터 구조 및 알고리즘이라는 유닛을 만들고 있습니다. 방금 시작했는데 교수님은 방금 대수학 의미론이 무엇인지, 공리가 무엇인지 등을 가르쳐 주셨습니다. 지금까지 배열의 형태로 나무를 사용했습니다. 트리 (값, 트리, 트리)로 미리 정렬 된 트리에 대한 시그니처를 사용하지 않습니다. 여기서 value는 노드의 값이고 왼쪽 노드는 첫 번째 트리이고 오른쪽 노드는 두 번째 트리입니다.트리 추상 데이터 형식
트리 (값, 트리, 트리) 또는 Nil로 트리를 정의 했으므로 addNode (value, tree)에 대한 대수를 정의하는 방법을 알아낼 수 없습니다.
각 레벨마다 점점 더 복잡해질뿐만 아니라 어쨌든 한 번에 한 레벨을 스캔하여 한 시간 이후로 시도해 볼 수는 없습니다. 대수학은 우리가 나무 아래로 내려갈 때 점점 더 많은 elles로 나옵니다. 내가 제대로하고 있니? 올바른 방향으로 나를 가리킬 수 있습니까? 또는 트리를 트리 (값, 트리, 트리)로 구현할 수 없습니까?
그것은 내 자습서의 일부이며 (추가 질문에서는 가치가 없음), 즉각적인 대답을 찾고 있지는 않습니다. 주제가 마음에 들고, 더 많이 배우고 싶습니다.
편집 1 : 위키피디아를 확인한 결과 확실한 답을 얻기 위해 교과서를 사용하고 싶지 않습니다. 올바른 접근 방식이 올바른지 또는 완전히 불가능한 지 여부에 대한 힌트를 찾고 있습니다. 트리를 트리 (값, 트리, 트리)로 정의하십시오. 양식 ADT를 목록으로 표현할 수 있다는 것을 알고 있습니다. 그러나 나는 그것에 대해 정말로 생각하고 싶었다. 그것이 의미가 있기를 바랍니다. 고마워요!
편집 2 : 음, 인터넷을 통해 설명하기가 어렵습니다. "tree"라는 새로운 데이터 구조를 정의한다고 가정 해 봅시다. 내가 원하는대로 정의 할 수 있고, 균형 잡힌 이진 트리처럼 행동해야한다. (부모님과 자식의 가치관은 중요하지 않다.) 그래서 tree로 정의한다 : tree (value, tree, tree) 또는 nil 그렇지 않다. 프로그래밍 코드는 정의 방법에 불과합니다. 트리는 + 2 개의 다른 트리이거나 Tree는 0입니다. 이제 addNode (value, tree)는 노드를 트리에 추가하면서 균형을 유지합니다. 이것은 프로그래밍 코드가 아니라 대수적 의미론입니다. 내가 제대로 설명 할 수 있을지 모르겠다. 하지만 큐 또는 스택을 사용하여 달성 할 수있는 솔루션을 얻었지만이를 정의해야하는 또 다른 ADT가 있는데 이는 유효하지 않습니다.
편집 3 : 내가 생각했던 것보다 문제를 더 어렵게 만든 많은 것을 생각한 것 같습니다. 우선, 내가 준 작은 설명에서, Gamecat의 대답은 완벽했습니다. 그러나 저는 의견에 동의합니다. 다른 ADT를 포함하는 것이 타당합니다. 사실, 우리가 Int를 사용하는 것을 만들 때, 우리는 그 구조에 대해 ADT를 사용하고 있습니다. 각 ADT는 고유해야한다고 생각했습니다. 어쨌든, 당신 대답에 많은 사람들 감사합니다!
를 추가합니다. 좀 더 구체적이라면 addNode는 무엇을해야합니까? (루트로 값을 추가하고 균형을 유지 하시겠습니까?) 어떻게 지금하고 있습니까 (예 : 공리)? 이제 내가 말할 수있는 것은 표현이 훌륭하다는 것입니다 (함수와 유형 모두 'tree'사용 제외). – mweerden
대수학 부분을 얻습니다. 확실하지 않은 것은 당신이 붙어있는 곳입니다. 지금까지 얻은 것을 보여줄 수 있습니까? 그것이 완전히 틀린 지 여부는 중요하지 않습니다. 또한 대기열/스택 솔루션의 문제점은 무엇입니까? 다른 ADT가 유효하지 않은 이유는 무엇입니까? – mweerden