Exemple #1
0
        static void Main(string[] args)
        {
            //Входные данные
            Console.Write("I. Укажите параметры задачи \n");
            Console.Write("\n Количество строк ( > 1) : ");
            int N = Convert.ToInt32(Console.ReadLine());

            Console.Write(" Количество столбцов : ");
            int M = Convert.ToInt32(Console.ReadLine());

            int[,] Source = new int[N, M]; // исходная матрица
            int[,] Mask   = new int[N, M]; // матрица подсчета масок
            int[] Compare = new int[M];    // матрица сравнения i-строки с маской
            int[] Index   = new int[N];    // массив индексов

            Console.Write($"\n Исходная матрицы ({N}x{M}) : \n");
            ElementsAdd(Source, N, M);

            Console.Write("\nII. Результат решения задачи \n");
            ClasterCompare Classter = new ClasterCompare();

            Classter.Initialization(DefinL(M), N, M);

            int QM = Classter.CreateMask(Source, Mask, Compare); //  количество масок

            int[,] Result = new int[N, QM];                      // конечная матрица масок кодирования

            Console.WriteLine($" Количество масок : {QM} \n");
            //Console.WriteLine(" Матрица масок : "); Print(Mask);
            Console.WriteLine(" Матрица кодирования строк: ");
            Classter.CreateResult(Source, Mask, Result, Compare);
            Print(Result);

            //Преобразование двумерного массива в одномерный для сортировки
            string[] Sort = new string[N];
            for (int i = 0; i < N; i++)
            {
                Index[i] = i;
                for (int j = 0; j < QM; j++)
                {
                    Sort[i] += Result[i, j].ToString();
                }
            }
            //Сортировка
            for (int j = 0; j < N - 1; j++)
            {
                for (int i = 0; i < N - j - 1; i++)
                {
                    if (Sort[i].CompareTo(Sort[i + 1]) < 0)
                    {
                        string tempchar = Sort[i];
                        Sort[i]     = Sort[i + 1];
                        Sort[i + 1] = tempchar;

                        int temp = Index[i];
                        Index[i]     = Index[i + 1];
                        Index[i + 1] = temp;
                    }
                }
            }

            //Вывод результата
            int QC = 1;

            Console.WriteLine("\n Кластеры : ");
            for (int i = 0; i < N; i++)
            {
                Console.Write(" A" + (Index[i] + 1));
                if (i + 1 != N)
                {
                    if (Sort[i] != Sort[i + 1])
                    {
                        Console.Write(" | ");
                        QC++;
                    }
                    else
                    {
                        Console.Write(", ");
                    }
                }
            }
            Console.WriteLine("\n\n Количество кластеров : " + QC);
            Console.WriteLine("\nДля выхода нажмите клавишу ввода (ENTER)...");
            Console.ReadLine();
        }
Exemple #2
0
        public static string Get_Maski(int N_str, int M_stolb, int[,] Matrix)
        {
            int N = N_str;
            int M = M_stolb;

            int[,] Source = new int[N, M];    // исходная матрица
            int[,] Mask   = new int[N, M];    // матрица подсчета масок
            int[] Compare = new int[M];       // матрица сравнения i-строки с маской
            int[] Index   = new int[N];       // массив индексов
            Source = Matrix;
            ClasterCompare Classter = new ClasterCompare();

            Classter.Initialization(DefinL(M), N, M);

            int QM = Classter.CreateMask(Source, Mask, Compare); //  количество масок

            int[,] Result = new int[N, QM];                      // конечная матрица масок кодирования

            //  Console.WriteLine($" Количество масок : {QM} \n");

            //Console.WriteLine(" Матрица кодирования строк: ");
            Classter.CreateResult(Source, Mask, Result, Compare);
            // Print(Result);

            //Преобразование двумерного массива в одномерный для сортировки
            string[] Sort = new string[N];
            for (int i = 0; i < N; i++)
            {
                Index[i] = i;
                for (int j = 0; j < QM; j++)
                {
                    Sort[i] += Result[i, j].ToString();
                }
            }
            //Сортировка
            for (int j = 0; j < N - 1; j++)
            {
                for (int i = 0; i < N - j - 1; i++)
                {
                    if (Sort[i].CompareTo(Sort[i + 1]) < 0)
                    {
                        string tempchar = Sort[i];
                        Sort[i]     = Sort[i + 1];
                        Sort[i + 1] = tempchar;

                        int temp = Index[i];
                        Index[i]     = Index[i + 1];
                        Index[i + 1] = temp;
                    }
                }
            }

            //Вывод результата
            int QC = 1;
            // Console.WriteLine("\n Кластеры : ");
            string sle = "|Первая группа|\n";

            for (int i = 0; i < N; i++)
            {
                sle = sle + "\n " + (Index[i] + 1).ToString();
                if (i + 1 != N)
                {
                    if (Sort[i] != Sort[i + 1])
                    {
                        sle = sle + " \n\n|Другая группа|\n ";
                        QC++;
                    }
                    else
                    {
                        sle = sle + " ";
                    }
                }
            }

            return(sle + " \n Количество кластеров : " + QC + ".");
            //    Console.WriteLine("\nДля выхода нажмите клавишу ввода (ENTER)...");
            //  Console.ReadLine();
        }