{"id":24957,"date":"2017-05-27T17:53:48","date_gmt":"2017-05-27T12:23:48","guid":{"rendered":"https:\/\/www.wikitechy.com\/technology\/?p=24957"},"modified":"2018-10-27T19:28:07","modified_gmt":"2018-10-27T13:58:07","slug":"activity-selection-problem","status":"publish","type":"post","link":"https:\/\/www.wikitechy.com\/technology\/activity-selection-problem\/","title":{"rendered":"Activity Selection Problem"},"content":{"rendered":"<h2 id=\"what-is-greedy\"><span style=\"color: #993366;\">\u00a0<span style=\"color: #ff9900;\">What is Greedy?<\/span><\/span><\/h2>\n<p><a href=\"https:\/\/www.wikitechy.com\/technology\/greedy-algorithms-set-9-boruvkas-algorithm\/\">Greedy<\/a> is an algorithmic paradigm that builds up a solution piece by piece, always choosing the next piece that offers the most obvious and immediate benefit. Greedy <a href=\"https:\/\/www.wikitechy.com\/technology\/java-programming-randomized-algorithms\/\">algorithms<\/a> are used for optimization problems. An optimization problem can be solved using Greedy if the problem has the following property: At every step, we can make a choice that looks best at the moment, and we get the optimal solution of the complete <strong>Activity Selection Problem<\/strong>.<\/p>\n<p><strong>An activity-selection<\/strong> is the problem of scheduling a resource among several competing activity.<\/p>\n<p><b>Statement:<\/b>\u00a0<i>Given a set S of n activities with and start time, S<\/i><sub><i>i\u00a0<\/i><\/sub><i>and f<sub>i<\/sub>, finish time of an i<sup>th<\/sup>\u00a0activity. Find the maximum size set of mutually compatible activities.<\/i><\/p>\n<p><b>Compatible Activities<\/b><br \/>\nActivities\u00a0<i>i<\/i>\u00a0and\u00a0<i>j<\/i>\u00a0are compatible if the half-open internal [<i>s<sub>i<\/sub>, f<sub>i<\/sub><\/i>) and [<i>s<sub>j<\/sub>, f<sub>j<\/sub><\/i>) do not overlap, that is,\u00a0<i>i<\/i>\u00a0and\u00a0<i>j<\/i>\u00a0are compatible if\u00a0<i>s<sub>i\u00a0<\/sub><\/i>\u2265<i>\u00a0f<\/i><sub><i>j<\/i>\u00a0\u00a0<\/sub>and\u00a0<i>s<\/i><sub><i>j<\/i>\u00a0<\/sub>\u2265<i>\u00a0f<sub>i<\/sub><\/i><\/p>\n<figure id=\"attachment_31605\" aria-describedby=\"caption-attachment-31605\" style=\"width: 547px\" class=\"wp-caption aligncenter\"><img fetchpriority=\"high\" decoding=\"async\" class=\" wp-image-31605\" src=\"https:\/\/www.wikitechy.com\/technology\/wp-content\/uploads\/2017\/05\/activity-selection-problem.jpg\" alt=\"\" width=\"547\" height=\"411\" srcset=\"https:\/\/www.wikitechy.com\/technology\/wp-content\/uploads\/2017\/05\/activity-selection-problem.jpg 638w, https:\/\/www.wikitechy.com\/technology\/wp-content\/uploads\/2017\/05\/activity-selection-problem-300x225.jpg 300w, https:\/\/www.wikitechy.com\/technology\/wp-content\/uploads\/2017\/05\/activity-selection-problem-74x55.jpg 74w, https:\/\/www.wikitechy.com\/technology\/wp-content\/uploads\/2017\/05\/activity-selection-problem-111x83.jpg 111w, https:\/\/www.wikitechy.com\/technology\/wp-content\/uploads\/2017\/05\/activity-selection-problem-215x161.jpg 215w\" sizes=\"(max-width: 547px) 100vw, 547px\" \/><figcaption id=\"caption-attachment-31605\" class=\"wp-caption-text\">activity-selection-problem<\/figcaption><\/figure>\n<h2 id=\"greedy-algorithm-for-selection-problem\"><span style=\"color: #ff0000;\">Greedy Algorithm for Selection Problem<\/span><\/h2>\n<p>I. Sort the input activities by increasing finishing time.<br \/>\n<i>f<sub>1<\/sub><\/i>\u00a0\u2264\u00a0\u00a0<i>f<sub>2<\/sub><\/i>\u00a0\u2264 . . . \u2264<i>\u00a0 f<\/i><sub><i>n<\/i><\/sub><\/p>\n<p>II Call GREEDY-ACTIVITY-SELECTOR (Sif)<\/p>\n<ol>\n<li><i>n<\/i>\u00a0= length [<i>s<\/i>]<\/li>\n<li><i>A<\/i>={<i>i<\/i>}<\/li>\n<li><i>j<\/i>\u00a0= 1<\/li>\n<li>FOR\u00a0<i>i<\/i>\u00a0= 2 to n<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 do if\u00a0\u00a0<i>s<sub>i<\/sub><\/i>\u00a0\u2265\u00a0<i>f<sub>j<\/sub><\/i><\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 then A= AU{<i>i<\/i>}<\/li>\n<li>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<i>\u00a0j<\/i>\u00a0=\u00a0<i>i<\/i><\/li>\n<li>Return\u00a0<i>A<\/i><\/li>\n<\/ol>\n<p>If a Greedy Algorithm can solve a problem, then it generally becomes the best method to solve that problem as the Greedy algorithms are in general more efficient than other techniques like<a href=\"https:\/\/www.wikitechy.com\/technology\/download-droidlock-lockscreen-dynamic-password-time-date-battery\/\"> Dynamic<\/a> Programming. But Greedy algorithms cannot always be applied. For example, Fractional Knapsack problem (See this) can be solved using Greedy, but 0-1 Knapsack cannot be solved using Greedy.<\/p>\n<h3 id=\"here-is-a-standard-algorithms-that-are-greedy-algorithms\"><strong>Here is a standard algorithms that are Greedy algorithms.<\/strong><\/h3>\n<ul>\n<li><strong><span style=\"color: #993300;\">Kruskal\u2019s Minimum Spanning Tree (MST):<\/span><\/strong> In <a href=\"https:\/\/www.wikitechy.com\/technology\/kruskals-minimum-spanning-tree-using-stl-c\/\">Kruskal\u2019s<\/a> algorithm, we create a MST by picking edges one by one. The Greedy Choice is to pick the smallest weight edge that doesn\u2019t cause a cycle in the MST constructed so far.<\/li>\n<li><strong><span style=\"color: #000080;\">Prim\u2019s Minimum Spanning Tree:<\/span><\/strong> In <a href=\"https:\/\/www.wikitechy.com\/technology\/prims-algorithm-using-priority_queue-in-stl\/\">Prim\u2019s<\/a> algorithm also, we create a MST by picking edges one by one. We maintain two sets: set of the vertices already included in MST and the set of the vertices not yet included. The Greedy Choice is to pick the smallest weight edge that connects the two sets.<\/li>\n<li><span style=\"color: #800080;\"><strong>Dijkstra\u2019s Shortest Path:<\/strong><\/span> The <a href=\"https:\/\/www.wikitechy.com\/technology\/dijkstras-algorithm-adjacency-list-representation\/\">Dijkstra\u2019s<\/a> algorithm is very similar to Prim\u2019s algorithm. The shortest path tree is built up, edge by edge. We maintain two sets: set of the vertices already included in the tree and the set of the vertices not yet included. The Greedy Choice is to pick the edge that connects the two sets and is on the smallest weight path from source to the set that contains not yet included vertices.<\/li>\n<li><span style=\"color: #339966;\"><strong>Huffman Coding:<\/strong><\/span> <a href=\"https:\/\/www.wikitechy.com\/technology\/huffman-coding\/\">Huffman<\/a> Coding is a loss-less compression technique. It assigns variable length bit codes to different characters. The Greedy Choice is to assign least bit length code to the most frequent character.<\/li>\n<\/ul>\n[ad type=&#8221;banner&#8221;]\n<h2 id=\"why-do-we-need-greedy-algorithms\"><span style=\"color: #339966;\">Why do we need Greedy Algorithms?<\/span><\/h2>\n<p>The <a href=\"https:\/\/www.wikitechy.com\/technology\/asymptotic-notations\/\">greedy algorithms<\/a> are sometimes also used to get an approximation for Hard optimization problems. For example, Traveling Salesman Problem is a NP Hard problem. A Greedy choice for this problem is to pick the nearest unvisited city from the current city at every step. This solutions doesn\u2019t always produce the best optimal solution, but can be used to get an approximate optimal solution.<\/p>\n<p>Let us consider the Activity Selection problem as our first example of Greedy algorithms. Following is the problem statement.<\/p>\n<p>You are given n activities with their start and finish times. Select the maximum number of activities that can be performed by a single person, assuming that a person can only work on a single activity at a time.<\/p>\n<h3 id=\"example\"><span style=\"color: #ff0000;\"><strong>Example:<\/strong><\/span><\/h3>\n<pre><strong>Example 1 :<\/strong> Consider the following 3 activities sorted by\r\nby finish time.\r\n     start[]  =  {10, 12, 20};\r\n     finish[] =  {20, 25, 30};\r\nA person can perform at most <strong>two<\/strong> activities. The \r\nmaximum set of activities that can be executed \r\nis {0, 2} [ These are indexes in start[] and \r\nfinish[] ]\r\n\r\n<strong>Example 2 :<\/strong> Consider the following 6 activities \r\nsorted by by finish time.\r\n     start[]  =  {1, 3, 0, 5, 8, 5};\r\n     finish[] =  {2, 4, 6, 7, 9, 9};\r\nA person can perform at most <strong>four<\/strong> activities. The \r\nmaximum set of activities that can be executed \r\nis {0, 1, 3, 4} [ These are indexes in start[] and \r\nfinish[] ]<\/pre>\n<p>The greedy choice is to always pick the next activity whose finish time is least among the remaining <a href=\"https:\/\/www.wikitechy.com\/technology\/bankers-algorithm\/\">activities<\/a> and the start time is more than or equal to the finish time of previously selected activity. We can sort the activities according to their finishing time so that we always consider the next activity as minimum finishing time activity.<\/p>\n<p>1) Sort the activities according to their finishing time<\/p>\n<p>2) Select the first activity from the sorted array and print it.<\/p>\n<p>3) Do following for remaining activities in the sorted array.<\/p>\n<p>\u2026\u2026.a) If the start time of this activity is greater than or equal to the finish time of previously selected activity then select this activity and print it.<\/p>\n<p>In the following C implementation, it is assumed that the activities are already sorted according to their finish time.<\/p>\n[ad type=&#8221;banner&#8221;]\n<h4 id=\"c\"><strong>C++<\/strong><\/h4>\n<div class=\"code-embed-wrapper\"> <div class=\"code-embed-infos\"> <span class=\"code-embed-name\">C++<\/span> <\/div> <pre class=\"language-cpp code-embed-pre line-numbers\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-cpp code-embed-code\">\/\/ C++ program for activity selection problem.<br\/>\/\/ The following implementation assumes that the activities<br\/>\/\/ are already sorted according to their finish time<br\/>#include&lt;stdio.h&gt;<br\/><br\/>\/\/ Prints a maximum set of activities that can be done by a single<br\/>\/\/ person, one at a time.<br\/>\/\/  n   --&gt;  Total number of activities<br\/>\/\/  s[] --&gt;  An array that contains start time of all activities<br\/>\/\/  f[] --&gt;  An array that contains finish time of all activities<br\/>void printMaxActivities(int s[], int f[], int n)<br\/>{<br\/>    int i, j;<br\/><br\/>    printf (&quot;Following activities are selected \\n&quot;);<br\/><br\/>    \/\/ The first activity always gets selected<br\/>    i = 0;<br\/>    printf(&quot;%d &quot;, i);<br\/><br\/>    \/\/ Consider rest of the activities<br\/>    for (j = 1; j &lt; n; j++)<br\/>    {<br\/>      \/\/ If this activity has start time greater than or<br\/>      \/\/ equal to the finish time of previously selected<br\/>      \/\/ activity, then select it<br\/>      if (s[j] &gt;= f[i])<br\/>      {<br\/>          printf (&quot;%d &quot;, j);<br\/>          i = j;<br\/>      }<br\/>    }<br\/>}<br\/><br\/>\/\/ driver program to test above function<br\/>int main()<br\/>{<br\/>    int s[] =  {1, 3, 0, 5, 8, 5};<br\/>    int f[] =  {2, 4, 6, 7, 9, 9};<br\/>    int n = sizeof(s)\/sizeof(s[0]);<br\/>    printMaxActivities(s, f, n);<br\/>    return 0;<br\/>}<\/code><\/pre> <\/div>\n<h4 id=\"java\"><strong>Java<\/strong><\/h4>\n<div class=\"code-embed-wrapper\"> <div class=\"code-embed-infos\"> <span class=\"code-embed-name\">Java<\/span> <\/div> <pre class=\"language-java code-embed-pre line-numbers\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-java code-embed-code\">\/\/ The following implementation assumes that the activities<br\/>\/\/ are already sorted according to their finish time<br\/>import java.util.*;<br\/>import java.lang.*;<br\/>import java.io.*;<br\/><br\/>class ActivitySelection<br\/>{<br\/>    \/\/ Prints a maximum set of activities that can be done by a single<br\/>    \/\/ person, one at a time.<br\/>    \/\/  n   --&gt;  Total number of activities<br\/>    \/\/  s[] --&gt;  An array that contains start time of all activities<br\/>    \/\/  f[] --&gt;  An array that contains finish time of all activities<br\/>    public static void printMaxActivities(int s[], int f[], int n)<br\/>    {<br\/>\tint i, j;<br\/>\t <br\/>\tSystem.out.print(&quot;Following activities are selected : \\n&quot;);<br\/>\t <br\/>\t\/\/ The first activity always gets selected<br\/>\ti = 0;<br\/>\tSystem.out.print(i+&quot; &quot;);<br\/>\t <br\/>\t\/\/ Consider rest of the activities<br\/>\tfor (j = 1; j &lt; n; j++)<br\/>\t{<br\/>\t     \/\/ If this activity has start time greater than or<br\/>\t     \/\/ equal to the finish time of previously selected<br\/>\t     \/\/ activity, then select it<br\/>\t     if (s[j] &gt;= f[i])<br\/>\t     {<br\/>\t          System.out.print(j+&quot; &quot;);<br\/>\t          i = j;<br\/>\t      }<br\/>\t }<br\/>    }<br\/>\t <br\/>    \/\/ driver program to test above function<br\/>    public static void main(String[] args)<br\/>    {<br\/>\tint s[] =  {1, 3, 0, 5, 8, 5};<br\/>\tint f[] =  {2, 4, 6, 7, 9, 9};<br\/>\tint n = s.length;<br\/>\t   <br\/>\tprintMaxActivities(s, f, n);<br\/>    }<br\/>\t<br\/>}<\/code><\/pre> <\/div>\n<h4 id=\"python\"><strong>Python<\/strong><\/h4>\n<div class=\"code-embed-wrapper\"> <div class=\"code-embed-infos\"> <\/div> <pre class=\"language-python code-embed-pre line-numbers\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-python code-embed-code\">&quot;&quot;&quot;The following implementation assumes that the activities<br\/>are already sorted according to their finish time&quot;&quot;&quot;<br\/><br\/>&quot;&quot;&quot;Prints a maximum set of activities that can be done by a<br\/>single person, one at a time&quot;&quot;&quot;<br\/># n --&gt; Total number of activities<br\/># s[]--&gt; An array that contains start time of all activities<br\/># f[] --&gt; An array that conatins finish time of all activities<br\/><br\/>def printMaxActivities(s , f ):<br\/>    n = len(f)<br\/>    print &quot;The following activities are selected&quot;<br\/><br\/>    # The first activity is always selected<br\/>    i = 0<br\/>    print i,<br\/><br\/>    # Consider rest of the activities<br\/>    for j in xrange(n):<br\/><br\/>        # If this activity has start time greater than<br\/>        # or equal to the finish time of previously<br\/>        # selected activity, then select it<br\/>        if s[j] &gt;= f[i]:<br\/>            print j,<br\/>            i = j<br\/><br\/># Driver program to test above function<br\/>s = [1 , 3 , 0 , 5 , 8 , 5]<br\/>f = [2 , 4 , 6 , 7 , 9 , 9]<br\/>printMaxActivities(s , f)<br\/><br\/># This code is contributed by Nikhil Kumar Singh<\/code><\/pre> <\/div>\n<h4 id=\"output\"><strong>Output:<\/strong><\/h4>\n<pre><strong>Following activities are selected\r\n0 1 3 4<\/strong><\/pre>\n[ad type=&#8221;banner&#8221;]\n<h2 id=\"how-greedy-choice-work-for-activities-sorted-according-to-finish-time\"><span style=\"color: #800080;\"><strong>How Greedy Choice work for Activities sorted according to finish time?<\/strong><\/span><\/h2>\n<p>Let the give set of activities be S = {1, 2, 3, ..n} and activities be sorted by finish time. The greedy choice is to always pick activity 1. How come the activity 1 always provides one of the optimal solutions. We can prove it by showing that if there is another <a href=\"https:\/\/www.wikitechy.com\/technology\/tips-solving-screen-freeze-problems\/\">solution<\/a> B with first activity other than 1, then there is also a solution A of same size with activity 1 as first activity. Let the first activity selected by B be k, then there always exist A = {B \u2013 {k}} U {1}.(Note that the activities in B are independent and k has smallest finishing time among all. Since k is not 1, finish(k) &gt;= finish(1)).<\/p>\n<h2 id=\"how-to-implement-when-given-activities-are-not-sorted\"><span style=\"color: #ff9900;\"><strong>How to implement when given activities are not sorted?<\/strong><\/span><\/h2>\n<p>We create a structure\/class for activities. We sort all activities by finish time (Refer <a href=\"http:\/\/www.geeksforgeeks.org\/sort-c-stl\/\" target=\"_blank\" rel=\"noopener\">sort in C++ STL<\/a>). Once we have activities sorted, we apply same above algorithm.<\/p>\n<div class=\"code-embed-wrapper\"> <div class=\"code-embed-infos\"> <span class=\"code-embed-name\">C++<\/span> <\/div> <pre class=\"language-cpp code-embed-pre line-numbers\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-cpp code-embed-code\">\/\/ C++ program for activity selection problem<br\/>\/\/ when input activities may not be sorted.<br\/>#include &lt;bits\/stdc++.h&gt;<br\/>using namespace std;<br\/><br\/>\/\/ A job has start time, finish time and profit.<br\/>struct Activitiy<br\/>{<br\/>    int start, finish;<br\/>};<br\/><br\/>\/\/ A utility function that is used for sorting<br\/>\/\/ activities according to finish time<br\/>bool activityCompare(Activitiy s1, Activitiy s2)<br\/>{<br\/>    return (s1.finish &lt; s2.finish);<br\/>}<br\/><br\/>\/\/ Returns count of maximum set of activities that can<br\/>\/\/ be done by a single person, one at a time.<br\/>void printMaxActivities(Activitiy arr[], int n)<br\/>{<br\/>    \/\/ Sort jobs according to finish time<br\/>    sort(arr, arr+n, activityCompare);<br\/><br\/>    cout &lt;&lt; &quot;Following activities are selected \\n&quot;;<br\/><br\/>    \/\/ The first activity always gets selected<br\/>    int i = 0;<br\/>    cout &lt;&lt; &quot;(&quot; &lt;&lt; arr[i].start &lt;&lt; &quot;, &quot; &lt;&lt; arr[i].finish &lt;&lt; &quot;), &quot;;<br\/><br\/>    \/\/ Consider rest of the activities<br\/>    for (int j = 1; j &lt; n; j++)<br\/>    {<br\/>      \/\/ If this activity has start time greater than or<br\/>      \/\/ equal to the finish time of previously selected<br\/>      \/\/ activity, then select it<br\/>      if (arr[j].start &gt;= arr[i].finish)<br\/>      {<br\/>          cout &lt;&lt; &quot;(&quot; &lt;&lt; arr[j].start &lt;&lt; &quot;, &quot;<br\/>              &lt;&lt; arr[j].finish &lt;&lt; &quot;), &quot;;<br\/>          i = j;<br\/>      }<br\/>    }<br\/>}<br\/><br\/>\/\/ Driver program<br\/>int main()<br\/>{<br\/>    Activitiy arr[] = {{5, 9}, {1, 2}, {3, 4}, {0, 6},<br\/>                                       {5, 7}, {8, 9}};<br\/>    int n = sizeof(arr)\/sizeof(arr[0]);<br\/>    printMaxActivities(arr, n);<br\/>    return 0;<br\/>}<\/code><\/pre> <\/div>\n<p class=\"brush: cpp; highlight: [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]; title: ; notranslate\">\u00a0<strong>Output:<\/strong><\/p>\n<pre>Following activities are selected \r\n(1, 2), (3, 4), (5, 7), (8, 9), \r\n<\/pre>\n<p><span style=\"color: #008000;\"><strong>Time Complexity :<\/strong><\/span> It takes O(n log n) time if input activities may not be sorted. It takes O(n) time when it is given that input activities are always sorted.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Activity Selection Problem &#8211; Greedy Algorithm &#8211;  Greedy is an algorithmic paradigm that builds up a solution piece by piece, always choosing the next piece that offers the most obvious and immediate benefit.<\/p>\n","protected":false},"author":1,"featured_media":25345,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[70144],"tags":[70171,70184,70178,70185,70153,70179,70183,70180,70181,70169,70177,70155,70167,70151,70156,70150,70175,70173,70168,70182,70154,70148,70147,70166,70164,70152,70161,70149,70170,70165,70159,70162,70160,70158,70174,70176,70172,70157,70163],"class_list":["post-24957","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-greedy-algorithm","tag-activities-examples","tag-activity-scheduling","tag-activity-selection","tag-activity-selection-algorithm","tag-activity-selection-problem","tag-activity-selection-problem-dynamic-programming","tag-activity-selection-problem-dynamic-programming-code","tag-activity-selection-problem-example","tag-activity-selection-problem-greedy-algorithm-example","tag-algorithm-problems","tag-algorithmic-problem-solving-with-python","tag-artificial-selection-definition","tag-binary-search-algorithm-cannot-be-applied-to","tag-characteristics-of-greedy-algorithm","tag-cormen-algorithms-pdf","tag-cormen-solutions","tag-define-greedy-method","tag-difference-between-greedy-algorithm-and-dynamic-programming","tag-difference-between-greedy-method-and-dynamic-programming","tag-give-a-dynamic-programming-algorithm-for-the-activity-selection-problem","tag-greed-is-good","tag-greedy","tag-greedy-algorithm","tag-greedy-algorithm-pdf","tag-greedy-algorithm-ppt","tag-greedy-algorithm-tutorial","tag-greedy-approach","tag-greedy-method","tag-greedy-method-in-daa","tag-greedy-technique","tag-is-greed-good","tag-knapsack-problem-greedy-algorithm","tag-knapsack-problem-using-greedy-method","tag-rod-cutting-problem","tag-rod-cutting-problem-with-cost","tag-selection-programming-example","tag-what-is-an-algorithm-in-c","tag-what-is-greed","tag-what-is-greedy-algorithm"],"_links":{"self":[{"href":"https:\/\/www.wikitechy.com\/technology\/wp-json\/wp\/v2\/posts\/24957","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.wikitechy.com\/technology\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.wikitechy.com\/technology\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.wikitechy.com\/technology\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.wikitechy.com\/technology\/wp-json\/wp\/v2\/comments?post=24957"}],"version-history":[{"count":0,"href":"https:\/\/www.wikitechy.com\/technology\/wp-json\/wp\/v2\/posts\/24957\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.wikitechy.com\/technology\/wp-json\/wp\/v2\/media\/25345"}],"wp:attachment":[{"href":"https:\/\/www.wikitechy.com\/technology\/wp-json\/wp\/v2\/media?parent=24957"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.wikitechy.com\/technology\/wp-json\/wp\/v2\/categories?post=24957"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.wikitechy.com\/technology\/wp-json\/wp\/v2\/tags?post=24957"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}