what is the difference between parallel processing and multi core processing
Parallel processing can be done inside a single core with multiple threads.
Multi-Core processing means distributing those threads to make use of the multiple cores in a CPU.
Parallel processing refers to having multiple units of execution (threads or processes) that are interleaved. This can happen in either in a single core CPU or in many cores/CPUs or even in many machines (clusters).
Multi core processing refers to having multiple units of execution that are actually executed in a CPU with many cores, where execution can happen at the same time, one or more unit in each core.
So multicore is a subset of parallel and parallel is itself a subset of distributed systems or distributed computing.
Parallel processing just refers to a program running more than 1 part simultaneously, usually with the different parts communicating in some way. This might be on multiple cores, multiple threads on one core (which is really simulated parallel processing), multiple CPUs, or even multiple machines.
Multicore processing is usually a subset of parallel processing.
Multicore processing means code working on more than one "core" of a single CPU chip. A core is like a little processor within a processor. So making code work for multicore processing will nearly always be talking about the parallelization aspect (though would also include removing any core specific assumptions, which you shouldn't normally have anyway).
As far as an algorithm design goes, if it is correct in a parallel processing point of view, it will be correct multicore.
However, if you need to optimise your code to get it to run as fast as possible "in parallel" then the differences between multicore, multi-cpu, multi-machine, or vectorised will make a big difference.