LINUX.ORG.RU

Задачка с массивами.


0

1

Сегодня вдруг понадобилось отсортировать массив данных таким образом:

1 2 3 4       1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6
5 6 7 8       7 8 9 0 n n n n n n n n n n n n 
9 0 1 2       . . . . . . . . . . . . . . . .
3 4 5 6   ==> n n n n n n n n n n n n n n n n 
7 8 9 0       
. . . .       
n n n n       

То есть превратить таблицу с четыремя столбцами в таблицу с 16-ю столбцами, заполняя новые столбцы строками старой таблицы.

Или аналогично, но в таком порядке:

1 2 3 4       1 5 9 3 2 6 0 4 3 7 1 5 4 8 2 6
5 6 7 8       7 . . . 8 . . . 9 . . . 0 . . . 
9 0 1 2       . . . . . . . . . . . . . . . .
3 4 5 6   ==> n n n n n n n n n n n n n n n n 
7 8 9 0       
. . . .       
n n n n       

Вроде все просто, но попарился над этой задачей основательно, алгоритм решения нашел. Вот что значит давно не кодил )

★★★★★

>Сегодня вдруг понадобилось отсортировать массив данных таким образом:

То есть превратить таблицу с четыремя столбцами в таблицу с 16-ю столбцами, заполняя новые столбцы строками старой таблицы.

Какой такой массив?

anonymous
()
Ответ на: комментарий от anonymous

кстати да, присоединяюсь к вопросу: а сортировка то где? о_О

arsi ★★★★★
()
Ответ на: комментарий от anonymous

А что таблица это не массив?

Siado ★★★★★
() автор топика
Ответ на: комментарий от arsi

Мнде. я построил такую беду:

// m1 - 4 столбца, 500 строк
// m2 - 16 столбцов, n строк

int t1 = 1;
int t2 = 0;

for (int i=1; i<=500; i++)
{
    for (int j=1; i<=4; j++){
        t2+=1;
        m2[t1][t2]=m1[i][j]
        };
    if(t2 == 16) 
    {
        t1+=1;
        t2=0;
    }
}
Siado ★★★★★
() автор топика
Ответ на: комментарий от Siado

ой, опечатался, там во втором цыкле вместо i надо j

Siado ★★★★★
() автор топика
Ответ на: комментарий от Siado

Во-первых тогда в квадратные скобки надо писать [i-1]

Во-вторых надо делать в одном цикле и желательно через offset

Zodd ★★★★★
()
Ответ на: комментарий от Zodd

Да и в-третьих надо через memcpy, а не через циклы

Zodd ★★★★★
()
Ответ на: комментарий от Zodd

Ну вообще я это делал не на С++, а на матлабе, там со всем, связанным с указателями беда. А здесь написал на С++ по старой памяти, не копипастил )

Siado ★★★★★
() автор топика

нормальные языки (APL, J, R) напрямую оперируют размерностью


> x<-rep(c(1:9,0),8)
> dim(x)<-c(4,20)
> t(x)
      [,1] [,2] [,3] [,4]
 [1,]    1    2    3    4
 [2,]    5    6    7    8
 [3,]    9    0    1    2
 [4,]    3    4    5    6
 [5,]    7    8    9    0
 [6,]    1    2    3    4
 [7,]    5    6    7    8
 [8,]    9    0    1    2
 [9,]    3    4    5    6
[10,]    7    8    9    0
[11,]    1    2    3    4
[12,]    5    6    7    8
[13,]    9    0    1    2
[14,]    3    4    5    6
[15,]    7    8    9    0
[16,]    1    2    3    4
[17,]    5    6    7    8
[18,]    9    0    1    2
[19,]    3    4    5    6
[20,]    7    8    9    0

> dim(x)<-c(8,10)
> t(x)
      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
 [1,]    1    2    3    4    5    6    7    8
 [2,]    9    0    1    2    3    4    5    6
 [3,]    7    8    9    0    1    2    3    4
 [4,]    5    6    7    8    9    0    1    2
 [5,]    3    4    5    6    7    8    9    0
 [6,]    1    2    3    4    5    6    7    8
 [7,]    9    0    1    2    3    4    5    6
 [8,]    7    8    9    0    1    2    3    4
 [9,]    5    6    7    8    9    0    1    2
[10,]    3    4    5    6    7    8    9    0


psv1967 ★★★★★
()
Ответ на: комментарий от psv1967

Нормальные языки для решения задач используют библиотеки. А не встроенные операторы с принципом «жри что дают».

anonymous
()
Ответ на: комментарий от psv1967

О! Спасибо! Как раз хотел узнать, может чего в R на эту тему есть хорошего ))

Siado ★★★★★
() автор топика
Ответ на: комментарий от anonymous

ага, пробегала тут новость про операции над матрицами в перл :) нафиг, нафиг...

psv1967 ★★★★★
()
Ответ на: комментарий от Siado

>на матлабе,

К стати, справедливости ради отмечу, что этот ваш матлаб - это жуткое тормозное глюкалово, оно мне сортировало массив с 450 строками секунд 30.

Siado ★★★★★
() автор топика
Ответ на: комментарий от ugoday

Мне встать когда буду перчислять?

...там были букофки, так я вам скажу что они, таки да, языки.

psv1967 ★★★★★
()
Ответ на: комментарий от Siado

Я описал тебе то же самое, только в 2 раза короче. Просто для простоты в роли исходного масива выступал одномерный масив :)
По сути любой 2-ух мерный масив легко приводится к одномерному :)

Jetty ★★★★★
()
Ответ на: комментарий от Jetty

>По сути любой 2-ух мерный масив легко приводится к одномерному :)

Ну да, двойным циклом )

Siado ★★★★★
() автор топика

> Вроде все просто, но попарился над этой задачей основательно, алгоритм решения нашел.

Морфизм, значит, есть?

ovk48 ★★★
()
Ответ на: комментарий от psv1967

А как в R сделать такого же типа сортировку, но таким макаром:

[code]
1 1 1 1 2 2
2 2 2 2 3 3
3 3 ==> 3 3 4 4
4 4 4 4 5 5
5 5 5 5
[/code]

Siado ★★★★★
() автор топика
Ответ на: комментарий от psv1967

А как в R сделать такого же типа сортировку, но таким макаром:

1 1      1 1 2 2
2 2      2 2 3 3
3 3  ==> 3 3 4 4
4 4      4 4 5 5
5 5      5 5
Siado ★★★★★
() автор топика
Ответ на: комментарий от psv1967

Эх блин, тыкал тыкал так и не врубился, жаль к R нет толковой документации на русском.

Siado ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.