beoba | 15 years ago | on: What's Wrong with Meritocracy
beoba's comments
beoba | 15 years ago | on: What's Wrong with Meritocracy
beoba | 15 years ago | on: Index Funds Considered Harmful (Possibly Evil)
In other news, Buggy Whip Owner Considers Cars Harmful (Possibly Evil).
beoba | 15 years ago | on: Eth0 no more?
beoba | 15 years ago | on: The Boxee Box Experience Now: Netflix, Vudu HD and Lots More Refinement
Does anyone know of a way to just turn this off entirely? I already have things organized by directory/filename. From what I can tell, the current 'solution' is to manually go through each file and fix whatever stupid information was auto-detected. Which is backwards, because if someone's anal enough to deal with that, they've likely already got things meticulously organized how they want by directory/filename, so why not just go by that directly?
I get the strong impression that they didn't really make local media playback a priority.
beoba | 15 years ago | on: Windows Phone Marketplace bans the GPL, and the App Store should too
They could work out a process for developers who want to contribute GPLed apps, but they've decided not to.
beoba | 15 years ago | on: Typical programming interview questions.
Let's say you've got two lists, named "A" and "B", which each have 1000 integers. You want to return a list of unique integers which are present in both lists (ie the intersection of two lists). These 'lists' could be arrays or linked lists.
The brute force method would be something like this:
Out = []
for a in A:
for b in B:
if a == b and !Out.contains(b)://O(n) list search
Out.append(b)
return Out
But this can be very slow, because you can end up in the territory of O(n^3) iterations across A, B, and Out (internally the language would generally be iterating across Out in order to complete that 'contains' call). In this specific example, that works out to be something along the lines of 1000x1000x1000 = 1000000000 iterations, vastly larger than the size of the original lists.---
A better way is to sort one or both of the lists then do the comparisons along each of them (this syntax assumes the lists are specifically arrays, but it'd effectively be the same for linked lists):
Out = []
sort(A)
sort(B)
b = 0
for a in xrange(len(A)):
vala = A[a]
valb = B[b]
if vala == valb:
Out.append(vala)
++a
++b
elif vala < valb:
++a
else://vala > valb
++b
return Out
This is definitely better than the above example. Now we're performing two sorts, each O(n log n), then we're doing a linear iteration across both of those lists in parallel, each O(n). So now we end up with an overall complexity of O(n log n) as a result of those initial sorts. Let's estimate the total number of iterations to be around, I dunno, 10000(sort)+2000(iterate/compare) = 12000? The exact number of comparisons in a sort can vary by algorithm used and how things were ordered in the lists to begin with.Not bad, definitely better than what we were doing before. But we might be able to go a little better...
---
Yet another way is to use some hash sets, which (generally) have O(1) insertions and retrievals, and only store unique values, such that if you insert the same value twice, the second insertion is effectively ignored. We can do something like this:
Out_set = set([])
A_set = set([a in A])
for b in B:
if A_set.contains(b)://O(1) set search
Out_set.append(b)
return list(Out_set)//optional, could return Out_set
Now we end up with an algorithm which is O(n), where we iterated over the items in A once to fill in A_set, then we iterated over the items in B once, and each "contains" call was an O(1) hash lookup inside of A_set. Then finally we iterated over Out_set once to create the output list. This final step is optional, we could also have just returned Out_set directly, but it doesn't effect algorithmic complexity in either case. Now we've got 2000-3000 iterations, depending on how whether we return a set or a list. And this additionally looks a bit simpler than the sort+iterate version I gave above.---
So just by using our knowledge of data structures, we've turned ~1000000000 iterations into ~2000-3000 iterations. This is on the order of reducing the distance to the moon to around a kilometer. And that's just with two lists that are limited to 1000 items each.
And this sort of thing is a pretty common scenario in any language, no matter how 'abstracted' it is.
beoba | 15 years ago | on: Typical programming interview questions.
Understanding algorithmic complexity and knowing which data structure(s) to use to solve a given problem are universal skills.
beoba | 15 years ago | on: Why I don't care very much about tablets anymore
This setup rapidly turns into a series of kludges to make the thing work.
beoba | 15 years ago | on: Why I don't care very much about tablets anymore
All that's missing is a smug logo, and it'll be a hit!
(also mentioned in the article)
beoba | 15 years ago | on: Gonorrhea Acquires Piece of Human DNA
beoba | 15 years ago | on: "t-" : A less-than-minimal task list "manager"
Otherwise it's just "task add something", "task list", "task done something".
And if you do find yourself wanting to use those "bells and whistles", they're just a man page away.
beoba | 15 years ago | on: Google is a surveillance company
"BlackHat Europe 2010 - Changing Threats To Privacy From TIA to Google"
beoba | 15 years ago | on: "t-" : A less-than-minimal task list "manager"
beoba | 15 years ago | on: Should Employers Be Allowed to Ask for Your Facebook Login?
beoba | 15 years ago | on: Should Employers Be Allowed to Ask for Your Facebook Login?
beoba | 15 years ago | on: Should Employers Be Allowed to Ask for Your Facebook Login?
Additional nitpick: Employment statuses are generally determined at the state level.
beoba | 15 years ago | on: Should Employers Be Allowed to Ask for Your Facebook Login?
I think a good solution to this situation is to in turn request the screener/interviewer's credentials. After all, it's no big deal right?
beoba | 15 years ago | on: Why I do my resume in LaTeX
beoba | 15 years ago | on: Why I do my resume in LaTeX
Arbitrary illustrative excerpt:
Whether American or Chinese, individuals who focus too much on ‘achievement,’ and who believe the illusion that they’ve achieved everything simply through their own honest hard work, often think very little of everyone else as a result.