A graph \(G\) is bipartite if \(V(G)\) can be partitioned into two sets \(A\) and \(B\) such that every edge of \(G\) has an endpoint in \(A\) and an endpoint in \(B\text{.}\) The pair \((A,B)\) are said to be a bipartition of \(G\text{.}\) We say that \(G\) is a complete bipartite graph if it contains every edge from \(A\) to \(B\text{;}\) we write \(G=K_{s,t}\) if it is complete bipartite with \(|A|=s\) and \(|B|=t\text{.}\)
It is clear that a bipartite graph cannot contain a copy of \(K_3\text{;}\) indeed, it can only contain copies of other bipartite graphs, which \(K_3\) is not. This makes a complete bipartite graph a natural candidate for trying to maximize the number of edges in a triangle-free graph. The graph \(K_{s,t}\) clearly contains \(st\) edges. Thus, among all choices of \(s\) and \(t\) with \(s+t=n\text{,}\) the number of edges in \(K_{s,t}\) is maximized when \(s\) and \(t\) are as similar as possible. Therefore,
\begin{equation*}
\ex(n,K_3) \geq \left\lfloor \frac{n}{2}\right\rfloor\left\lceil \frac{n}{2}\right\rceil = \left\lfloor \frac{n^2}{4}\right\rfloor
\end{equation*}
for all \(n\text{.}\)



