Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Разбиение матриц 
:(
    Опции темы
_OdinO4ka_
Дата 4.6.2009, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 8.11.2006
Где: Самара

Репутация: нет
Всего: нет



Помогите написать часть модуля. Суть такая у нас имеется матрица n*n (для наглядности пусть n = 4) Затем, мы из начальной матрицы (START) меняем элементы в условно шахматном порядка, т.е.

Была матрица вот такая

a1 a2 a3 a4
b1 b2 b3 b4   
c1 c2 c3 c4
d1 d2 d3 d4

далее выбираем маленький кусок матрицы a1 a2 и меняем местами так что бы получилось 4 вариации b2 a2   a1 b1   b1 b2   a2 a1 
                                                                       b1 b2                                                                                         b1 a1   a2 b2   a1 a2   b2 b1
ну и соответственно мы получаем 4 новых матрицы с этими кусками затем мы выбираем одну из них по критерию, т.е. из этих 4 остается только одна и переходим на следующий кусок и т.д. модуль для критерия написан. Я что - то запутался с этими матрицами, я так понимаю, что нужно создать 4 временных переменных матрицы и в них записывать измененные матрицы. 

Заранее большое спасбо!
PM MAIL   Вверх
Курсант
Дата 4.6.2009, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 338
Регистрация: 21.2.2009
Где: Балашиха или Воро неж

Репутация: 1
Всего: 4



Очень трудно понять из Ваших слов что именно требуется, какой алгоритм "условно шахматного порядка"... К тому же Вы сами даете понять что не знаете что должно быть в результате... Прийдется поднапрячься Вам и изложить вопрос понятнее...

Мое подозрение - Вам нужно резервировать область памяти под матрицы, потом ненужные удалять (как вариант)... Еще как вариант - можно создать объект матрицы и реализовать в его методах все операции, которые Вам там с матрицами проводить надо, потом можете создавать их динамически, не создавать, удалять, вызывать методы и в общем то сильно облегчить текст основной программы...
PM ICQ Skype   Вверх
_OdinO4ka_
Дата 4.6.2009, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 8.11.2006
Где: Самара

Репутация: нет
Всего: нет



условно шахматный порядок это я сам придумал, можно забить на этот термин. Результат у нас как бы делиться на 2 части: создается 4 новых матрицы с такими измененными кусками, затем из этих 4 остается только одна, остальные убиваются. Которая "выжила" с ней прогоняются такие процедуры заново и так пока не достигнет нужного критерия (у меня в задаче это минимизация ошибки функции), вот примерно так.
PM MAIL   Вверх
Курсант
Дата 4.6.2009, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 338
Регистрация: 21.2.2009
Где: Балашиха или Воро неж

Репутация: 1
Всего: 4



Код

#include <iostream>

typedef int [4][4] matrix;

// в этой функции надо реализовать грубая ошибка или не грубая... если грубая то возвр. true, если нет - то false;
bool isBrutalMismatch ( matrix M );
// а в этой надо реализовать, подходит ли матрица М под критерий того, что именно она из 4-х производных матриц - подходящая..
// то есть если подходит - то true, если не подходит - то false...
bool isCriterial ( matrix M);

int main()
{
      matrix m1;
      matrix ms[4];
      {....} // ввод матрицы в m1... это примитивно, поэтому не пишу...
      while (isBrutalMismatch(m1)) // то есть пока ошибка в матрице 1 грубая, производим следующие операции...
      {
          {....} // получение из m1 четырех матриц и размещение их в ms[0] - ms[3]; специфика шахматного порядка - на Ваши плечи ложится..
          for ( int i=0; i<4; i++)
              // проверяем каждую из 4-х матриц, не соответствует ли она критерию
              if (isCriterial (ms [i])
              {
                    {.....} // если да, то здесь копируем матрицу ms[i] в m1. После этого выходим из for оператором break; Тоже примитив...
                    break;
              }
      }
      {......} // здесь можно выводить матрицу m1, она соответствует по уровню ошибки... Примитивно - сами сделаете..
}


Похоже все, Вам остается только реализовать примитивы вроде ввода-вывода и копирования, а также Ваши специфические критерии ошибки и пригодности... А общая идея такова.

Это сообщение отредактировал(а) Курсант - 4.6.2009, 16:39
PM ICQ Skype   Вверх
_OdinO4ka_
Дата 15.6.2009, 23:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 8.11.2006
Где: Самара

Репутация: нет
Всего: нет



Покопавшись в книжках и доработав пример из этой книги, написал прогу, но она на яве, помогите её перекинуть на С, я с ним почти не работал :(

Код

package ru.shit.happens;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class MatrixReload {

    private final static int MATRIX_SIZE = 256;

    private static Random random;

    public MatrixReload() {
        random = new Random();
    }

    public static void main(String[] args) {
        MatrixReload m = new MatrixReload();
        m.iterateToMatrix();
    }

    public void iterateToMatrix() {
        int[][] source = getRandomMatrix(MATRIX_SIZE);

        printMessages("Source Matrix:");
        printMatrix(source);

        int[][] alive = copyMatrix(source);
        for (int i = 1; i < alive.length; i = i + 2) {
            for (int j = 1; j < alive.length; j = j + 2) {
                printMessages("New Matrixes: " + i + " " + j);
                List<int[][]> mix = mixBlock(alive, i, j);
                for (int[][] m : mix) {
                    printMatrix(m);
                }
                printMessages("Alive Matrix:");
                alive = criteriaStub(mix);
                printMatrix(alive);
            }
        }
    }

    public List<int[][]> mixBlock(int[][] source, int maxI, int maxJ) {
        List<int[][]> result = new ArrayList<int[][]>(source.length);
        for (int i = maxI - 1; i <= maxI; i++) {
            for (int j = maxJ - 1; j <= maxJ; j++) {
                int[][] temp = copyMatrix(source);
                int indexI = maxI;
                int indexJ = maxJ;
                if (j == maxI) {
                    indexI = maxI - 1;
                }
                if (j == maxJ) {
                    indexJ = maxJ - 1;
                }
                int tempElement = source[i][j];
                temp[i][j] = source[indexI][indexJ];
                temp[indexI][indexJ] = tempElement;
                result.add(temp);
            }
        }
        return result;
    }

    public int[][] copyMatrix(int[][] matrix) {
        int[][] result = new int[matrix.length][matrix.length];
        for (int i = 0; i < matrix.length; i++) {
            for (int j = 0; j < matrix.length; j++) {
                result[i][j] = matrix[i][j];
            }
        }
        return result;
    }

    public int[][] getRandomMatrix(int definition) {
        int[][] matrix = new int[definition][definition];
        for (int i = 0; i < matrix.length; i++) {
            for (int j = 0; j < matrix.length; j++) {
                matrix[i][j] = random.nextInt(10);
            }
        }
        return matrix;
    }

    public void printMatrix(int[][] matrix) {
        for (int i = 0; i < matrix.length; i++) {
            for (int j = 0; j < matrix.length; j++) {
                System.out.print(matrix[i][j] + " ");
            }
            System.out.println();
        }
        System.out.println();
    }

    public void printMessages(String message) {
        System.out.println(message);
    }

    public int[][] criteriaStub(List<int[][]> matrixes) {
        return matrixes.get(random.nextInt(4));
    }

}



Заранее огромное спасибо!
PM MAIL   Вверх
_OdinO4ka_
Дата 17.6.2009, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 8.11.2006
Где: Самара

Репутация: нет
Всего: нет



может кто - нибудь, все же поможет, а то я что - то совсем встрял :(
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0691 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.