powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Задачка про остров
25 сообщений из 421, страница 11 из 17
Задачка про остров
    #39929693
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще несколько мыслей - дополнений по условию наших тестов.

1. Одна и та-же карта. И один и тото-же инстанс алгоритма могут быть (и должны) использоваться несколько раз за сеанс.
Тоесть наш алгоритм это автомат с состоянием.
2. Приливы и отливы на острове должны иметь колебательный характер с неким повышением среднего.
(Помните постановку с кратером внутри кратера?)
3. Для диапазона географических высот от 0 до 255 условных единиц мы
4. Остров с круглыми стенами (Колизей или цирк) который предложил Имя пользователя1
я тоже включаю в коллекцию синтетических ландшафтов. Он пригодится для краш-тестов.
5. Исходные данные островов будут представлены как картинками (PNG) так и Comma-Separated файлами для удобства
модульных тестов или каких-то проверок.

Отпишите ваши каменты если вы с чем-то не согласны.

Возможно к выходным я выкачу свой алгоритм. Но... я попробую написать его на Rust. А от этого
моя чортова эффективность как кодера понизится Увы. Придется спешить с справочником в одной руке.

Для наглядности наши карты должны иметь хоть какой-то 3D вид. Кто из участников знает Blender или 3DMax
чтоб хотя-бы визуализировать их внешний вид в изометрии. И не в сереньком виде а в виде географической
раскраски высот. КМК гео-палитра наиболее наглядна. Да и привыкли мы к ней все.
...
Рейтинг: 0 / 0
Задачка про остров
    #39929746
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот такая вот коллекция вулканических островов есть.
Пока главные недостаток - разные размеры и разные форматы.
И есть анизотропность. Не все имеют пропорции 1:1. Но это я пофикшу
в оффлайне.
...
Рейтинг: 0 / 0
Задачка про остров
    #39929747
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это - технические данные. Как видите - зоопарк форматов. Для общности я сделаю копию PPM для каждого и эту копию
положу в gzip чтоб легче качат.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
.: directory
./image-2048x2048.png: PNG image data, 2048 x 2048, 8-bit/color RGBA, non-interlaced
./BritanniaHeightMap2-200x200.jpg: JPEG image data, JFIF standard 1.01, resolution (DPI), density 200x200, segment length 16, baseline, precision 8, 1024x1024, frames 3
./canyons-01-2048x2048.png: PNG image data, 2048 x 2048, 8-bit/color RGB, non-interlaced
./volcano.png: PNG image data, 256 x 256, 8-bit grayscale, non-interlaced
./dah8mdt-7156d41d-297b-4cda-bed2-45f9715b98fe.png: PNG image data, 513 x 513, 8-bit grayscale, non-interlaced
./Pits-n-rocks-512x512.png: PNG image data, 512 x 512, 8-bit/color RGB, non-interlaced
./volcano-height-map-258-0_large.png: PNG image data, 800 x 800, 8-bit/color RGBA, non-interlaced
./images.jpeg: JPEG image data, JFIF standard 1.01, aspect ratio, density 1x1, segment length 16, baseline, precision 8, 224x225, frames 3
./cloud-2048x2048.jpg: JPEG image data, baseline, precision 8, 2048x2048, frames 3
./volcano-04.png: PNG image data, 1024 x 1024, 8-bit grayscale, non-interlaced
./Terrain-Heightmap-512x512.png: PNG image data, 512 x 512, 8-bit/color RGB, non-interlaced
./cape-512x512.jpg: JPEG image data, JFIF standard 1.01, resolution (DPI), density 97x97, segment length 16, progressive, precision 8, 512x512, frames 1
./jds2Fx6.png: PNG image data, 563 x 565, 8-bit/color RGBA, non-interlaced
./volcano-03.jpeg: JPEG image data, JFIF standard 1.01, aspect ratio, density 1x1, segment length 16, baseline, precision 8, 225x225, frames 3
./volcano-02.jpeg: JPEG image data, JFIF standard 1.01, aspect ratio, density 1x1, segment length 16, baseline, precision 8, 225x225, frames 3
./canyon-1081x1081.png: PNG image data, 1081 x 1081, 16-bit grayscale, non-interlaced
./island-03.jpg: JPEG image data, JFIF standard 1.01, aspect ratio, density 1x1, segment length 16, comment: "CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 100", baseline, precision 8, 423x378, frames 3
./heightmap.jpeg: JPEG image data, JFIF standard 1.01, resolution (DPI), density 96x96, segment length 16, baseline, precision 8, 640x480, frames 3
./layers-512x512.png: PNG image data, 512 x 512, 8-bit/color RGB, non-interlaced



Синтетические картинки (пирамиды и бассейны и плато) я нагенерирую быстро.

Однако спираль и лабиринт - отдельная тема. Спираль напрямую у меня не получается.
Вида функция f(x,y). Надо делать параметрически.

Лабиринт - скорее всего найду готовый. Главное чтоб разрешение было хорошее.
Думаю что лабиринт будет самым суровым краш-тестом по времени на наши алгоритмы.
...
Рейтинг: 0 / 0
Задачка про остров
    #39929753
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Лабиринт - скорее всего найду готовый. Главное чтоб разрешение было хорошее.
Думаю что лабиринт будет самым суровым краш-тестом по времени на наши алгоритмы.


Не думаю.
...
Рейтинг: 0 / 0
Задачка про остров
    #39929780
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот типа такого. Он слегка шумит в центре. Там была надпись водяным знаком. Я ее выгонял цветовыми кривыми
вроде выгнал но остался шум.

Я добалю ее в каталог рельефов. А если такой лабиринт процедурально наложить на конус такого-же радиуса - то
мы получим такую себе Вавилонскую башню куда вода будет затекать последовательно по всему лабиринту.
...
Рейтинг: 0 / 0
Задачка про остров
    #39929791
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

то что там есть немало серого даже добавит интереса
...
Рейтинг: 0 / 0
Задачка про остров
    #39930240
iOracleDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мой вариант, он конечно не оптимален в плане реализации, зато квадратно-гнездовой и по нему можно проверять более оптимальные варианты.
Площадка:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
public class Node {

    public final int NUMBER_OF_NEIGHBOURS;
    private int height;
    private char status;

    private Node[] neighbours;

    public Node(int height) {
        this(height, 4);
    }

    public Node(int height, int NUMBER_OF_NEIGHBOURS) {
        this.NUMBER_OF_NEIGHBOURS = NUMBER_OF_NEIGHBOURS;
        this.height = height;
        this.neighbours = new Node[this.NUMBER_OF_NEIGHBOURS];
    }

    public int getHeight() {
        return height;
    }

    public void setHeight(int height) {
        this.height = height;
    }

    public void setNeighbours(Node[] neighbours) {
        this.neighbours = neighbours;
    }

    public Node getNeighbour(int neighbour) {
        return neighbours[neighbour];
    }

    public void setNeighbour(int neighbour, Node node) {
        this.neighbours[neighbour] = node;
    }

    public char getStatus() {
        return status;
    }

    public void setStatus(char status) {
        this.status = status;
    }

    @Override
    public String toString() {
        return Integer.toString(this.height);
    }
}



Превращение картинки в массив и обратно
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
import java.awt.image.WritableRaster;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

public class GrayRgbBmpArray {

    public final int mask = 0b00000000_00000000_00000000_11111111;
    public int[][] imageInByte;
    public int[][] outputArray;
    private String fullInputFileName;
    private String fullOutputFileName;
    private BufferedImage originalImage;

    public GrayRgbBmpArray(String fullInputFileName, String fullOutputFileName) {
        this.fullInputFileName = fullInputFileName;
        this.fullOutputFileName = fullOutputFileName;
    }

    static BufferedImage deepCopy(BufferedImage bi) {
        ColorModel cm = bi.getColorModel();
        boolean isAlphaPremultiplied = cm.isAlphaPremultiplied();
        WritableRaster raster = bi.copyData(null);
        //System.out.println(cm.toString() + " " + raster.toString());
        return new BufferedImage(cm, raster, isAlphaPremultiplied, null);
    }

    public void readToArray() {
        try {
            originalImage = ImageIO.read(new File(fullInputFileName));
            imageInByte = new int[originalImage.getHeight()][originalImage.getWidth()];
            outputArray = new int[originalImage.getHeight()][originalImage.getWidth()];
            int input, blue_channel, invert;
            for (int i = 0; i< originalImage.getHeight(); i++) {
                for (int k = 0; k < originalImage.getWidth(); k++) {
                    input = originalImage.getRGB(k, i);
                    //System.out.println(Integer.toBinaryString(input));
                    blue_channel =  input & mask;
                    invert = blue_channel ^ mask;
                    //System.out.println(invert);
                    imageInByte[i][k] = invert;
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void writeToFile(int underWaterColorX, int  underWaterColorY) {
        if (outputArray == null || outputArray.length == 0 || outputArray[0].length == 0) {
            System.out.println("Нет данных для вывода в файл");
            return;
        }

        int height = outputArray.length;
        int width = outputArray[0].length;
        int blue_channel;
        // координаты пикселя исходного изображения с которого берется цвет для закраски затопленных плиток
        int underWaterColor = originalImage.getRGB(underWaterColorX, underWaterColorY);
        // результирующую картинку создаем как копию исходной
        BufferedImage image = deepCopy(originalImage);

        for (int i = 0; i < height; i++) {
            for (int k = 0; k < width; k++) {
                if (outputArray[i][k] == -1) {
                    // для затопленных плиток высота установлена в -1
                    image.setRGB(k,i, underWaterColor);
                } else {
                    blue_channel = outputArray[i][k]^mask;
                    image.setRGB(k,i, 0b11111111_00000000_00000000_00000000
                            | blue_channel << 16 | blue_channel << 8 | blue_channel);
                }
            }
        }

        try {
            ImageIO.write(image, "bmp", new FileOutputStream(fullOutputFileName));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}



Сам расчет, на входе массив, на выходе тоже массив
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
    public static int[][] Calculate(int[][] inputArray, int oceanLevel, int maxLevel) {
        // oceanLevel - уровень океана, ячейки граничащие с океаном на этом уровне сухие
        // maxLevel - максимальный уровень подъема воды
        if (inputArray == null || oceanLevel < 0 || maxLevel < oceanLevel) {
            System.out.println("Неконсистентные параметры");
            return null;
        }

        // массив четырехсвязных узлов (плиток)
        int height = inputArray.length;  // строки
        int width = inputArray[0].length; // столбцы
        Node[][] nodes = new Node[height][width];

        int underWater = oceanLevel - 1;
        int maxIslandLevel = 0;

        // заполняем массив узлами
        for (int i = 0; i < height; i++ ) {
            for (int k = 0; k < width; k++) {
                nodes[i][k] = new Node(inputArray[i][k]);
                nodes[i][k].setStatus('n');  // статус еще не определялся
                // определяем максимальную высоту (уровень) острова
                if (inputArray[i][k] > maxIslandLevel) {
                    maxIslandLevel = inputArray[i][k];
                }
            }
        }

        // если заданный уровень океана выше уровня острова, нет смысла считать пустые слои
        int startLevel;
        if (maxIslandLevel < maxLevel) {
            startLevel = maxIslandLevel;
        } else {
            startLevel = maxLevel;
        }

        // записываем связи узлов
        for (int i = 0; i < height; i++ ) {
            for (int k = 0; k < width; k++) {
                nodes[i][k].setNeighbours(new Node[] {  (k > 0) ? nodes[i][k-1] : null,
                                                        (i > 0) ? nodes[i-1][k] : null,
                                                        (k+1 < width) ? nodes[i][k+1] : null,
                                                        (i+1 < height) ? nodes[i+1][k] : null } );
            }
        }

        char st;  // переменная для кеширования статуса
        Node tmpNode; // переменная для кеширования узла
        Node nextNode; // в эту переменную сохраняем следующий узел при обходе периметра
        Node neighbourNode; // переменная для перебора соседей

        Queue<Node> queue = new LinkedList<>();
        for (int currentLevel = startLevel; currentLevel > underWater ; currentLevel--) {
            // на каждом уровне для каждой плитки ниже текущего уровня от периметра проводим поиск в ширину,
            // если она ниже текущего уровня и не имеет установленных постоянных статусов, то ставим временный
            // статус w - под водой, плитки раные текущему уровню или превышающие его не переходим
            // они являются барьером на текущем уровне
            queue.clear(); // очередь для поиска в ширину

            // обходим периметр и помещаем его в очередь на поиск в ширину
            tmpNode = nodes[0][0];
            int direction = 2; // начинаем идти вправо из нулевого узла
            while (tmpNode != null) {
                st = tmpNode.getStatus();
                if (st != 'D' && st != 'W' && tmpNode.getHeight() < currentLevel) {
                    tmpNode.setStatus('w');
                    queue.add(tmpNode);
                }

                nextNode = tmpNode.getNeighbour(direction);
                // если дошли до конца измерения, меняем направление на следующее
                if (nextNode == null) {
                    if (direction == 2) {
                        direction = 3;
                    }
                    else if (direction == 3)
                    {
                        direction = 0;
                    }
                    else if (direction == 0)
                    {
                        direction = 1;
                    } else {
                        break;
                    }
                    nextNode = tmpNode.getNeighbour(direction);
                }
                tmpNode = nextNode;
            }

            int processedNodes = queue.size();
            // выполняем для очереди поиск в ширину добавляя следующие узлы для обхода в очередь
            while (!queue.isEmpty()) {
                tmpNode = queue.poll();
                for (int j = 0; j < tmpNode.NUMBER_OF_NEIGHBOURS; j++) {
                    neighbourNode = tmpNode.getNeighbour(j);
                    if (neighbourNode == null) {
                        continue;
                    }

                    st = neighbourNode.getStatus();
                    if (st == 'w' || st == 'D' || st == 'W' || neighbourNode.getHeight() >= currentLevel) {
                        continue;
                    }
                    neighbourNode.setStatus('w');
                    queue.add(neighbourNode);
                    processedNodes++;
                }
            }

            System.out.println("Level = " + currentLevel + ",  processedNodes = " + processedNodes);

            // все плитки не имеющие постоянного статуса D (dry) или W (wet) и не имеющие временного
            // статуса w получают постоянный статус, статус w сбрасывается в u - unknown
            for (int i = 0; i < height; i++ ) {
                for (int k = 0; k < width; k++) {
                    tmpNode = nodes[i][k];
                    st = tmpNode.getStatus();
                    if (st == 'D' || st == 'W') {
                        continue;
                    }

                    if (tmpNode.getHeight() == currentLevel) {
                        tmpNode.setStatus('D');
                    } else if (st == 'w') {
                        tmpNode.setStatus('u');
                    } else if (currentLevel == maxLevel) {
                        tmpNode.setStatus('D');
                    } else {
                        tmpNode.setStatus('W');
                    }
                }
            }
        }

        for (int i = 0; i < height; i++ ) {
            for (int k = 0; k < width; k++) {
                // плитки не получившие постоянный статус и находящиеся ниже уровня океана
                tmpNode = nodes[i][k];
                st = tmpNode.getStatus();
                if (st != 'D' && st != 'W') {
                    tmpNode.setStatus('W');
                }
            }
        }

        // формируем результирующий массив
        int[][] outputArray = new int[height][width];
        for (int i = 0; i < height; i++ ) {
            for (int k = 0; k < width; k++) {
                tmpNode = nodes[i][k];
                if (tmpNode.getStatus() == 'W') {
                    outputArray[i][k] = -1;
                } else {
                    outputArray[i][k] = tmpNode.getHeight();
                }
            }
        }

        return outputArray;
    }
}



Использование:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
        // на входе нужен файл с 8-битной глубиной цвета и использованием 256 градаций серого, если хочется чтобы 
        // затопленные плитки имели цвет отличный от градаций серого, можно добавить цветной пиксель
        GrayRgbBmpArray grba = new GrayRgbBmpArray("C:\\temp\\test.bmp", "C:\\temp\\output.bmp");
        // считываем исходную картинку в массив
        grba.readToArray();
        // расчет, остаточный уровень океана может быть от 0 до 255, максимальный уровень подъема при наводнении от 0 до инта
        // если нужно затопить весь отсров уровень должен быть больше 255
        // можно устанавливать равные, тогда получим вид острова затопленного до определенной высоты
        // если собрать последовательно сверху такие срезы, то можно сделать гифку отлива))
        grba.outputArray = Island.Calculate(grba.imageInByte, 1, 260);
        // выводим результат в файл, цвет для затопленных плиток берется от пикселя исходной картинки с координатами (0,0)
        // можно указать любую другую координату для цветного пикселя в исходном файле
        grba.writeToFile(0, 0);


...
Рейтинг: 0 / 0
Задачка про остров
    #39930246
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приаттачь картинки. До потопа. И после.
...
Рейтинг: 0 / 0
Задачка про остров
    #39930255
iOracleDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Сам можешь поиграться, ты же жавист, или давай картинку и параметры - уровень океана после отлива и уровень наводнения.
...
Рейтинг: 0 / 0
Задачка про остров
    #39930260
iOracleDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
...
Рейтинг: 0 / 0
Задачка про остров
    #39930275
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шикарно. А время мерял? Учитывая что java имеет фазу прогрева методов надо сделать штук 20 вызовов
при поднятом приложении чтоб гарантировать что JIT поднялся и собрал методы в нативный код.
...
Рейтинг: 0 / 0
Задачка про остров
    #39930280
iOracleDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Java и скорость инженерных расчетов несовместимые вещи, ели нужна скорость, нужно убирать ноды, убирать очередь и делать ее самописную на обычном одномерном массиве, в общем делать монолит без дерганья объектов и функций, тогда можно говорить о скорости.
...
Рейтинг: 0 / 0
Задачка про остров
    #39930283
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Асимптоматику я могу глазами увидеть и в VisualBasic и в Assembler.
Мне только нужно 3-4 точки измерений алгоритма с разным объемом N и отклики по времени.
Тоесть наличие или отсуствие в стеке Java никак не влияет на форму этого графика.

Здесь конечно Шарахову удобнее. У него - статически компилируемый язык.
Но топик ведь посвящен алгоритмизации. Поэтому хороший алгоритм на Java
может быть быстрее чем плохой на Delphi.
...
Рейтинг: 0 / 0
Задачка про остров
    #39930287
iOracleDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

O(K*N), один срез считается за O(N), недостаток - зависимость от количества уровней, хотя благодаря этому недостатку его можно распараллелить, можно посчитать срезы, а потом просто последовательно наложить один на другой начиная сверху. Можно пройтись срезами снизу вверх складывая каждый срез в файл, потом сверху вниз, сделать из этого гифку, получится анимированный прилив и отлив))
...
Рейтинг: 0 / 0
Задачка про остров
    #39930288
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй сделать просто последовательность *png файлов. А дальше можно из нее сделать анимацию.
У меня где-то был скриптик с ffmpeg для этого.
...
Рейтинг: 0 / 0
Задачка про остров
    #39930322
iOracleDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gif

максимальный уровень воды 13, остаточный 0.
...
Рейтинг: 0 / 0
Задачка про остров
    #39930325
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Асимптоматику я могу глазами увидеть и в VisualBasic и в Assembler.
Мне только нужно 3-4 точки измерений алгоритма с разным объемом N и отклики по времени.
Тоесть наличие или отсуствие в стеке Java никак не влияет на форму этого графика.

Здесь конечно Шарахову удобнее. У него - статически компилируемый язык.
Но топик ведь посвящен алгоритмизации. Поэтому хороший алгоритм на Java
может быть быстрее чем плохой на Delphi.


Это вряд ли.
Плохой алгоритм на Delphi завсегда быстрее ))
...
Рейтинг: 0 / 0
Задачка про остров
    #39930330
iOracleDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Моя картинка
mypict
...
Рейтинг: 0 / 0
Задачка про остров
    #39930334
iOracleDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересный вариант для проверок может из этой картинки получиться
...
Рейтинг: 0 / 0
Задачка про остров
    #39930348
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr Sharahov
mayton
Асимптоматику я могу глазами увидеть и в VisualBasic и в Assembler.
Мне только нужно 3-4 точки измерений алгоритма с разным объемом N и отклики по времени.
Тоесть наличие или отсуствие в стеке Java никак не влияет на форму этого графика.

Здесь конечно Шарахову удобнее. У него - статически компилируемый язык.
Но топик ведь посвящен алгоритмизации. Поэтому хороший алгоритм на Java
может быть быстрее чем плохой на Delphi.


Это вряд ли.
Плохой алгоритм на Delphi завсегда быстрее ))

Хвастун.
...
Рейтинг: 0 / 0
Задачка про остров
    #39930413
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Aleksandr Sharahov
пропущено...

Это вряд ли.
Плохой алгоритм на Delphi завсегда быстрее ))

Хвастун.


Да не, ты опять не въехал: это я так твою активность стимулирую ))
...
Рейтинг: 0 / 0
Задачка про остров
    #39930438
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr Sharahov
mayton
пропущено...

Хвастун.


Да не, ты опять не въехал: это я так твою активность стимулирую ))

Уж спасибо. Я как нибудь сам себя простимулирую. Пока я погряз
в изучение Rust - предлагаю развивать идею параллелизма.
...
Рейтинг: 0 / 0
Задачка про остров
    #39931246
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iOracleDev
Моя картинка ... mypict
Забавно, ужели вот так диффузно вода порсачивается сквозь точечное облако?

Как понимаю вы все у финиша. Вопрос у меня теперь. Я слышал, выговорили про срезы. Основа алгоритма какая? Делать попикселные срезы, в каждом искать замкнутые контуры, затем просуммировать внутренности контуров, границы не считать, так?
Без никаких деревьев или графов, да?
...
Рейтинг: 0 / 0
Задачка про остров
    #39931251
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пока я погряз в изучение Rust - предлагаю развивать идею параллелизма планеризма....то не Чкалов,
это - Руст(цэ)
...
Рейтинг: 0 / 0
Задачка про остров
    #39931274
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Увы мне увы. Хотел успеть везде.

Из хороших новостей. Тестовый сет я полностью подготовил. Куда его запаблишить? Github? Amazon?
...
Рейтинг: 0 / 0
25 сообщений из 421, страница 11 из 17
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Задачка про остров
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]