Constructing a recursion that forms a chain until no new element can be added
I have a matrix by 9x2 where the first column implies the second column, that is
A=[7 10; 1 7; 3 1; 6 9; 10 7; 2 8; 10 8; 10 4; 8 6];
I will form an implication chain using these data. Couple examples would be 3 --> 1 --> 7 --> 10 --> 8 or 3 --> 1 --> 7 --> 10 --> 4 or 2 --> 8 --> 6 --> 9
I tried to use a cell for every rule but couldn't form the while loop. The cell dimension changes with every new element but for example, I couldn't move from 3 --> 1 --> 7 --> 10 to two separate chains of 3 --> 1 --> 7 --> 10 --> 8 and 3 --> 1 --> 7 --> 10 --> 4. How can I do it?
matlab while-loop chain
add a comment |
I have a matrix by 9x2 where the first column implies the second column, that is
A=[7 10; 1 7; 3 1; 6 9; 10 7; 2 8; 10 8; 10 4; 8 6];
I will form an implication chain using these data. Couple examples would be 3 --> 1 --> 7 --> 10 --> 8 or 3 --> 1 --> 7 --> 10 --> 4 or 2 --> 8 --> 6 --> 9
I tried to use a cell for every rule but couldn't form the while loop. The cell dimension changes with every new element but for example, I couldn't move from 3 --> 1 --> 7 --> 10 to two separate chains of 3 --> 1 --> 7 --> 10 --> 8 and 3 --> 1 --> 7 --> 10 --> 4. How can I do it?
matlab while-loop chain
add a comment |
I have a matrix by 9x2 where the first column implies the second column, that is
A=[7 10; 1 7; 3 1; 6 9; 10 7; 2 8; 10 8; 10 4; 8 6];
I will form an implication chain using these data. Couple examples would be 3 --> 1 --> 7 --> 10 --> 8 or 3 --> 1 --> 7 --> 10 --> 4 or 2 --> 8 --> 6 --> 9
I tried to use a cell for every rule but couldn't form the while loop. The cell dimension changes with every new element but for example, I couldn't move from 3 --> 1 --> 7 --> 10 to two separate chains of 3 --> 1 --> 7 --> 10 --> 8 and 3 --> 1 --> 7 --> 10 --> 4. How can I do it?
matlab while-loop chain
I have a matrix by 9x2 where the first column implies the second column, that is
A=[7 10; 1 7; 3 1; 6 9; 10 7; 2 8; 10 8; 10 4; 8 6];
I will form an implication chain using these data. Couple examples would be 3 --> 1 --> 7 --> 10 --> 8 or 3 --> 1 --> 7 --> 10 --> 4 or 2 --> 8 --> 6 --> 9
I tried to use a cell for every rule but couldn't form the while loop. The cell dimension changes with every new element but for example, I couldn't move from 3 --> 1 --> 7 --> 10 to two separate chains of 3 --> 1 --> 7 --> 10 --> 8 and 3 --> 1 --> 7 --> 10 --> 4. How can I do it?
matlab while-loop chain
matlab while-loop chain
asked Nov 19 '18 at 18:52
A DoeA Doe
868
868
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
One option is to convert this to a directed graph. You can identify the source and sink nodes by those that only occur in the first or second column of A. You can then loop over all possible paths from each source to each sink node using shortest path.
A=[7 10; 1 7; 3 1; 6 9; 10 7; 2 8; 10 8; 10 4; 8 6];
G = digraph(A(:,1), A(:,2)); % Create graph
source = setdiff(A(:,1), A(:,2)); % Identify source and sink nodes
sink = setdiff(A(:,2), A(:,1));
for i = 1:length(source)
for j = 1:length(sink)
disp(shortestpath(G, source(i), sink(j)));
end
end
output:
2 8 6 9
3 1 7 10 4
3 1 7 10 8 6 9
That would work great! I had forgotten to do it this way. Thank you very much!
– A Doe
Nov 19 '18 at 19:17
Unfortunately, my data is larger than this matrix. For some of the analyses, it stretches up to more than 50x2. So, the shortest path turned out to be the the direct path between two nodes. I'll try the longest path, though.
– A Doe
Nov 19 '18 at 19:32
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53380946%2fconstructing-a-recursion-that-forms-a-chain-until-no-new-element-can-be-added%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
One option is to convert this to a directed graph. You can identify the source and sink nodes by those that only occur in the first or second column of A. You can then loop over all possible paths from each source to each sink node using shortest path.
A=[7 10; 1 7; 3 1; 6 9; 10 7; 2 8; 10 8; 10 4; 8 6];
G = digraph(A(:,1), A(:,2)); % Create graph
source = setdiff(A(:,1), A(:,2)); % Identify source and sink nodes
sink = setdiff(A(:,2), A(:,1));
for i = 1:length(source)
for j = 1:length(sink)
disp(shortestpath(G, source(i), sink(j)));
end
end
output:
2 8 6 9
3 1 7 10 4
3 1 7 10 8 6 9
That would work great! I had forgotten to do it this way. Thank you very much!
– A Doe
Nov 19 '18 at 19:17
Unfortunately, my data is larger than this matrix. For some of the analyses, it stretches up to more than 50x2. So, the shortest path turned out to be the the direct path between two nodes. I'll try the longest path, though.
– A Doe
Nov 19 '18 at 19:32
add a comment |
One option is to convert this to a directed graph. You can identify the source and sink nodes by those that only occur in the first or second column of A. You can then loop over all possible paths from each source to each sink node using shortest path.
A=[7 10; 1 7; 3 1; 6 9; 10 7; 2 8; 10 8; 10 4; 8 6];
G = digraph(A(:,1), A(:,2)); % Create graph
source = setdiff(A(:,1), A(:,2)); % Identify source and sink nodes
sink = setdiff(A(:,2), A(:,1));
for i = 1:length(source)
for j = 1:length(sink)
disp(shortestpath(G, source(i), sink(j)));
end
end
output:
2 8 6 9
3 1 7 10 4
3 1 7 10 8 6 9
That would work great! I had forgotten to do it this way. Thank you very much!
– A Doe
Nov 19 '18 at 19:17
Unfortunately, my data is larger than this matrix. For some of the analyses, it stretches up to more than 50x2. So, the shortest path turned out to be the the direct path between two nodes. I'll try the longest path, though.
– A Doe
Nov 19 '18 at 19:32
add a comment |
One option is to convert this to a directed graph. You can identify the source and sink nodes by those that only occur in the first or second column of A. You can then loop over all possible paths from each source to each sink node using shortest path.
A=[7 10; 1 7; 3 1; 6 9; 10 7; 2 8; 10 8; 10 4; 8 6];
G = digraph(A(:,1), A(:,2)); % Create graph
source = setdiff(A(:,1), A(:,2)); % Identify source and sink nodes
sink = setdiff(A(:,2), A(:,1));
for i = 1:length(source)
for j = 1:length(sink)
disp(shortestpath(G, source(i), sink(j)));
end
end
output:
2 8 6 9
3 1 7 10 4
3 1 7 10 8 6 9
One option is to convert this to a directed graph. You can identify the source and sink nodes by those that only occur in the first or second column of A. You can then loop over all possible paths from each source to each sink node using shortest path.
A=[7 10; 1 7; 3 1; 6 9; 10 7; 2 8; 10 8; 10 4; 8 6];
G = digraph(A(:,1), A(:,2)); % Create graph
source = setdiff(A(:,1), A(:,2)); % Identify source and sink nodes
sink = setdiff(A(:,2), A(:,1));
for i = 1:length(source)
for j = 1:length(sink)
disp(shortestpath(G, source(i), sink(j)));
end
end
output:
2 8 6 9
3 1 7 10 4
3 1 7 10 8 6 9
answered Nov 19 '18 at 19:14
MattMatt
1,114112
1,114112
That would work great! I had forgotten to do it this way. Thank you very much!
– A Doe
Nov 19 '18 at 19:17
Unfortunately, my data is larger than this matrix. For some of the analyses, it stretches up to more than 50x2. So, the shortest path turned out to be the the direct path between two nodes. I'll try the longest path, though.
– A Doe
Nov 19 '18 at 19:32
add a comment |
That would work great! I had forgotten to do it this way. Thank you very much!
– A Doe
Nov 19 '18 at 19:17
Unfortunately, my data is larger than this matrix. For some of the analyses, it stretches up to more than 50x2. So, the shortest path turned out to be the the direct path between two nodes. I'll try the longest path, though.
– A Doe
Nov 19 '18 at 19:32
That would work great! I had forgotten to do it this way. Thank you very much!
– A Doe
Nov 19 '18 at 19:17
That would work great! I had forgotten to do it this way. Thank you very much!
– A Doe
Nov 19 '18 at 19:17
Unfortunately, my data is larger than this matrix. For some of the analyses, it stretches up to more than 50x2. So, the shortest path turned out to be the the direct path between two nodes. I'll try the longest path, though.
– A Doe
Nov 19 '18 at 19:32
Unfortunately, my data is larger than this matrix. For some of the analyses, it stretches up to more than 50x2. So, the shortest path turned out to be the the direct path between two nodes. I'll try the longest path, though.
– A Doe
Nov 19 '18 at 19:32
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53380946%2fconstructing-a-recursion-that-forms-a-chain-until-no-new-element-can-be-added%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown