%EC%97%90%EC%84%9C%EC%B2%98%EB%9F%BC%20%EC%97%B4%EC%9D%B4%20%ED%8F%AC%ED%95%A8%EB%90%9C%20%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98%EC%9D%84%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%EC%A1%B0%ED%8C%90%ED%95%A0%20%EC%88%98%20%EC%9E%88%EB%82%98%EC%9A%94%3F.png)
~ 안에 알고리즘 소개, Thomas Cormen의 이 이미지와 같은 알고리즘이 있습니다. 코드 열 하나, 비용 열 하나, 시간 열 하나가 있습니다.
많이 검색해봤는데 어떻게 하는지 못찾았네요.
답변1
.clrscode
\documentclass[11pt]{article}
\usepackage[noend]{algorithmic}
\newcommand{\TITLE}[1]{\item[#1]}
\renewcommand{\algorithmiccomment}[1]{$/\!/$ \parbox[t]{4.5cm}{\raggedright #1}}
% ugly hack for for/while
\newbox\fixbox
\renewcommand{\algorithmicdo}{\setbox\fixbox\hbox{\ {} }\hskip-\wd\fixbox}
% end of hack
\newcommand{\algcost}[2]{\strut\hfill\makebox[1.5cm][l]{#1}\makebox[4cm][l]{#2}}
\begin{document}
\begin{algorithmic}[1]
\TITLE{\textsc{Insertion-Sort}$(A)$}
\algcost{\textit{cost}}{\textit{times}}
\FOR{$j=2$ \TO $A.\mathit{length}$
\algcost{$c_1$}{$n$}}
\STATE $\mathit{key} = A[j]$
\algcost{$c_2$}{$n-1$}
\STATE \COMMENT{Insert $A[j]$ to the sorted sequence $A[1..j-1]$}
\algcost{$0$}{$n-1$}
\STATE $i = j-1$
\algcost{$c_4$}{$n-1$}
\WHILE{$i>0$ \AND $A[i]>key$
\algcost{$c_5$}{$\sum_{j=2}^{n} t_j$}}
\STATE $A[i+1]= A[i]$
\algcost{$c_6$}{$\sum_{j=2}^{n} (t_j-1)$}
\STATE $i = i-1$
\algcost{$c_7$}{$\sum_{j=2}^{n} (t_j-1)$}
\ENDWHILE
\STATE $A[i+1] = \mathit{key}$
\algcost{$c_8$}{$n-1$}
\ENDFOR
\end{algorithmic}
\end{document}
몇 가지 사항에 유의하세요.
조정이 필요할 수 있는 세 가지 너비(센티미터)가 있습니다.
비용
for
및while
명세서는 괄호 안에 표시되며 해당 괄호와 닫는 괄호 사이에 공백이 있어서는 안 됩니다. 이것은 약간 깨지기 쉽습니다. forif
및 기타 모든 블록 문과 동일합니다 .3행의 비용은 두 번째 행이 아닌 첫 번째 행 옆에 표시됩니다(원본과 동일). 이렇게 하는게 더 쉬웠는데 나도 이게 더 좋은 것 같다.
이 답변은 패키지를 사용하는 Jubobs의 답변과 반대 경로를 취합니다 clrscode
. 를 사용하려는 경우 추가 열을 탭하는 데 clrscode
올바르게 사용하는 방법을 찾을 수 있을 것이라고 확신합니다 . 비록 잘 문서화되어 있지는 않습니다. |>
또한 알고리즘이 책에 나온 것과 똑같이 보이도록 하려면 다른 이유로도 바람직할 수 있습니다.
답변2
(부분 답변만 가능)
Cormen은 그의 것을 사용했습니다.clrscode
패키지CLRS의 두 번째 버전이지만 "강화된" 버전입니다.clrscode3e
, 제3판의 경우,삽입 정렬스크린샷의 알고리즘이 촬영됩니다. 자세한 내용은 다음을 참조하세요.이것.
알고리즘을 조판하는 코드(그러나없이"비용" 및 "시간" 열)은 6페이지에서 확인할 수 있습니다.clrscode3e
선적 서류 비치. 후자는 열을 조판하는 방법에 대해 언급하지 않습니다. 게다가 패키지의 소스 코드는 이에 대한 (문서화되지 않은) 메커니즘을 제공하지 않는 것 같습니다.
그러나 Cormen의 codebox
환경은 환경을 기반으로 합니다 tabbing
. 아마도 거기에서 해야 할 일이 있을 것입니다. 하지만 저는 그다지 익숙하지 않습니다 tabbing
.
\documentclass{article}
\usepackage{clrscode3e}
\begin{document}
\begin{codebox}
\Procname{$\proc{Insertion-Sort}(A)$}
\li \For $j \gets 2$ \To $\attrib{A}{length}$
\li \Do
$\id{key} \gets A[j]$
\li \Comment Insert $A[j]$ into the sorted sequence
$A[1 \twodots j-1]$.
\li $i \gets j-1$
\li \While $i > 0$ and $A[i] > \id{key}$
\li \Do
$A[i + 1] = A[i]$
\li $i \gets i-1$
\End
\li $A[i+1] \gets \id{key}$
\End
\end{codebox}
\end{document}
답변3
CLRS 패키지, 코드 이름 "clrscode3e", 패키지 설명 및 .sty
파일이 웹 사이트에서 제공됩니다.http://www.cs.dartmouth.edu/~thc/clrscode/.sty
, 쉽게 파일을 다운로드하고 설명도 읽을 수 있습니다 .
\documentclass{article}
\usepackage{clrscode3e}
\begin{document}
\begin{codebox}
\Procname{$\proc{Insertion-Sort}(A)$}
\li \For $j \gets 2$ \To $\attrib{A}{length}$
\li \Do
$\id{key} \gets A[j]$
\li \Comment Insert $A[j]$ into the sorted sequence
$A[1 \twodots j-1]$.
\li $i \gets j-1$
\li \While $i > 0$ and $A[i] > \id{key}$
\li \Do
$A[i + 1] = A[i]$
\li $i \gets i-1$
\End
\li $A[i+1] \gets \id{key}$
\End
\end{codebox}
\end{document}