Iterative Deepening Search (IDS) combines the optimality of breadth-first search with the low memory usage of depth-first search. IDS performs a depth-limited depth-first search at each level, starting from depth 0 and incrementally increasing the depth limit. This allows it to find optimal solutions while only requiring O(bd) memory like DFS. IDA* extends this idea to A* search by imposing a limit on the estimated total path cost f and iteratively relaxing that limit, reducing memory usage while maintaining completeness and optimality.