A method of retrieving data from a memory, the method comprising: detecting values associated with charges stored by selected memory cells in an array (100, 400) of memory cells, wherein states of data digits stored in the selected memory cells in the array are determined based on the detected values and a threshold value; in response to an uncorrectable error to supplement error correction codes, processing the determined values in accordance with a Viterbi algorithm such that errors in the detected values resulting from inter-signal interference from at least one neighboring memory cell are corrected for determining states of the data digits of the selected memory cells; and wherein processing the determined values in accordance with the Viterbi algorithm includes: determining errors associated with paths leading to each possible state of each selected memory cell from each possible state of a neighboring selected memory cell at least partially based on the detected value of the selected memory cell and inter-signal interference on the selected memory cell from the neighboring selected memory cell; and selecting one of the paths leading to each possible state of each selected memory cell at least partially based on an accumulation of the determined errors such that the selected one of the paths has a minimum accumulated error. detecting values associated with charges stored by selected memory cells in an array (100, 400) of memory cells, wherein states of data digits stored in the selected memory cells in the array are determined based on the detected values and a threshold value; in response to an uncorrectable error to supplement error correction codes, processing the determined values in accordance with a Viterbi algorithm such that errors in the detected values resulting from inter-signal interference from at least one neighboring memory cell are corrected for determining states of the data digits of the selected memory cells; and wherein processing the determined values in accordance with the Viterbi algorithm includes: determining errors associated with paths leading to each possible state of each selected memory cell from each possible state of a neighboring selected memory cell at least partially based on the detected value of the selected memory cell and inter-signal interference on the selected memory cell from the neighboring selected memory cell; and selecting one of the paths leading to each possible state of each selected memory cell at least partially based on an accumulation of the determined errors such that the selected one of the paths has a minimum accumulated error. determining errors associated with paths leading to each possible state of each selected memory cell from each possible state of a neighboring selected memory cell at least partially based on the detected value of the selected memory cell and inter-signal interference on the selected memory cell from the neighboring selected memory cell; and selecting one of the paths leading to each possible state of each selected memory cell at least partially based on an accumulation of the determined errors such that the selected one of the paths has a minimum accumulated error.