예제 #1
0
        public string[] getarraytitle(int[] title)
        {
            ThuVienKetNoiThuatToan kn = new ThuVienKetNoiThuatToan();
            string sql_listmoview     = "select TITLE from MOVIES where MOVIEID = " + title[0].ToString();

            foreach (int it in title)
            {
                sql_listmoview += " or MOVIEID = " + it.ToString();
            }
            DataTable LM;

            LM = kn.Dulieu(sql_listmoview);
            string[] ketqua = new string[LM.Rows.Count];
            int      i      = 0;

            foreach (DataRow item in LM.Rows)
            {
                ketqua[i] = item[0].ToString();
                i++;
            }
            return(ketqua);
        }
예제 #2
0
        public int[] ThuatToan(int id_user, int i_soluongnguoidung, int soluongitem)
        {
            ThuVienKetNoiThuatToan kn = new ThuVienKetNoiThuatToan();
            DataTable tb;
            //if (Int32.Parse(kn.Ham_ExecuteScalar("select count(*) from RATINGS where USERID = '" + id_user.ToString()).ToString().Trim() + "'") == 0)
            //    return null;
            //Tạo mảng 1 chiều chứa i_soluongnguoidung ngoại trừ id_user
            string sql_USER = "******" + i_soluongnguoidung.ToString() + " (USERID) from RATINGS where USERID <> " + id_user.ToString() + " ORDER BY NEWID()";

            tb = kn.Dulieu(sql_USER);
            tb.Rows.Add(id_user);
            int[] mang_u = kn.Table_To_Array_1(tb);
            mang_u = kn.Xoatrung(mang_u);

            //Tạo mảng 1 chiều chứa các phần tử sản phẩm được đánh giá bởi các người dùng
            string sql_item = "select TOP " + soluongitem + " MOVIEID from RATINGS where USERID = " + mang_u[0].ToString();

            foreach (int i in mang_u)
            {
                sql_item += " or USERID = " + i.ToString();
            }
            int[] mang_i = kn.Table_To_Array_1(kn.Dulieu(sql_item));
            mang_i = kn.Xoatrung(mang_i);

            //Trả về mảng 2 chiều từ 2 mảng 1 chiều
            float[,] mang_ui = kn.Return_2Chieu(mang_u, mang_i);

            //Bắt đầu vô thuật toán
            //Tạo mảng 2 chiều chứa số cột = số dòng = số lượng user
            //Mảng ma trận chứa các phần tử ĐỘ TƯƠNG ĐỒNG GIỮA CÁC USER
            double[,] Array_Pearsion = new double[mang_ui.GetLength(0), mang_ui.GetLength(0)];

            //Vòng lặp tính độ tương đồng của 2 người dùng đưa vào mảng;
            for (int u = 0; u < Array_Pearsion.GetLength(0); u++)
            {
                for (int v = 0; v < Array_Pearsion.GetLength(1); v++)
                {
                    Array_Pearsion[u, v] = kn.Tinh_Pearsion(u, v, mang_ui);
                }
            }

            //Tìm 2 người dùng tương đồng với người dùng id_user nhất
            int max1          = 0;
            int max2          = 0;
            int index_user_id = mang_u.Length - 1;

            kn.Return_2_Nguoi_Dung_Gan_Nhat(index_user_id, ref max1, ref max2, Array_Pearsion);

            double avg_ofuser = (double)(kn.Tinh_AVG_Of_Item(mang_ui, index_user_id));

            //Tạo bảng tính giá trị trung bình xếp hạng cho từng sản phẩm
            float[,] Array_AVG_Ratings_Item = new float[mang_ui.GetLength(0), mang_ui.GetLength(1)];

            Array_AVG_Ratings_Item = kn.Tinh_AVG_Ratings_Item(mang_ui);

            //Tính giá trị trung bình của các số 0 cho người dùng input, xong rồi mới lấy list đó ra order by desc để gợi ý
            double[] mang_result_AVG_u = new double[Array_AVG_Ratings_Item.GetLength(1)];

            mang_result_AVG_u = kn.Goi_Y_Gia_Tri_Trung_Binh_Cho_User_Input(Array_AVG_Ratings_Item, Array_Pearsion, max1, max2, index_user_id, avg_ofuser);

            double[] Mang_Item_And_Result = kn.SapXepMang(ref mang_i, mang_result_AVG_u);

            return(mang_i);
        }