powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Работа с матрицей
25 сообщений из 169, страница 2 из 7
Работа с матрицей
    #39961717
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно написать свой собственный итератор, который позволил бы сортировать элементы матрицы прямо на месте, т.е. прямо в матрице. И находить сумму. Но я боюсь, что такой код не поняли бы ни автор топика, ни её преподаватель.
...
Рейтинг: 0 / 0
Работа с матрицей
    #39961718
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
...

Ты читал Степанова (он по STL книжки писал) ?


он в 1995 году книжку по stl выпустил, единственную...
у него есть других полезных книжек почитать.

2petrav
а где pop_back?
значения отсортированные в ромб Степанов возвращать будет?

Ты вообще почему такой малограмотный?
складывать и сортировать можно за один проход.
Это называется сортировка подсчётом.
Потом раскладываешь назад сортированно-подсчитанное.
Тут программа на две строки, а не на три.
...
Рейтинг: 0 / 0
Работа с матрицей
    #39961721
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby

складывать и сортировать можно за один проход.
Это называется сортировка подсчётом.
Потом раскладываешь назад сортированно-подсчитанное.
Тут программа на две строки, а не на три.

Стоп-стоп. При чем здесь это?

Сортировка подсчетом - это эффектвная темя для низко-кардинальных данных.

Кроме того сортировка в этом топике это вообще - minor. И никому особо не интересна.
...
Рейтинг: 0 / 0
Работа с матрицей
    #39961727
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby

Ты вообще почему такой малограмотный?

Не знаю. А не знаю, видимо, потому что малограмотный.

booby
складывать и сортировать можно за один проход.
Это называется сортировка подсчётом.
Потом раскладываешь назад сортированно-подсчитанное.
Тут программа на две строки, а не на три.

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

он в 1995 году книжку по stl выпустил, единственную...

Обобщенное программирование - это вобщем - тоже про STL.
...
Рейтинг: 0 / 0
Работа с матрицей
    #39961737
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton

Стоп-стоп. При чем здесь это?
...

задание целиком описано в первом посте.

авторОбобщенное программирование - это вобщем - тоже про STL
с точно таким названием у него книжки нет, а то, что ты подразумеваешь, является,
в некотором смысле, глобусом, по отношению к сове stl.


2petrav
здесь ты программист на c/c++, а не я.
хочешь кода на vba или pl/sql?
хотя требовать кода вообще для такой задачи - убожество.
...
Рейтинг: 0 / 0
Работа с матрицей
    #39961738
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
booby

складывать и сортировать можно за один проход.
Это называется сортировка подсчётом.
Потом раскладываешь назад сортированно-подсчитанное.
Тут программа на две строки, а не на три.

Стоп-стоп. При чем здесь это?

Сортировка подсчетом - это эффектвная темя для низко-кардинальных данных.

Кроме того сортировка в этом топике это вообще - minor. И никому особо не интересна.

Может быть booby просто сумасшедший?
...
Рейтинг: 0 / 0
Работа с матрицей
    #39961743
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
mayton
пропущено...

Стоп-стоп. При чем здесь это?

Сортировка подсчетом - это эффектвная темя для низко-кардинальных данных.

Кроме того сортировка в этом топике это вообще - minor. И никому особо не интересна.

Может быть booby просто сумасшедший?

Он - истинный мастер кун-фу. Но его стиль искусств для тебя будет слишком странным!
Слишком!
...
Рейтинг: 0 / 0
Работа с матрицей
    #39961753
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
mayton
пропущено...
Стоп-стоп. При чем здесь это?
Сортировка подсчетом - это эффектвная темя для низко-кардинальных данных.
Кроме того сортировка в этом топике это вообще - minor. И никому особо не интересна.

Может быть booby просто сумасшедший?
Ну почему же он сумасшедший? Можно и в один проход, и без сортировки, и промежуточных результатов, и без STL...
Код: plaintext
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.
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char** argv)
{
  constexpr size_t dim = 5;
  constexpr size_t m = dim / 2;
  
  int arr[dim][dim] =
  {
       1,  2,  3,  4,  5,
       6,  7,  8,  9, 11,
      12, 14, 15, 16, 17,
      18, 19, 20, 21, 22,
      23, 24, 25, 26, 27
  };

  long long int sum = 0;
  int
      *head = ((int*)arr) + m,
      *tail = ((int*)arr) + dim*dim - m - 1;
  size_t
      n = 1,
      c = n,
      d;

  while (head != tail)
  {
    if (c--)
    {
      sum += *head++;
      sum += *tail--;
    }
    else
    {
      d = dim - 1 - n;
      head += d;
      tail -= d;
      n += 2;
      c = n;
    }
  }
  sum += *head;
  printf("SUM: %lli", sum);

  return (EXIT_SUCCESS);
}
...
Рейтинг: 0 / 0
Работа с матрицей
    #39961757
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,

давайте из этого сделаем pure-function. Чтоб точкой входа у нас был не какой-то уродский main.
А чтоб была видимость какого-то красивого входа наподобие.

Код: plaintext
1.
int summ_diamond(arr *matrix, int size);
...
Рейтинг: 0 / 0
Работа с матрицей
    #39961760
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton, а смысл?
...
Рейтинг: 0 / 0
Работа с матрицей
    #39961761
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я продолжаю форк своей темы. Хвостовой рекурсии.

Автор я думаю уже получил своё и пошел курить.
...
Рейтинг: 0 / 0
Работа с матрицей
    #39961765
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton, мне лень вкрячивать проверку на нечётность (!(dim && 1)) и выброс исключения
...
Рейтинг: 0 / 0
Работа с матрицей
    #39961767
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пускай нечетность будет по заданию всегда. Не будем обращать внимания.
...
Рейтинг: 0 / 0
Работа с матрицей
    #39961771
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev
petrav
пропущено...

Может быть booby просто сумасшедший?
Ну почему же он сумасшедший? Можно и в один проход, и без сортировки, и промежуточных результатов, и без STL...

Можно и без сортировки, но в ТЗ написано отсортировать. Что по поводу кода, то, имхо, ваш вариант крайне плохо-читабельный. Я очень не люблю такие вот варианты: *ptr++. Мой же код (первый) отображает логику происходящего и тоже в один проход, и тоже без промежуточных результатов.

Но интересно было бы увидеть бенчмарки всех трёх вариантов.
...
Рейтинг: 0 / 0
Работа с матрицей
    #39961776
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
rdb_dev
пропущено...
Ну почему же он сумасшедший? Можно и в один проход, и без сортировки, и промежуточных результатов, и без STL...

Можно и без сортировки, но в ТЗ написано отсортировать. Что по поводу кода, то, имхо, ваш вариант крайне плохо-читабельный. Я очень не люблю такие вот варианты: *ptr++. Мой же код (первый) отображает логику происходящего и тоже в один проход, и тоже без промежуточных результатов.

Но интересно было бы увидеть бенчмарки всех трёх вариантов.

Сортировки - это очень злая тема. И она изъезжена вдоль и поперек и самые лучшие алгоритмы
хороши только в некоторых узких случаях. Чаще всего мы должны обладать априорной информацией
о том что сортируем и какого оно объема чтобы выбрать подходящую стратегию.

Поэтому давайте отложим сортировки тем более что они - коробочные в STL и ничего новаторского мы тут не
превнесем.

По поводу реализации rdb_dev - она - хорошая. Мне нравится, но для трансформаци по Степанову - не подходит.
Поэтому я возьму некий более краткий вариант. Без конечного автомата с состояниями внутри. Грубо говоря
мне нужна функция без состояний.
...
Рейтинг: 0 / 0
Работа с матрицей
    #39961779
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton

По поводу реализации rdb_dev - она - хорошая. Мне нравится...

Вы давеча резко критиковали код в стиле *++ptr. И учили новичков так не делать. Вариант rdb_dev интересен, но, имхо, он квинтэссенция запутанности кода, когда с первого взгляда совершенно не очевидно, что этот код делает. Мне думается мой код проще и максимально "математичен".
...
Рейтинг: 0 / 0
Работа с матрицей
    #39961786
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да я и щас критикую все эти инкременты внутри операций. Но его код напоминает
мне мой, 20 летней давности. Когда я в SVGA режиме рисовал цветные полигоны. Там тоже была идея
таким вот скользящим указателем заполнить все что нужно. Я брал сложный
полигон. Даже вогнутый Резал его на трапеции и дальше - дело техники. Основной критерий - скорость
и он достигался.
...
Рейтинг: 0 / 0
Работа с матрицей
    #39961789
JustSomething
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton

Автор я думаю уже получил своё и пошел курить.


Только недавно заметила что получила ответ на свой вопрос. Восхищаюсь всеми вами, насколько для вас это уже все просто. Мне же к этому ещё шагать и шагать. Но это такое дело, прорвемся. Бесконечно благодарна всем вам, при этом не только за полностью решенную задачу, но и за понимание, к какому уровню стремиться!
Вся моя благодарность - вам!
...
Рейтинг: 0 / 0
Работа с матрицей
    #39961792
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JustSomething
mayton

Автор я думаю уже получил своё и пошел курить.


Только недавно заметила что получила ответ на свой вопрос. Восхищаюсь всеми вами, насколько для вас это уже все просто. Мне же к этому ещё шагать и шагать. Но это такое дело, прорвемся. Бесконечно благодарна всем вам, при этом не только за полностью решенную задачу, но и за понимание, к какому уровню стремиться!
Вся моя благодарность - вам!

Заметили? Задачу решил я, а благодарность всем. Вот и помогай людям после такого.
...
Рейтинг: 0 / 0
Работа с матрицей
    #39961796
JustSomething
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
petrav

Заметили? Задачу решил я, а благодарность всем. Вот и помогай людям после такого.


Вам выражаю особую благодарность)

(не могла же я обойти людей, которые пытались поставить меня на правильный путь в решении задачи, потратив на это такой дорогой ресурс как время. Жаль только мой мозг решил выйти погулять, либо же я пытаюсь найти себе оправдание того, что моих знаний и навыков не хватило для решения такого задания)
...
Рейтинг: 0 / 0
Работа с матрицей
    #39961800
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
По поводу реализации rdb_dev - она - хорошая. Мне нравится, но для трансформаци по Степанову - не подходит.
Она хорошая только в условиях однопоточности. Если же применять OpenMP в расчёте на большие массивы, то лучше решать в лоб на двух вручную распараллеленных for - отдельно на подсчёты сверху и снизу с последующей синхронизацией по результату, так чтобы OpenMP мог ещё и эти два цикла распараллелить по разным отрезкам индекса.
...
Рейтинг: 0 / 0
Работа с матрицей
    #39961802
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
Заметили? Задачу решил я, а благодарность всем. Вот и помогай людям после такого.
Не жмись! Поделись славой!!!
...
Рейтинг: 0 / 0
Работа с матрицей
    #39961806
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Да я и щас критикую все эти инкременты внутри операций. Но его код напоминает
мне мой, 20 летней давности. Когда я в SVGA режиме рисовал цветные полигоны. Там тоже была идея
таким вот скользящим указателем заполнить все что нужно. Я брал сложный
полигон. Даже вогнутый Резал его на трапеции и дальше - дело техники. Основной критерий - скорость
и он достигался.

Я не вижу, что бы тут у rdb_dev достигалась скорость. Я написал бенчмарк. В Релизе мой код быстрее в 1.3 раза. ИМХО, мой код проще и для человека, и для компилятора. Последнему проще оптимизировать мой код. Вы можете попробовать мой бенчмарк. И сообщить результаты.

Код: plaintext
1.
2.
3.
Elapsed time: 0.985154s
Elapsed time: 1.30105s
Relation: 1.32066


Код: plaintext
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.
#include <chrono>

int const Size = 5;
int const Half = Size / 2;

int const arr[Size][Size] =
{
     1,  2,  3,  4,  5,
     6,  7,  8,  9, 11,
    12, 14, 15, 16, 17,
    18, 19, 20, 21, 22,
    23, 24, 25, 26, 27
};

int summ_diamond_1()
{
    int res = 0;

    for (int i=0; i<Half; ++i)
    {
        for (int j=Half-i; j<=Half+i; ++j)
        {
            res += arr[i][j];
            res += arr[Size-i-1][j];
        }
    }

    for (int i=0; i<Size; ++i)
    {
        res += arr[Half][i];
    }

    return res;
}

int summ_diamond_2()
{
  constexpr size_t dim = Size;
  constexpr size_t m = dim / 2;

  int sum = 0;
  int
      *head = ((int*)arr) + m,
      *tail = ((int*)arr) + dim*dim - m - 1;
  size_t
      n = 1,
      c = n,
      d;

  while (head != tail)
  {
    if (c--)
    {
      sum += *head++;
      sum += *tail--;
    }
    else
    {
      d = dim - 1 - n;
      head += d;
      tail -= d;
      n += 2;
      c = n;
    }
  }
  sum += *head;

  return sum;
}

double test(int (&summ_func)())
{
    auto start = std::chrono::high_resolution_clock::now();
    for (size_t i=0; i<100000000; ++i)
    {
        summ_func();
    }
    auto end = std::chrono::high_resolution_clock::now();
    std::chrono::duration<double> elapsed_seconds = end - start;
    double const res = elapsed_seconds.count();
    std::cout << "Elapsed time: " << res << "s\n";
    return res;
}

void calc_times()
{
    double const d1 = test(summ_diamond_1);
    double const d2 = test(summ_diamond_2);
    std::cout << "Relation: " << (d2 / d1) << "\n";
}


...
Рейтинг: 0 / 0
Работа с матрицей
    #39961809
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты серьезно?

Кто же тестит на такой мелкой матрице.
...
Рейтинг: 0 / 0
25 сообщений из 169, страница 2 из 7
Форумы / C++ [игнор отключен] [закрыт для гостей] / Работа с матрицей
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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