public static void computePuz()
	{
		for(int i = 0; i < DataInfo.numUsers; i++) {
			int numrate = DataInfo.userInfo[i].length;
			
			double[] temp = new double[DataInfo.hidVariables];
			for(int k = 0; k < DataInfo.hidVariables; k++)
				temp[k] = 0;
			
			for(int j = 0; j < numrate; j++)
			{
				int item = DataInfo.userInfo[i][j] / 10;
				int rate = DataInfo.userInfo[i][j] % 10;
				
				double norm = 0;
				for(int k = 0; k < DataInfo.hidVariables; k++)
				{
					double part = Pvyz(rate, item, k) * tPuz[i][k];
					norm += Math.pow(part, DataInfo.beta);
				}
				
				for(int k = 0; k < DataInfo.hidVariables; k++)
				{
					double part = Pvyz(rate, item, k) * tPuz[i][k];
					if(norm != 0) 
						temp[k] += part / norm;
				}
			}
			
			double norm = 0;
			for(int k = 0; k < DataInfo.hidVariables; k++)
			{
				norm += temp[k];
			}
			
			for(int k = 0; k < DataInfo.hidVariables; k++)
			{
				if(norm != 0) 
					DataInfo.Puz[i][k] = temp[k] / norm;
			}
		}
	}