  In this paper we consider the classic matroid intersection problem: given two
matroids $\M_{1}=(V,\I_{1})$ and $\M_{2}=(V,\I_{2})$ defined over a common
ground set $V$, compute a set $S\in\I_{1}\cap\I_{2}$ of largest possible
cardinality, denoted by $r$. We consider this problem both in the setting where
each $\M_{i}$ is accessed through an independence oracle, i.e. a routine which
returns whether or not a set $S\in\I_{i}$ in $\indep$ time, and the setting
where each $\M_{i}$ is accessed through a rank oracle, i.e. a routine which
returns the size of the largest independent subset of $S$ in $\M_{i}$ in
$\rank$ time.
  In each setting we provide faster exact and approximate algorithms. Given an
independence oracle, we provide an exact $O(nr\log r \indep)$ time algorithm.
This improves upon the running time of $O(nr^{1.5} \indep)$ due to Cunningham
in 1986 and $\tilde{O}(n^{2} \indep+n^{3})$ due to Lee, Sidford, and Wong in
2015. We also provide two algorithms which compute a $(1-\epsilon)$-approximate
solution to matroid intersection running in times $\tilde{O}(n^{1.5}/\eps^{1.5}
\indep)$ and $\tilde{O}((n^{2}r^{-1}\epsilon^{-2}+r^{1.5}\epsilon^{-4.5})
\indep)$, respectively. These results improve upon the $O(nr/\eps \indep)$-time
algorithm of Cunningham as noted recently by Chekuri and Quanrud.
  Given a rank oracle, we provide algorithms with even better dependence on $n$
and $r$. We provide an $O(n\sqrt{r}\log n \rank)$-time exact algorithm and an
$O(n\epsilon^{-1}\log n \rank)$-time algorithm which obtains a
$(1-\eps)$-approximation to the matroid intersection problem. The former result
improves over the $\tilde{O}(nr \rankt+n^{3})$-time algorithm by Lee, Sidford,
and Wong. The rank oracle is of particular interest as the matroid intersection
problem with this oracle is a special case of the submodular function
minimization problem with an evaluation oracle.
