{"id":3448,"date":"2017-11-27T06:00:53","date_gmt":"2017-11-27T04:00:53","guid":{"rendered":"http:\/\/www.glc.us.es\/~jalonso\/exercitium\/?p=3448"},"modified":"2017-12-04T07:38:58","modified_gmt":"2017-12-04T05:38:58","slug":"conjunto-de-relaciones-binarias-entre-dos-conjuntos","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/conjunto-de-relaciones-binarias-entre-dos-conjuntos\/","title":{"rendered":"Conjunto de relaciones binarias entre dos conjuntos"},"content":{"rendered":"<p>Una <a href=\"http:\/\/bit.ly\/2hQkyKO\">relaci\u00f3n binaria<\/a> entre dos conjuntos A y B se puede representar mediante un conjunto de pares (a,b) tales que a \u2208 A y b \u2208 B. Por ejemplo, la relaci\u00f3n &lt; entre A = {1,5,3} y B = {0,2,4} se representa por {(1,2),(1,4),(3,4)}.<\/p>\n<p>Definir las funciones<\/p>\n<pre lang=\"text\">\n   relaciones  :: [a] -> [b] -> [[(a,b)]]\n   nRelaciones :: [a] -> [b] -> Integer\n<\/pre>\n<p>tales que<\/p>\n<ul>\n<li>(relaciones xs ys) es el conjunto de las relaciones del conjunto xs en el conjunto ys. Por ejemplo,  <\/li>\n<\/ul>\n<pre lang=\"text\">\n     \u03bb> relaciones [1] [2]\n     [[],[(1,2)]]\n     \u03bb> relaciones [1] [2,4]\n     [[],[(1,2)],[(1,4)],[(1,2),(1,4)]]\n     \u03bb> relaciones [1,3] [2]\n     [[],[(1,2)],[(3,2)],[(1,2),(3,2)]]\n     \u03bb> relaciones [1,3] [2,4]\n     [[],[(1,2)],[(1,4)],[(1,2),(1,4)],[(3,2)],[(1,2),(3,2)],\n      [(1,4),(3,2)],[(1,2),(1,4),(3,2)],[(3,4)],[(1,2),(3,4)],\n      [(1,4),(3,4)],[(1,2),(1,4),(3,4)],[(3,2),(3,4)],\n      [(1,2),(3,2),(3,4)],[(1,4),(3,2),(3,4)],\n      [(1,2),(1,4),(3,2),(3,4)]]\n     \u03bb> relaciones [] []\n     [[]]\n     \u03bb> relaciones [] [2]\n     [[]]\n     \u03bb> relaciones [1] []\n     [[]]\n<\/pre>\n<ul>\n<li>(nRelaciones xs ys) es el n\u00famero de relaciones del conjunto xs en el conjunto ys. Por ejemplo,<\/li>\n<\/ul>\n<pre lang=\"text\">\n     nRelaciones [1,2] [4,5]    ==  16\n     nRelaciones [1,2] [4,5,6]  ==  64\n     nRelaciones [0..9] [0..9]  ==  1267650600228229401496703205376\n<\/pre>\n<h4>Soluciones<\/h4>\n<pre lang=\"haskell\">\nimport Data.List (genericLength, subsequences)\n\nrelaciones :: [a] -> [b] -> [[(a,b)]]\nrelaciones xs ys =\n  subsequences (producto xs ys)\n\n-- (producto xs ys) es el producto cartesiano de xs e ys. Por ejemplo,\n--    producto [1,3] [2,4]  ==  [(1,2),(1,4),(3,2),(3,4)]\nproducto :: [a] -> [b] -> [(a,b)]\nproducto xs ys =\n  [(x,y) | x <- xs, y <- ys]\n\n-- 1\u00aa definici\u00f3n de nRelaciones\nnRelaciones :: [a] -> [b] -> Integer\nnRelaciones xs ys = genericLength (relaciones xs ys)\n\n-- 2\u00aa definici\u00f3n de nRelaciones\nnRelaciones2 :: [a] -> [b] -> Integer\nnRelaciones2 xs ys =\n  2^(length xs * length ys)\n\n-- Comparaci\u00f3n de eficiencia\n--    \u03bb> nRelaciones [1..4] [1..5]\n--    1048576\n--    (1.17 secs, 228,243,608 bytes)\n--    \u03bb> nRelaciones2 [1..4] [1..5]\n--    1048576\n--    (0.02 secs, 144,856 bytes)\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Una relaci\u00f3n binaria entre dos conjuntos A y B se puede representar mediante un conjunto de pares (a,b) tales que a \u2208 A y b \u2208 B. Por ejemplo, la relaci\u00f3n &lt; entre A = {1,5,3} y B = {0,2,4} se representa por {(1,2),(1,4),(3,4)}. Definir las funciones relaciones :: [a] -> [b] -> [[(a,b)]] nRelaciones&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"footnotes":"","_jetpack_memberships_contains_paid_content":false},"categories":[4],"tags":[8,258,28,88],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/3448"}],"collection":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/comments?post=3448"}],"version-history":[{"count":3,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/3448\/revisions"}],"predecessor-version":[{"id":3479,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/3448\/revisions\/3479"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/media?parent=3448"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/categories?post=3448"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/tags?post=3448"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}