Ranita works as an Assistant Professor at the Computer Science and Engineering Department at IIT Roorkee. She has completed her PhD from the Computer Science and Engineering Department at IIT Kharagpur. Before that, she has done her MTech from IIEST Shibpur, and got job offers from companies like Amazon, Samsung Labs etc. However, she preferred to pursue higher studies to stay in the field of academics and teaching. She believes in the motto of free education and contribution.

### Alma Mater:

PhD
IIT Kharagpur
2012 to 2016
Master of Engineering
Indian Institute of Engineering Science and Technology, Shibpur
2010 to 2012
Bachelor of Technology
Kalyani Government Engineering College
2005 to 2009

### Experience:

Assistant Professor
Indian Institute of Technology Roorkee
2016
Indian Statistical Institute, Kolkata
2009 to 2010
Teacher
7 months 6 days ago

Possibly this is the same note.

moreless
Teacher
7 months 1 week ago

The correct answer is (b) remains same. To understand this, let us revise the informal algorithm for Timestamp based protocol for concurrency control (copied from Wikipedia, you can also refer to the formal version of the algorithm there):

1) If a transaction wants to read an object,

a) but the transaction started before the object's write timestamp it means that something changed the object's data after the transaction started. In this case, the transaction is canceled and must be restarted.
b) and the transaction started after the object's write timestamp, it means that it is safe to read the object. In this case, if the transaction timestamp is after the object's read timestamp, the read timestamp is set to the transaction timestamp.
2) If a transaction wants to write to an object,

a) but the transaction started before the object's read timestamp it means that something has had a look at the object, and we assume it took a copy of the object's data. So we can't write to the object as that would make any copied data invalid, so the transaction is aborted and must be restarted.
b) and the transaction started before the object's write timestamp it means that something has changed the object since we started our transaction. In this case, we use the Thomas write rule and simply skip our write operation and continue as normal; the transaction does not have to be aborted or restarted
c) otherwise, the transaction writes to the object, and the object's write timestamp is set to the transaction's timestamp.

Now consider the following example schedule:

T1      T2      T3      T4
R(A)
R(A)
R(A)
W(A)

Consider that after the execution of the last R(A), T4 needs to rollback (as given in the question). So, RTS(A) was 4 and now we need to decide what should be the new RTS for A. Note that, the schedule at hand now is something like the following:

T1      T2      T3
R(A)
R(A)
W(A)

Independent of T4, this schedule will have RTS(A) = 3 when T2 tries to write and hence T2 should be aborted by rule 2(a).

Now, after rollback of T4, consider option (a) i.e. changing the RTS(A) to 0. This will certainly allow W(A) by T2 to execute without any problem as it falls under rule 2(c) and hence violates concurrency by allowing T2 to write a data already read by T3.

Consider option (c) i.e. RTS(A) becomes equal to the timestamp of the transaction which read 'A' just before T4, in this example then RTS(A) becomes 1. And hence the same problem arises as choosing option (a).

Therefore, if we choose option (b) and keep the RTS(A) same as before i.e. 4, then W(A) by T2 will fall under rule 2(a) and hence will be aborted. So, option (b) is the correct answer.

This is why RTS is kept as the largest of the timestamps of the transactions which has read the data, and not the recent timestamp.

moreless
Teacher
Example text
8 months 3 weeks ago

This is an example of fan trap and chasm trap and how to resolve these scenarios. The following brief explanation may help you in understanding the concept which is usually found to be dubious across the web. This explanation is made in parity with the concept explained in Wikipedia (https://en.wikipedia.org/wiki/Entity–relationship_model#Model_usability_issues). You can also refer to https://db.grussell.org/section005.html to understand in detail.

moreless
Teacher
Example text
10 months 1 week ago

You are very close to the answer. But, there is one catch; the first row of pixels (at y = 0) and the last row of pixels (at y = 37) are not full length. You may try to modify the approach accordingly to get to the correct answer. Very good presentation, by the way.

moreless
Teacher
Example text
10 months 2 weeks ago

Consider the attribute set ABCDEG and the FD set
AB → C, AC → B, AD → E, B → D, BC → A, E → G
Is the following decomposition of R(ABCDEG)
(a) dependency-preserving?
(b) lossless-join?
1: AB, BC, ABDE, EG

moreless
Jayanta Chakraborty
Arul
Arvind Rawat
Pritam Prasun
1
Pritam Prasun
905
Rajeev
914
Vivek Vikram Singh
921
Pashupati Jha
922
Priyesh Priyatam
923
GIRRAJ PAHARIYA
972
Himanshi
976
Shreyans Dhankhar
977
Ribhu Ranjan
986
Prafull Ranjan
1005
Antonio Anastasio Bruto da Costa
1047
Shabin Muhammed
1065
1129
SHUVANKAR CHAKRABORTY
1228

## Pages

1 Oct 2015 - 12:47pm

The query should be something like this:

SELECT SQRT(s*(s−a)*(s−b)*(s−c)) FROM (SELECT a, b, c, (a+b+c)/2.0 AS s FROM Triangle);

You don't need to use SUM function as it is for summing values from a single column.
http://www.w3schools.com/sql/sql_func_sum.asp
Can you please run this query with your table and let us know if it is giving you the desired result?

more less
30 Sep 2015 - 5:49pm

As co-routine runs on single thread, we can eliminate first option.
However, I am not exactly sure between second and third choice, seems interleaved list handling will be easy with co-routines due to the obvious interleaving nature... but I also found this link which seems to be suggesting that co-routines may also be useful for combinatorial generation (searching) : http://sahandsaba.com/combinatorial-generation-using-coroutines-in-pytho...
I have not gone through the article in detail, may be you can try to understand it once.

more less
30 Sep 2015 - 2:49pm

If only two possible moves were there, then you could have used the approach using combination.
In that case, if total m+n moves are in the sequence with m of a particular type (say m number of x moves), and n of the other type (say n number of y moves), then you get total number of possible permutations considering these duplicates as (m+n)!/(m!×n!) which is nothing but $^{m+n}C_n$.

more less
30 Sep 2015 - 2:14pm

There are three kinds of moves, x, y, and z.
Irrespective of the sequence of moves taken to reach (4,3,5) from (0,0,0), you must take 4 steps in x-direction, 3 steps in y-direction, and 5 steps in z-direction.
One such sequence of moves is xxxxyyyzzzzz.
Now to get all the possible moves, you just need to permute the terms of this sequence.
So, following permutation with duplicate elements, we get
total number of ways to reach to (4,3,5) from (0,0,0) is (4+3+5)!/(4!×3!×5!) = 12!/(4!×3!×5!) = 27720.
The formula for total number of permutations of n elements with p duplicates of one kind and q duplicates of some other kind is n!/(p!×q!), this can be extended to any number of duplicates.
Let me know if the approach is clear to you.

more less
25 Sep 2015 - 9:00pm

This document is worth going through if you want to know how to get generating function for any given series. You will also get the detailed explanation on getting the G(z) for Fibonacci series here.
http://www.techtud.com/resource-share/generating-functions-mit-notes

more less
6 Sep 2015 - 2:55pm

Yes, you are right. The Catalan number 4 gives you the number of possible full binary trees with 5 leaves.

more less
6 Sep 2015 - 1:32pm

Catalan number Cn is the number of full binary trees with n + 1 leaves. A rooted binary tree is full if every vertex has either two children or none.

more less
26 Aug 2015 - 9:32pm

It's true that ** is also used to denote exponentiation. But, I guess it will not be wise to change the given symbol in this case.

more less
26 Aug 2015 - 9:22pm

^ or exponentiation is treated as just another operator like addition or multiplication while drawing binary expression trees. So, the binary expression tree corresponding to the given expression should be something like this:

more less