correction : /*set min at position A[i+1][0] after heafiying */ On Wed, Jan 11, 2012 at 11:07 PM, atul anand <atul.87fri...@gmail.com>wrote:
> @Lucifier : > yes i didnt hepified properly in my previous post intentionally. i only > purpose was to set min at position A[i+1][j] after heafiying.( rest i dint > care ) . > > secondly about the complexity, what i was saying > if given array is:- > > 1 3 4 8 9 > 2 5 18 25 50 > 6 7 22 45 55 > > now comparing 3 > 2 , swap we get > > 1 2 4 8 9 > 3 5 18 25 50 > 6 7 22 45 55 > now about heapifying the highlighted array , i was considering this > highlighted matrix > 3 5 18 25 50 > 6 7 22 45 55 > > as two 1-dimensional array 3 5 18 25 50 6 7 22 45 55 > > now we can apply heapify procedure to this 1-D array (bcozz in m/m this 2D > array is nothing but contiguous acquired space ) > > PARENT = floor(*i*/2) > LEFT (*i*) = 2i > RIGHT (*i*) = 2i + 1 > > is this approach is wrong ?? > > > On Wed, Jan 11, 2012 at 10:34 PM, Lucifer <sourabhd2...@gmail.com> wrote: > >> @atul.. >> >> Sorry, but i don't agree with both of ur posts... >> >> First of all, the complexity won't be log(m*n) for heapifying.. >> log(m*n) is valid in case of a heap represented in the form of a >> binary tree.. >> But, i have have repeatedly stressing in my previous posts that the >> submatrix heap is not a binary tree heap but rather a graph or say a >> binary tree (not really tree) where its subtrees share some nodes... >> >> Disagree with the following comment.. >> /** >> it seem that the sub-matrix need to be heapifyed for A[i][j] is >> A[i+1][j] to A[row][col] >> there is no need to include A[i][j+1] to A[i][col] for A[i][j] as you >> have >> mentioned above. >> **/ >> >> Also, i see that you have not properly heapified the submatrices >> correctly in the example that u have provided in the previous post.. >> >> Plz go thru my last post and see if ur doubts can get clarified.. >> >> --------------------------------------------- >> >> Really sorry, in case previously given details by me were >> inadequate... >> Was posting in a hurry :)... >> -------------------------------------------- >> Hope, now all doubts would be cleared... >> ----------------------------------------------- >> >> >> On Jan 11, 9:55 pm, Lucifer <sourabhd2...@gmail.com> wrote: >> > @Ankur.. >> > >> > I will try to explain the approach with an example.. >> > >> > Say the given matrix (sorted row wise and column wise) is as follows: >> > >> > a1 a2 a3 a4 >> > >> > b1 b2 b3 b4 >> > >> > c1 c2 c3 c4 >> > >> > d1 d2 d3 d4 >> > >> > Now, we want to sort the 2D array such that when all the rows are >> > aligned sequentially it should result in a sorted sequence.. >> > i.e. >> > >> > F1 F2 F3 F4 >> > ............. >> > ................ >> > F13 F14 F15 F16 >> > >> > such that F1 <= F2 <=....<= F16.. >> > >> > Now, let take each row at a time and ensure that that row contains all >> > the elements as expected in the output matrix.. >> > >> > Row - 1 : >> > M[0][0] = a1, which is at the correct place.. hence we won't touch >> > it.. >> > >> > Now our task is to pick the second smallest no. in the matrix and >> > place it at M[0][1].. >> > Currently, M[0][1] is the second smallest in Row-1, but we are not >> > sure whether its the second smallest in the entire matrix.. >> > Hence, only way we can check that is to look in the submatrix (M[1][0] >> > -- M[3][3]) >> > >> > Now, as we know that in the submatrix enclosed within (M[1][0] -- M[3] >> > [3]) the smallest element present in this submatrix is positioned at >> > M[1][0], therefore we will check M[0][1] against M[1][0].. >> > >> > If M[0][1] <= M[1][0], >> > that means M[0][1] has the second smallest element in the entire >> > matrix.. >> > else >> > M[1][0] is the second smallest element in the entire matrix and >> > we will swap M[1][0] with M[0][1].. >> > >> > Now, there are few things we need ensure if we end up swapping the >> > values: >> > 1) After swapping M[0][1]'s new value will be smaller than its >> > original value, therefore the following is still valid: >> > M[0][1] <= M[0][2] <=M[0][3] >> > and also as M[0][1]'s new value was previously placed below >> > M[0][0], hence it is >= M[0][0] .. >> > that means after swapping Row-1 still mains the sorted >> > order... >> > 2) Old value of M[1][0] <= M[1][1].. >> > Hence, the new value of M[0][1] is still <= M[1][1].. >> > therefore the sorted order of Column-2 is still valid... >> > 3) Now, new value of M[1][0] >= M[0][0] as an impact of old value of >> > M[0][1] >= M[0][0] >> > Also, new value of M[1][0] <= M[1][1] as an impact of >> > old value of M[0][1] <= M[1][1].. >> > [ point 3 can be proved by the using the explanation from >> > points 1 &2.. >> > 4) Now the only thing that we need to ensure is that Column - 1 is in >> > sorted order i.e M[1][0] (new) <= M[2][0] (old).. >> > If the above is true that means the submatrix enclosed within >> > (M[1][0] -- M[3][3]) is stabalized and has the row/column wise sorted >> > order property in place... >> > What if its not ?? then we need to readjust the submatrix ... >> > Once we do that we are done for the current iteration.. >> > [ we will talk abt stabalization in sometime.. lets take it for >> > granted right now..] >> > >> > Now, we will follow the same approach for M[0][2], so that it holds >> > the third largest element.. >> > >> > Once we are done with Row -1.. we have the first 4 smallest elements >> > in place and we move on to the next row and follow a same process.. >> > For ex- >> > Row -2 >> > M[1][0] is already in place and has the 5th largest element.. >> > Hence, lets look at M[1][1].. For this we will consider the submatrix >> > at (M[2][0] -- M[3][3]) and follow the same steps as >> > above.. >> > >> > >> --------------------------------------------------------------------------- >> ---------------------------------------- >> > Now lets talk abt how to stabilize the submatrix when the top-left >> > corner of the submatrix is replaced with another value... >> > >> > Say the given matrix 'R' to be stabilized is: >> > >> > a b c >> > >> > d e f >> > >> > g h i >> > >> > Now. if 'a' replaced with 'x'... >> > >> > x b c >> > >> > d e f >> > >> > g h i >> > >> > while(1) >> > { >> > If x <= min (b,d ), // here b is nothing but the element placed next >> > to 'x' on the same row.. >> > // d is the element placed right below 'x' >> > in the same column... >> > then we are done... >> > break; >> > else >> > swap ('x', min (b,d)) >> > >> > } >> > >> > Once, we break out of the while loop, we know that the matrix has been >> > stabilized and also R[0][0] has the smallest value.. >> > >> > // Observe that either 'x' shifts to the right position or to the >> > position just below it.. >> > // Hence, whats the max. no. of shifts that 'x' can have.?? >> > // no. of columns + no. of rows... >> > // Hence, heapifying time is (no. of columns + no. of rows) >> > >> > Additional explanation: >> > Now, for matrix R[0][0], its childs when interpreted as a heap are >> > located at R[0][1] and R[1][0]... >> > >> > Now, we know for sure that, the submatrix (R[0][1]... R[M][N]) has the >> > smallest element at R[0][1].. >> > Similarly, submatrix (R[1][0]... R[M][N]) has the smallest element at >> > R[1][0]... >> > >> > If you observe closely then: >> > Elements in submatrix (R[0][0]... R[M][N]) >> > = >> > Elements in submatrix (R[0][1]... R[M][N]) >> > U >> > Elements in submatrix (R[1][0]... R[M][N]) >> > U >> > R[0][0].. >> > >> > Looking at the above equation we can say that, if R[0][0] has been >> > replaced and not the smallest element, then the smallest element will >> > be one of (R[1][0] or R[0][1] ).. >> > And this rule applies as we keep reducing the size of the matrix.. if >> > shifts occur as explained above.... >> > >> > -------------------------------------------------------- >> > >> > On Jan 11, 6:10 pm, Gene <gene.ress...@gmail.com> wrote: >> > >> > >> > >> > >> > >> > >> > >> > > Think about the cost of picking the minimum. It's not O(1). >> > >> > > On Jan 11, 3:34 am, Sanjay Rajpal <sanjay.raj...@live.in> wrote: >> > >> > > > How can it be mn log mn ? >> > >> > > > it will be O(mn) as we elements are sorted, we simply pick minimum >> at each >> > > > iteration of the loop. Since there are mn elements, so complexity >> will be >> > > > O(mn). >> > >> > > > Correct me if m wrong. >> > > > * >> > > > Sanjay Kumar >> > > > B.Tech Final Year >> > > > Department of Computer Engineering >> > > > National Institute of Technology Kurukshetra >> > > > Kurukshetra - 136119 >> > > > Haryana, India >> > > > Contact: +91-8053566286 >> > > > * >> > >> > > > On Wed, Jan 11, 2012 at 12:29 AM, Ankur Garg <ankurga...@gmail.com> >> wrote: >> > > > > If we use K merge I think the time complexity would be nm lognm >> > >> > > > > I think we must try doing in O(m*n) >> > >> > > > > On Wed, Jan 11, 2012 at 1:54 PM, Ankur Garg <ankurga...@gmail.com> >> wrote: >> > >> > > > >> @Shady Rows are already sorted ... >> > >> > > > >> On Wed, Jan 11, 2012 at 1:53 PM, shady <sinv...@gmail.com> >> wrote: >> > >> > > > >>> ^^ true, sort the rows and then a K-way merge. >> > >> > > > >>> On Wed, Jan 11, 2012 at 1:00 PM, Sanjay Rajpal < >> sanjay.raj...@live.in>wrote: >> > >> > > > >>>> I guess sort the array such that elements are sorted finally >> in such a >> > > > >>>> way that if we print them row by row, the result is a sorted >> array. >> > >> > > > >>>> K-way merge can be useful. >> > > > >>>> * >> > > > >>>> Sanjay Kumar >> > > > >>>> B.Tech Final Year >> > > > >>>> Department of Computer Engineering >> > > > >>>> National Institute of Technology Kurukshetra >> > > > >>>> Kurukshetra - 136119 >> > > > >>>> Haryana, India >> > > > >>>> Contact: +91-8053566286 >> > > > >>>> * >> > >> > > > >>>> On Tue, Jan 10, 2012 at 11:28 PM, prakash y < >> yprakash....@gmail.com>wrote: >> > >> > > > >>>>> "sort the whole matrix in ascending array" means? >> > > > >>>>> can you please explain ? >> > >> > > > >>>>> On Wed, Jan 11, 2012 at 12:53 PM, atul anand < >> atul.87fri...@gmail.com>wrote: >> > >> > > > >>>>>> Given 2D array. >> > >> > > > >>>>>> The rows are sorted in ascending order and the colums are >> sorted in >> > > > >>>>>> ascending order. >> > >> > > > >>>>>> We have to sort the whole matrix in ascending array. >> > >> > > > >>>>>> We cannot use extra space. >> > >> > > > >>>>>> -- >> > > > >>>>>> You received this message because you are subscribed to the >> Google >> > > > >>>>>> Groups "Algorithm Geeks" group. >> > > > >>>>>> To post to this group, send email to >> algogeeks@googlegroups.com. >> > > > >>>>>> To unsubscribe from this group, send email to >> > > > >>>>>> algogeeks+unsubscr...@googlegroups.com. >> > > > >>>>>> For more options, visit this group at >> > > > >>>>>>http://groups.google.com/group/algogeeks?hl=en. >> > >> > > > >>>>> -- >> > > > >>>>> You received this message because you are subscribed to the >> Google >> > > > >>>>> Groups "Algorithm Geeks" group. >> > > > >>>>> To post to this group, send email to >> algogeeks@googlegroups.com. >> > > > >>>>> To unsubscribe from this group, send email to >> > > > >>>>> algogeeks+unsubscr...@googlegroups.com. >> > > > >>>>> For more options, visit this group at >> > > > >>>>>http://groups.google.com/group/algogeeks?hl=en. >> > >> > > > >>>> -- >> > > > >>>> You received this message because you are subscribed to the >> Google >> > > > >>>> Groups "Algorithm Geeks" group. >> > > > >>>> To post to this group, send email to >> algogeeks@googlegroups.com. >> > > > >>>> To unsubscribe from this group, send email to >> > > > >>>> algogeeks+unsubscr...@googlegroups.com. >> > > > >>>> For more options, visit this group at >> > > > >>>>http://groups.google.com/group/algogeeks?hl=en. >> > >> > > > >>> -- >> > > > >>> You received this message because you are subscribed to the >> Google >> > > > >>> Groups "Algorithm Geeks" group. >> > > > >>> To post to this group, send email to algogeeks@googlegroups.com >> . >> > > > >>> To unsubscribe from this group, send email to >> > > > >>> algogeeks+unsubscr...@googlegroups.com. >> > > > >>> For more options, visit this group at >> > > > >>>http://groups.google.com/group/algogeeks?hl=en. >> > >> > > > > -- >> > > > > You received this message because you are subscribed to the >> Google Groups >> > > > > "Algorithm Geeks" group. >> > > > > To post to this group, send email to algogeeks@googlegroups.com. >> > > > > To unsubscribe from this group, send email to >> > > > > algogeeks+unsubscr...@googlegroups.com. >> > > > > For more options, visit this group at >> > > > >http://groups.google.com/group/algogeeks?hl=en. >> >> -- >> You received this message because you are subscribed to the Google Groups >> "Algorithm Geeks" group. >> To post to this group, send email to algogeeks@googlegroups.com. >> To unsubscribe from this group, send email to >> algogeeks+unsubscr...@googlegroups.com. >> For more options, visit this group at >> http://groups.google.com/group/algogeeks?hl=en. >> >> > -- You received this message because you are subscribed to the Google Groups "Algorithm Geeks" group. To post to this group, send email to algogeeks@googlegroups.com. To unsubscribe from this group, send email to algogeeks+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/algogeeks?hl=en.