Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.03.2012, 14:46   #1
NickolayNest
Пользователь
 
Регистрация: 16.10.2011
Сообщений: 40
Вопрос Как вывести математическую формулу, представляющую переход от разреженной 2-мерной матрицы к одномерному массиву

Здравствуйте, задание состоит в том:

Разработать способ экономного размещения в памяти заданной разреженной таблицы,
все нулевые элементы расположены выше главной диагонали на нечетных строках и ниже главной диагонали - на четных

вот исходная матрица
1 0 0 0 0
0 2 3 4 5
6 7 8 0 0
0 0 0 9 10
11 12 13 14 15
переход к одномерному массиву я сделал:

есть код на джаве, c учетом того, что там цикл от нуля:
Код:
    /**
     * Этот метод преобразует двумерный разреженный массив в
     * одномерный, исключая "пустые" элементы(согласно варианту)
     * @param int[][]mas - принимает двумерный массив
     * @return int[]vect - одномерный сжатый массив
     */
    public int[] changeArray(int[][]mas){
        int vect[] = new int[mas.length*mas.length/2];///*+(mas.length+1)/2*/
        System.out.println("vect.length = "+vect.length);
        int n = 0;
        for(int i = 0; i < mas.length; i++){
            for(int j = 0; j < mas.length; j++){
                if(((j > i)&&(i%2 == 0))||((i > j)&&(i%2 != 0))){}
                else{vect[n] = mas[i][j];
                   n++;
                }
            }
        }
        return vect;
    }
Но тичер требует вывести математическую формулу перехода, чтобы избежать лишнего перебора ненужных элементов. В принципе, я с ним согласен, т.к. на это уходят ресурсы, время.

Но с формулой туго! Если кто может помочь, пожалуйста!

Да, вот пример перехода из задания:
Матрица целых чисел, в которой все элементы, лежащие ниже главной диагонали нулевые.

Во внутреннем представлении нет необходимости хранить элементы, нулевые по определению:
M[x,y] = 0 при x<y.
Если исключить нулевые элементы из хранения и представить матрицу в виде одномерного массива, то формула перехода от двухкоординатного обращения к однокоординатному запишется как:
j = СУММА[i= от 1 до y-1](XM-(i-1)) + x-(y-1)

где x, y - номера столбца и строки соответственно;
XM - число элементов в строке.
NickolayNest вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задача по одномерному массиву Paulsan Общие вопросы C/C++ 4 06.01.2012 00:24
одномерному массиву и табличкам viper52rus Помощь студентам 4 12.06.2010 15:25
как сделать прогу по одномерному массиву student2009 Паскаль, Turbo Pascal, PascalABC.NET 14 02.06.2009 10:20
Как с компилировать математическую формулу введеную в edit? hamann-2006 Помощь студентам 3 29.10.2007 17:43
Как расчитать математическую формулу либо физическую? pentiumForever Общие вопросы Delphi 7 13.09.2007 14:07