First, reduce the problem to a test of availabilities "per day". All your examples are using ranges for only one day, but if you also want to support a range like "Monday 10:00 to Wednesday 14:00", break this down into three tests for "Monday 10:00 to 23:59", "Thursday 00:00 to 23:59" and "Wednesday 00:00 to 10:00".
For each day, store an interval representation of the available times in form of a list of intervals. Initially, the list contains only one interval, lets say [9:00 , 17:00] for each day, and whenever a part of the day gets blocked for an different interval, (for example, room gets blocked from 10:00 to 11:25), you calculate the new resulting list of intervals (here [9:00,10:00], [11:25, 17:00]). Additional availability leads to additional intervals for some dates, and the "availability check" is nothing but an overlapping test of one new interval with all "available time" intervals of a specific day.
So in terms of sets, all you need is a "subtraction" operation on intervals, a "union" operation, and an overlapping test.
The implementation of the overlapping test for two intervals is not hard, it does not require any "sampling", just comparing the minimum and maximum values of each interval. See hereSee here for an example. Creating interval unions, or "subtraction" of intervals is not too complicated, too, see heresee here, note that the "set difference" of two intervals yields either two new intervals, one new interval or zero intervals . At the second link, you will also find a reference to an interval package in Python. I guess there are similar components or code snippets available for each major programming language, if you don't want to implement this on your own.