Dynamic Resource Allocation Techniques For Half- And Full-Duplex Systems