Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
467 / 344 / 19
Регистрация: 26.05.2009
Сообщений: 2,696
1

Как лучше всего хранить двумерный массив переменного размера

05.05.2012, 02:50. Показов 2318. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! Мне нужно хранить квадратный массив, размер которого может увеличиваться, но он всегда остается квадратным (храню матрицу смежности и при добавлении новой вершины в граф нужно добавить по одному столбец и строку). Думал сделать так:
C#
1
List<List<Edge>>
Но тогда будет совсем неудобно делать добавление. Кто что посоветует?
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.05.2012, 02:50
Ответы с готовыми решениями:

Как лучше всего хранить коэффициенты?
Мне нужно работать с матрицей порядка 100 000. Она сильно разреженная, по этому хранить все...

Что лучше всего читать/смотреть где лучше всего практиковаться и как в принципе лучше всего учиться программированию
Здравствуйте,извините за вопрос не по теме но: уже около пол года изучаю С языки и начал понимать...

Как лучше всего хранить контент сайта?
Привет всем. Недавно стал вопрос, как правильно хранить контент с тегами в бд. Допустим у меня есть...

Где и как лучше всего хранить структурированную информацию
У меня строковые данные вида: департамент строительства приказ N 21 письмо 12 письмо о...

6
Українець
424 / 318 / 16
Регистрация: 26.09.2009
Сообщений: 844
05.05.2012, 05:52 2
Мне кажется, что это не плохой вариант.
C#
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
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
 
namespace TestMatrix
{
    class Program
    {
        class Graph
        {
            private const NOEDGE=0;
            private Hashtable _matrix;
 
            private Hashtable Matrix
            {
                get { return _matrix ?? (_matrix = new Hashtable()); }
            }
 
            public int this[int i, int j]
            {
                get
                {
                    var key = HashFunc(i, j);
                    return Matrix.ContainsKey(key)?(int)Matrix[key]:NOEDGE;
                }
                set
                {
                    var key = HashFunc(i, j);
                    if (Matrix.ContainsKey(key)) Matrix[key] = value;
                    else Matrix.Add(key, value);
                }
            }
            private static long HashFunc(int i,int j)
            {
                return Math.BigMul(i, int.MaxValue) + j;
            }
        }
        static void Main(string[] args)
        {
            var gr=new Graph();
            Console.WriteLine(gr[0,0]);
            gr[1, 1] = 20;
            Console.WriteLine(gr[1,1]);
            Console.ReadKey();
        }
    }
}
если граф неориентированный, то можно сделать даже так
C#
1
i<j?HashFunc(i,j):HashFunc(j,i);
1
║XLR8║
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,361
Записей в блоге: 5
05.05.2012, 13:39 3
Цитата Сообщение от body90 Посмотреть сообщение
Мне нужно хранить квадратный массив, размер которого может увеличиваться
Тебе навести пару-тройку мест использования в каждом из которых надо будет юзать совсем другой подход? Зачем тебе такая структура данных?
1
467 / 344 / 19
Регистрация: 26.05.2009
Сообщений: 2,696
05.05.2012, 13:43  [ТС] 4
freest, хорошая идея! Спасибо!
Хэш-функцию я бы сделал немного проще:
C#
1
2
3
4
            private static string HashFunc(int i,int j)
            {
                return "" + i + j;
            }
Это мне надо будет инициализировать сразу всё "поле" матрицы, иначе там не будет ничего. Я правильно понимаю?

Добавлено через 3 минуты
Цитата Сообщение от outoftime Посмотреть сообщение
Зачем тебе такая структура данных?
Я же говорил, для хранения матрицы смежности, т.к. вершины добавляются динамически.
1
Українець
424 / 318 / 16
Регистрация: 26.09.2009
Сообщений: 844
05.05.2012, 14:33 5
Да, у Вас все поле пустое изначально, то есть Вам нужно заполнять таблицу только существующими ребрами.
1
467 / 344 / 19
Регистрация: 26.05.2009
Сообщений: 2,696
05.05.2012, 15:06  [ТС] 6
А если у меня есть вершина и мне нужно узнать в какие вершины из нее есть дуги (граф напревленный)? Что делать?
0
Українець
424 / 318 / 16
Регистрация: 26.09.2009
Сообщений: 844
05.05.2012, 18:22 7
надо пройтись по всем вершинам
C#
1
2
3
for(int i=0;i<Vcount;i++)
     if(graph[node,i]!=0) 
          Console.Writeline(String.Format("{0}-{1}:{3}",node,i,graph[node,i]);
Добавлено через 12 минут
а вообще лучше использовать списки смежности
1
05.05.2012, 18:22
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.05.2012, 18:22
Помогаю со студенческими работами здесь

Как лучше всего хранить данные для приложения?
Допустим есть статический массив интов,или булов.Как его сохранять(onDestroy()) и...

Как лучше всего хранить текстовые данные (более 1000 слов)
В чём суть вопроса: начинаю делать игру для android, думаю над лучшим решением для хранения словаря...

Где и как лучше всего хранить строку, которая будет подвергаться значительным изменениям
Добрый вечер. Пишу программу, которая использует строку и предполагает большое кол-во внесенных и...

В чем лучше всего хранить команды?
Здравствуйте, Где лучше всего хранить слова-команды? Есть огромный массив слов, хранить в...

Где хранить файлы(изображения) лучше всего?
Всем доброго времени суток. Сразу скажу загруженные картинки обрабатываются один раз, а потом...

Где лучше всего хранить настройки приложения
Доброго времени суток. Пишу программу на Windows Forms. Нужно сохранять некие настройки программы....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru