How can I compress this a bit so it doesn't fill up the whole page? Like maybe make the nodes smaller or get more fine-tuned control over the arrows and arrow text?
This is a creative question. Maybe there is a better layout for the nodes. I am also not sure how different you want the arrows and arrow text to be.
The size of the nodes is controled by the option "inner sep" (p. 175 of TikZ Manual v. 2.10), which can be negative, but it does not seem to work when the option "state" is given.
Alternatively, is there someway I can put a ... in there, like have the nodes

?
The following code draws four nodes with dots between them.
Code:
\usetikzlibrary{arrows,automata,positioning}
\begin{tikzpicture}[->,>=stealth',shorten >=1pt,auto,node distance=3cm,semithick,node distance=2cm,on grid]
\node[initial,accepting,state] (S) {$q_s$};
\node[accepting,state,below left=2 of S] (D) {$q_t$};
\node[right=5 of S,circle,fill,inner sep=1pt] (vdots) {};
\node[above=.3 of vdots,circle,fill,inner sep=1pt] {};
\node[below=.3 of vdots,circle,fill,inner sep=1pt] {};
\node[state,above=of vdots] (N1) {$q_1$};
\node[state,above=of N1] (N0) {$q_0$};
\node[state,below=of vdots] (Nn-1) {};
\node[state,below=of Nn-1] (Nn) {$q_n$};
\foreach \n/\l in {0, 1, n-1/(n-1), n}
\path (N\n) edge[loop above] node {\scriptsize$\Sigma-\l$} ();
\node[accepting,state,right=5 of vdots] (W) {$q_w$};
\path (S) edge node {$\Sigma$} (D)
edge node[near end] {\scriptsize$\Sigma-0$} (N0)
edge node[near end] {\scriptsize$\Sigma-1$} (N1)
edge node {\scriptsize$\Sigma-(n-1)$} (Nn-1)
edge node {\scriptsize$\Sigma-n$} (Nn)
(N0) edge node {\scriptsize$0$} (W)
(N1) edge node {\scriptsize$1$} (W)
(Nn-1) edge node {\scriptsize$n-1$} (W)
(Nn) edge node {\scriptsize$n$} (W);
\end{tikzpicture} The library "positioning" makes it possible to say "right=5 of ...".
How can I write a loop to shorten the code?
Here is how to draw the nodes N0 — N9. This works because some evaluation is done inside the coordinates.
Code:
\foreach \n in {0, ..., 9}
\node[state] (N\n) at (5,8-2*\n) {$q_\n$}; If you specify the options "node distance=2cm,on grid" after "\begin{tikzpicture}", you can do the following.
Code:
\node[state] (N0) at (5,8) {$q_0$};
\foreach \n [remember=\n as \m (initially 0)] in {1, ..., 9}
\node[state,below=of N\m] (N\n) {$q_\n$}; You can also draw the loop arrows inside the for-loop.
Code:
\node[state] (N0) at (5,8) {$q_0$};
\foreach \n [remember=\n as \m (initially 0)] in {1, ..., 9} {
\node[state,below=of N\m] (N\n) {$q_\n$};
\path (N\n) edge [loop above] node {\scriptsize$\Sigma-\n$} ();
}