public static List<MeanRating> computeMostOftenWith(SparsedMatrix matrix, int movieId) {
		final List<MeanRating> result = new ArrayList<MeanRating>();
		final Node baseColumnHeader = matrix.getColumnHeader(movieId);
		Set<Integer> baseUserIds = new HashSet<Integer>();

		Node baseColumnCurrent = baseColumnHeader.getTop();
		while (baseColumnCurrent != baseColumnHeader) {
			baseUserIds.add(baseColumnCurrent.getRow());
			baseColumnCurrent = baseColumnCurrent.getTop();
		}

		Node currentColumnHeader = matrix.getHeader().getLeft();
		while (currentColumnHeader != matrix.getHeader()) {
			if (currentColumnHeader.getColumn() != movieId) {
				MeanRating currentMeanRating = new MeanRating(((Integer) currentColumnHeader.getColumn()).toString(), new BigDecimal(0.0));
				int currentWithCount = 0;
				Node currentColumnElement = currentColumnHeader.getTop();
				while (currentColumnElement != currentColumnHeader) {
					if (baseUserIds.contains(currentColumnElement.getRow())) {
						currentWithCount++;
					}
					currentColumnElement = currentColumnElement.getTop();
				}

				currentMeanRating.setMeanData(new BigDecimal(currentWithCount).divide(new BigDecimal(baseUserIds.size()),
						new MathContext(7)).round(new MathContext(2)));
				
				result.add(currentMeanRating);

			}
			currentColumnHeader = currentColumnHeader.getLeft();
		}

		return result;
	}