Разреженные матрицы |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Разреженные матрицы |
Camel_Toe |
Сообщение
#1
|
Новичок Группа: Пользователи Сообщений: 26 Репутация: 0 |
Поможите кто может !!!! Препод задал такую задачу: разместить разреженную матрицу в динамической памяти с помощью линейных списков. Не могли бы вы мне сказать, что такое разреженная матрица и как ее разместить в динамической памяти. Если можно, то сразу на паскале . БУду очень признателен за любую помощь, так как сам я это сделать увы не смогу.
|
GLuk |
Сообщение
#2
|
Профи Группа: Пользователи Сообщений: 775 Пол: Мужской Репутация: 0 |
Что такое динамическая память я ишшо может и знаю, а вот разреженная матрица... (есть лишь преположение, что это матрица которую разрядили ;))??
|
zx1024 |
Сообщение
#3
|
Пионер Группа: Пользователи Сообщений: 119 Пол: Мужской Репутация: 0 |
Версия:
Список из координат элемента матрицы и его значения. Т.е. (x, y, info). Т.к. матрица разреженная, не должно занимать много места. |
GLuk |
Сообщение
#4
|
Профи Группа: Пользователи Сообщений: 775 Пол: Мужской Репутация: 0 |
2zx1024 Может быть, но тогда получается, что понятие линейный список уже имеет место быть... а может это и нелинейный список.
А линейный список тогда получается что-то по типу: A[1,1..X] - первый линейный список. A[2,1..D] - второй линейный список. A[3,1..F] - третий линейный список. .................................................................. |
Camel_Toe |
Сообщение
#5
|
Новичок Группа: Пользователи Сообщений: 26 Репутация: 0 |
А как ее разместить в динамической памяти ??? Ну считал я с файла какието значения, а как их в динамическую память разместить???
|
GLuk |
Сообщение
#6
|
Профи Группа: Пользователи Сообщений: 775 Пол: Мужской Репутация: 0 |
Попробуй что-то типа GetMem or New... до 64Кб в режиме 8086 проца
|
Camel_Toe |
Сообщение
#7
|
Новичок Группа: Пользователи Сообщений: 26 Репутация: 0 |
В продолжении темы. Препод задал такую задачу: найти след разреженной матрицы. След-сумма собственных чисел. Матрицу надо сделать насколько я понял, с использованием линейного списка, с размещением ее в динамической памяти. А как это сделать?? никто бы не мог привести код программы. Люди, помогите!!!!! Я проболел весь сентябрь, лекций нет, друзья помочь не могут(у них свои задачи). Я не поверю, что на сайте посвященном паскалю, не найдется ни одного хорошего(и очень доброго, понимающего) программиста, который не мог бы сделать эту задачу. Я буду очень благодарен.
ЗЫ: кстати этот сайт мне посоветовал мой друг, однажды кто то из форума ему очень помог, и он сдал паскаль на 5. Надеюсь, что этот ктото поможет и мне. |
Fire_Rage |
Сообщение
#8
|
Новичок Группа: Пользователи Сообщений: 26 Репутация: 0 |
Если вы мне объясните, что такое разреженая матрица, то я смогу помочь.
Знаю, что такое динамичнская память. -------------------- QUI NON PROFICIT, DEFICIT(Кто не идёт вперёд, идёт назад)
|
GLuk |
Сообщение
#9
|
Профи Группа: Пользователи Сообщений: 775 Пол: Мужской Репутация: 0 |
См. 3-4 пост сверху, больше вариантов на данный момент нет, во всяком случае у меня.
И, кстати, у препода нельзя спросить, что такое разреженные матрицы?? |
Camel_Toe |
Сообщение
#10
|
Новичок Группа: Пользователи Сообщений: 26 Репутация: 0 |
разреженная матрица - это матрица очень большого размера, ну скажем 1000 на1000, у которой большинство элементов равны нулю. Поэтому в дин. память надо разместить все ненулевые элементы, а элементы равные нулю-вообще не учитывать. Кстати, я там сверху немного ошибся - надо найти не собств.числа, а сумму диагональных элементов.
|
Fire_Rage |
Сообщение
#11
|
Новичок Группа: Пользователи Сообщений: 26 Репутация: 0 |
Ну тогда первая задача лёгкая.
Код const n=1000; type mass:[1..n,1..n]of integer; list:^node node:record k:integer; next:list; end; var mas:mass; head:list; i,g:integer; begin new(head); head^.next:=nil; for i:=1 to n do for g:=1 to n do if mas[i,g]<>0 then begin new(head^.next); head:=head^.next; head^.k:=mas[i,g]; head^.next:=nil; end; end. Сообщение отредактировано: volvo - -------------------- QUI NON PROFICIT, DEFICIT(Кто не идёт вперёд, идёт назад)
|
Fire_Rage |
Сообщение
#12
|
Новичок Группа: Пользователи Сообщений: 26 Репутация: 0 |
А след матрицы я думаю ты сам найдёш.(Я так и не понял- искать по списку или по матрице?)
-------------------- QUI NON PROFICIT, DEFICIT(Кто не идёт вперёд, идёт назад)
|
Nightmare |
Сообщение
#13
|
Новичок Группа: Пользователи Сообщений: 48 Пол: Мужской Репутация: 1 |
> const n=1000;
> type mass:[1..n,1..n]of integer; > var > mas:mass; нельзя определять переменные > 64Кб, в этом весь и прикол. Нужно грузить по одному значению, например из файла, или использовать что-нибудь вроде TCollection. |
Camel_Toe |
Сообщение
#14
|
Новичок Группа: Пользователи Сообщений: 26 Репутация: 0 |
Все значения ненулевых элементов и их "координаты" в матрице надо брать из внешнего файла. Как я понял, сначала надо считать данные в некий массив, а потом с помощью указателей на его элементы найти сумму диаг.элементов исходной матрицы. Вот этото я и не понял как делать
2Fire-Rage: пасибки за код, а можеш сделать чтоб из файла считывались значения ?? |
Атавин Т. А. |
Сообщение
#15
|
Гость |
Цитата(GLuk @ 1.10.03 18:58) 2zx1024 Может быть, но тогда получается, что понятие линейный список уже имеет место быть... а может это и нелинейный список. А линейный список тогда получается что-то по типу: A[1,1..X] - первый линейный список. A[2,1..D] - второй линейный список. A[3,1..F] - третий линейный список. .................................................................. Конечно, существуют и нелинейные списки, но что понимать под нелинейностью? В данном случае это действитьельно структура списк4а: нелинейный список состоит из частей (ветвей), переход между которыми возможен только через общий узел данных ветвей. Для нелинейных списков даже есть специальное название - деревья. Дерево может ветвиться не только в корне, а на каждом своем узле, кроме нижнего уровня. Вопрос не в существовании нелинейных списков, а втом, нужна ли нелинейность в конкретном случае. |
Атавин Т. А. |
Сообщение
#16
|
Гость |
Цитата(Camel_Toe @ 6.10.03 6:12) разреженная матрица - это матрица очень большого размера, ну скажем 1000 на1000, у которой большинство элементов равны нулю. Поэтому в дин. память надо разместить все ненулевые элементы, а элементы равные нулю-вообще не учитывать. Кстати, я там сверху немного ошибся - надо найти не собств.числа, а сумму диагональных элементов. Не совсем так. Разреженнеой называется не большая матрица, а матрица, в которой много нехранимых элементов. Причем, критерий их множественности - возможность извлекать выгоду из факта их существования, то есть возможность использовать для сжатия матрицы исключение из нее ненужных элем5ентов, причем, если матрица не сжимается таким способом, то она все равно не считается разреженной, то есть разреженность это не свойство матрицы, а способ ее хранения. |
volvo |
Сообщение
#17
|
Гость |
Атавин Т. А.,
очень мудрое решение, поднять тему, которой почти полтора года... |
Текстовая версия | 11.01.2025 4:06 |