Saturday, January 11, 2014

Detect and identify cycle in linked list

Tortoise-Hare Algorithm illustrated -

Detection:
The classic Tortoise-Hare algorithm (Floyd Cycle Detection) requires two pointers, one fast (Hare or H) and a slower (Tortoise or T). Start both of them from the same (head) node and run the Hare twice as fast as the Tortoise. Clearly, they will meet at some point if there is a cycle. So far so good, very clear and intuitive.

Identification:
Let's assume that the singly linked list is represented as x = {x(0), x(1), ..., x(z)}. It has a cycle of length n starting at node x(m). T and H meet at node x(k), which is i distance away from start of the cycle. [For simplicity, I am eliminating obvious assumptions like, i <=n, k>=m, etc).



As H is twice as fast as T, by the time T crosses k nodes, H will traverse 2k nodes. Hence, we can write the following equations,

For T: k = m + i
For H: 2k = m + n + i
=> 2(m + i) = m + n + i
=> m =n - i

Based on this observation, T is restarted from the head or x(0), and both T and H are moved at the same speed of 1 node per time.
You will see that they ALWAYS meet at start of the cycle. This is because, by the time T crosses m nodes to reach x(m), H will now also cross m nodes. But H is moving in the cycle. So, it will cross, remaining (n-i) nodes of cycle (as it was at node x(k), where k = m + i) and reach the beginning of the cycle, x(m). But hey! (n-i) is actually m! So, H has just crossed m nodes, and will stop at x(m), where T has just reached :)
Thus, we know where the cycle starts.
The reason I wrote this blog is because the usual descriptions of this algorithm just tells you to restart T from head and move them at the same speed without this little description (which can be intuitive for many). But I felt the need of explaining the reason.

The rest is simple. Keep either T or H fixed at x(m), move the other till it reaches the fixed pointer again. The number of nodes traversed is length of the cycle.

Tuesday, February 7, 2012

Realizing that it's time for the dissertation dread

Well, it is this time of the life again. I am thinking of graduation, and thinking very hard. So hard that I can say "I am graduating this year". So here comes the most crucial phase of my PhD - the dissertation.

I have started working on my PhD thesis (I like calling it thesis too) sometime back, but never did I realize it so evidently and obviously that it is that very period of my PhD. It is the final stage, and I have read so much about it already. Starting from PhD Tips, Time Management for Dissertation, Secrets of Successful PhD Students, What They Don't Tell You, How to Write a Good PhD Dissertation, I never missed PhD Comics, GradCafe, How to Improve your Concentration, Resume and Thesis-writing workshops. I attended seminars not only in my own department, but in other departments and watched research-talk videos online - all keeping my overall research growth in mind, which is supposed to converge concisely in my thesis. I devoted considerable amount of time, thought, anxiety and finally panic on my dissertation. Now I am in a stage of actually working on the dissertation dread and getting the actual thesis out of the mess.

Yes! That's a very important thing. My thesis is there, somewhere at the back of my mind, hear soul, knowledge, library, internet and ofcourse, my supervisor. I now realized that I need to cultivate it.

I'm in this phase where I am writing publications parallel to my thesis. I am reading a lot and thinking even in my shower or while driving (well, not that I suggest that to anyone). I will be posting more often here, as I ride this tide.

Tuesday, June 21, 2011

Analyzed the data files that I've mentioned about in the previous post. Turns out that Machine Learning is a novel and effective choice for Sybil attack detection in VANETs. Only 10% of the nodes with varying support levels were varied. Details of this work will be soon published as a part of my VANET security survey journal and probably be discussed also in the Sybil Attack Detection Conference paper. Was a good learning experience with Weka for about a week.
Our basic assumption was that the nodes use up all the possible fake IDs it has. For example, if you are a moving vehicle with 10 IDs V1....V10 (and your original ID is V0) that you have fabricated, you are posing as V0, V1,....V10 simultaneously. So if we keep confidence level 1 and perform the analysis, we were able to detect all Sybil nodes without any false positives!!! yayyyy!!!!! that's so exciting and we had our day - but next morning (in this case a couple of weeks later) after couple of cups of coffee (read couple of other brain-storms on independent research issues) we figured out, that's not-only-dumb-but-meaningless assumption. Why would anybody use up all the aces (fake IDs) and shout out loud "look I'm the mischiefer.....catch meeee".....So we started figuring out ways to deal with probabilistic distribution a malicious node might follow to use up fake IDs. That's my Friday night companion tonight........let's see......

Monday, June 6, 2011

I got a bunch of data files couple of days back. The data is collected from a simulator processed with real traces. Details of the simulator will be updated shortly after I get to talk to my fellow labmate whose project has been assigned to me. I am pretty excited with the data as it looks pretty huge and I am not a data-mining person. 
The data is about vehicle traces. Vehicles' connections and IDs are listed over time instants. I need to now analyze this data to find the outlier vehicles faking IDs which will help detect sybil attack. Reading from platoon dispersion in urban areas, this sounds like an interesting technique. Will post the progress and results time-to-time once I get started with the analysis on Weka.