I'm a theoretical computer scientist currently serving on the admissions committee of a top-15 computer science department.
Some of the things that I hear is that getting admission in TCS in top 15 theory univ is tough. The toughness is obviously due to the large volumes of applications that these univ receive (dnt know how much?).
This year my department received about 50 PhD applications from people whose primary interest is theoretical computer science and probably another 50 with secondary interest in theory, out of 750 PhD applications overall. We've offered admission to about 10 theory PhD students (out of about 200 PhD offers total). We realistically expect three or four theory students to accept our offer (out of about 80-100 total).
However one of the big factors is limited funding available with prof. So who funds students? prof or univ?
It's complicated. A typical PhD offer from a strong department includes guaranteed funding in some form. My department promises five years of funding to every incoming PhD student, assuming they make steady progress toward their degree. (Do not accept a PhD admission offer without funding. If they really want you, they'll pay for you.) Most of our students take 6 years to finish, but in practice, (100-ε)% of our students are funded for their entire stay. A typical theory student in my department is a TA for 2-4 semesters and an RA of fellow for the rest.
When a student is admitted, the department is making a contractual commitment to funding that student, assuming they make adequate progress toward their degree. In practice, most of that funding comes from individual faculty grants, most of the rest comes from the department's budget for teaching assistantships, and a small fraction comes from fellowships (university, NSF, DOE, NDSEG, Hertz, etc.).
The number of students that each group is allowed to admit depends primarily on three factors:
Advising capacity: How many students can each faculty member in the group reasonably advise? The limiting resource here is faculty attention, not money. Theoretical computer science faculty tend to have relatively small groups, compared to some areas in CS. Steady state in my group seems to be about 3 PhD students per faculty. This is the most significant factor, in my opinion.
Funding capacity: How many students can each faculty member reasonably expect to fund? This isn't just a function of the faculty's current grants; a typical grant lasts only 3 years, but each student needs 5-6 years of funding.
Teaching demand: How many TAs does the group need to support its teaching responsibilities? Conversely, for how many semesters are students in the group expected to be TAs, as part of their PhD training? The ratio of these two numbers basically determines how many students the department is willing to pay for on its own dime.
In some cases I heard, that it is the prof who funds the student, then
in that case why the admission process is centralized (the prof who is
actually funding may not be in the committee)?
In US computer science programs, departments offer admission, not individual faculty. Students are completely free to change advisors or even research areas, even if their existing advisor is funding them. (Of course, they have to fulfill their funding obligations, but that's an orthogonal issue.) Formally, students in my department do not even choose their thesis advisors until the end of their first year. (One of my recent PhDs entered the department as an RA in distributed systems/sensor networks; he switched to algorithms at the end of his first year.) For that reason, it's crucial that the admissions decision does not rest entirely with a single faculty member.