나는 이것이 숙제 문제가 아니라고 말하면서 시작하고 싶습니다. 더 나은 프로그래머가 될 유명한 CLRS 텍스트 인 알고리즘 소개를 읽고 있습니다. 나는이 책에 주어진 문제와 연습 문제를 스스로 해결하려고 노력하고있다.
내가 해결하기 위해 노력하고 훈련은 10.1-2을 에서 제 10 장 기본 데이터 구조 CLRS 두 번째 판에서. 그 상태는 다음과 같습니다.
두 스택 의 총 요소 수가 n 이 아니면 스택이 오버플로되지 않도록 한 배열 A [1..n] 에 두 스택을 구현하는 방법을 설명 하십시오 . PUSH 및 POP 작업은 O (1) 시간 내에 실행되어야합니다 .
지금까지 내가 찾은 해결책은 다음과 같습니다.
배열 A [1..n]이 S1 [1..i] 및 S2 [i..n]의 두 스택을 구현 하도록 합니다.
들어 PUSH-S1 및 PUSH-S2 스택 '전체'이면 동작 다음에 요소를 밀어 시작 다른 (스택 예. 스택 경우 S1이 새로운 요소는 다음에 그 소자를 눌러 밀어 되려고 할 때 가득 스택 S2 및 그 반대).
이 방법의 문제점은 어떤 요소가 어떤 스택에 속하는지 '기억'할 방법이 없기 때문에 POP-S1 또는 POP-S2를 안정적으로 사용할 수 없다는 것입니다. 스택의 요소가 (키, 값) 쌍이고 키가 스택 번호 인 경우 최악의 경우 i 또는 (ni) 번 검색해야 할 요소를 팝하려면 O (n ) (하지 않을 것이다, 내가 잘못 여기에 나는 경우) 정정 해줘 주시기 O (1) .
나는 꽤 오랫동안 질문에 내 머리를 두드리고있다. 내가 올바른 길을 가고 있습니까? 누군가이 문제를 해결하기 위해 가능한 포인터를 줄 수 있습니까?
일반적으로 이러한 문제에 대해 어떻게 생각해야합니까? 아니면 정말 똑똑한 사람들 만 이러한 유형의 문제를 해결할 수 있습니까? 이와 같은 문제를 해결 / 해결하는 것 (즉, 경험을 얻는 것)이 이것에 대해 더 나아지게하는 데 도움이됩니까?
깨달음을 기다립니다.