Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> многопутевое двухфазное естественное сбалансирован, многопутевое двухфазное естественное сба 
:(
    Опции темы
Domain
Дата 24.11.2011, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Всем привет. Пишу на java. Есть задание "В ООН имеется полный перечень всех стран, который включает в себя: название, континент, столицу, площадь, численность населения, государственный строй. Вывести названия и столицы государств в порядке убывания плотности населения. Применить многопутевое двухфазное естественное сбалансированное слияние." Для начала я ознакомился что вообщем представляет собой такая сортировка, в теории вроде все понятно: делим массив на индексы которые распределяются по путям, потом эти пути сливаются и операция повторяется пока индексов не станет 1. Я так понял. Я стал писать, но в какой то момент я осознал, что код стал громоздким и не понятным, видел примеры на ++, там кода в разы меньше (но я в нем так и не смог разобраться, т.к. там много арифметики указателей), тогда я понял что что-то делаю не так, скорее всего просто не правильно подхожу к решению задачи. Код показывать не стал, т.к. он скорее всего не верный. Сортировку нужно реализовать для файлов и для массивов. Я так понимаю, в случае файлов в качестве путей используются файлы, для массивов - массивы. Вообщем помогите кто-чем может. Буду рад любой инфе.
PM MAIL   Вверх
jk1
Дата 24.11.2011, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Полностью задачу за Вас никто решать не будет. Выложите код, объясните, что не устраивает/не получается, тогда Вам обязательно помогут.


--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
Domain
Дата 24.11.2011, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Вот что есть.  Я не могу написать сам процесс слияния. 


Код



public class Mergerer {
    private int countWay = 0; // количество путей

    private int countIndex = 0;

    private Integer[] base; // начальный массив

    private Integer[] tempBase; // начальный массив

    private Integer[][] arrayWay; // массив путей

    private String[] array1;

    private String[] array2;

    private String[] array3;

    private String[] array4;

    private String[] array5;

    private String[] array6;

    List<String[]> list = new ArrayList<String[]>();

    private int countElements = 0;

    public Mergerer(Integer[] base, int countWay) {
        this.countWay = countWay;
        this.arrayWay = new Integer[countWay][base.length + 1];
        tempBase = base;
        countElements = base.length;
        array1 = new String[base.length * 2];
        array2 = new String[base.length * 2];
        array3 = new String[base.length * 2];
        array4 = new String[base.length * 2];
        array5 = new String[base.length * 2];
        array6 = new String[base.length * 2];
        list.add(array1);
        list.add(array2);
        list.add(array3);
        list.add(array4);
        list.add(array5);
        list.add(array6);

    }

    public int divide() {
        int[][] posWay = new int[countWay][1];
        int beginIndexPos = 0;
        int numberWay = 0;
        int pos = 0;
        for (int i = 1; i < tempBase.length; i++) {
            if (tempBase[i] < tempBase[i - 1]) {
                for (int j = beginIndexPos; j < i; j++) {

                    list.get(numberWay)[posWay[numberWay][0]] = Integer
                            .toString(tempBase[j]);
                    arrayWay[numberWay][posWay[numberWay][0]] = tempBase[j];
                    posWay[numberWay][0]++;
                    countIndex++;
                }
                list.get(numberWay)[posWay[numberWay][0]] = "'";
                posWay[numberWay][0]++;
                beginIndexPos = i;
                if (numberWay == countWay - 1)
                    numberWay = 0;
                else
                    numberWay++;
                pos = 0;
            }
        }
        for (int i = beginIndexPos; i < tempBase.length; i++) {
            list.get(numberWay)[posWay[numberWay][0]] = Integer
                    .toString(tempBase[i]);
            arrayWay[numberWay][posWay[numberWay][0]] = tempBase[i];
            posWay[numberWay][0]++;
            countIndex++;
        }
        list.get(numberWay)[posWay[numberWay][0]] = "'";
        return countIndex;
    }

    public void printIndex() {
        for (int i = 0; i < countWay; i++) {
            for (int j = 0; j < countElements; j++) {
                 if (arrayWay[i][j] != null)
                System.out.print(arrayWay[i][j]);
            }
            System.out.println();
        }
    }

    public void printIndexList() {
        for (int i = 0; i < countWay; i++) {
            for (int j = 0; j < countElements; j++) {
                if (list.get(i)[j] != null)
                System.out.print(list.get(i)[j]);

            }
            System.out.println();
        }
    }

}


Например есть массив чисел Integer [] mas = {1,2,3,1,2,4,3,5,6,7,2,3,4};

Для того что бы разбить его на индексы и узнать сколько их, юзаестся метод divide(), который распределяет индексы по лентам в двух видах : в массив arrayWay и в лист, где каждый элемент этот массив строк. Вообщем если вызвать printIndex() и printIndexList(), то можно увидеть следующее.
Код

    public static void main(String[] args) {
        Integer [] mas = {1,2,3,1,2,4,3,5,6,7,2,3,4};
        Mergerer m = new Mergerer(mas, 3);
        m.divide();
        m.printIndex();
        System.out.println("-------------------------------------------------");
        m.printIndexList();
    }

123234
124
3567
-------------------------------------------------
123'234'
124'
3567'

Как видно, в первой ленте у нас два индекса, ну и т.д. В теории дальше я знаю что делать, в вот как это написать...  Я реально пробовал, но каждый раз я понимаю что то что я делаю не правильно, и я не стал это показывать, потому что скорее всего не объясню как хотел сделать и только запутаю. Вообщем я думаю, что мне могут помочь тока те люди,  которые с этим когда-то сталкивались, не зная теории сложно просто смотря в код сказать где ошибка и как нужно это дело реализовывать, хотя возможно я и ошибаюсь.



Это сообщение отредактировал(а) Domain - 24.11.2011, 20:31
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




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


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

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