The Big Programming Thread - Page 340
| Forum Index > General Forum |
Thread Rules 1. This is not a "do my homework for me" thread. If you have specific questions, ask, but don't post an assignment or homework problem and expect an exact solution. 2. No recruiting for your cockamamie projects (you won't replace facebook with 3 dudes you found on the internet and $20) 3. If you can't articulate why a language is bad, don't start slinging shit about it. Just remember that nothing is worse than making CSS IE6 compatible. 4. Use [code] tags to format code blocks. | ||
|
CecilSunkure
United States2829 Posts
| ||
|
ZenithM
France15952 Posts
And I raise my glass to some temporal model checking algorithm I saw in class like a year ago. Mofo had a complexity in towers of exponential, couldn't get him to end from N=3 on, or something. Computer science. It works. | ||
|
Blisse
Canada3710 Posts
Then someone used big-O and we went way off the end. ^^ As it stands my point still holds - it's a bit more convoluted to do it the second way, but it makes a lot of sense intuitively, and has a decent performance benefit to switching over. | ||
|
one-one-one
Sweden551 Posts
On August 11 2013 09:14 ZenithM wrote: For most cases where you would see hard-coded bounds in code though, I feel like you would need to tell the programmer about variables first, and confuse his poor mind with Big O notations second :D. Yeah. In real projects you rarely see "textbook examples" of a known complexity class. In reality the situation is way more complex. To do it properly you have to consider the complexity of any data structure you use and any function you call in your algorithm. And as I pointed out before, big O notation is all about asymptotical behavior, which might be completely irrelevant anyways. | ||
|
3FFA
United States3931 Posts
| ||
|
Shield
Bulgaria4824 Posts
| ||
|
DeltaX
United States287 Posts
I also am trying to only talk about computer science and not programming in general here. | ||
|
tec27
United States3702 Posts
On August 11 2013 09:19 Blisse wrote: .. the original argument was simply that removing the overhead on the loop made the code look more awkward because instead of (0,1), (0,2) ... (10,1), (10,2).... you would see like (0,1) (1,0), (0,2), (2,0) which sacrifices easy readability and more modular code for something that didn't really make sense to optimize for, especially since there were no issues in the first place. Then someone used big-O and we went way off the end. ^^ As it stands my point still holds - it's a bit more convoluted to do it the second way, but it makes a lot of sense intuitively, and has a decent performance benefit to switching over. Its convoluted and there's absolutely zero point to ever doing it. The compiler can unroll loops just fine on its own, I'm not sure why you would want to half-unroll it. Not to mention that it was already said that the application wasn't time critical. In such situations, clearer code should *always* be preferred. | ||
|
phar
United States1080 Posts
On August 11 2013 10:02 darkness wrote: Situations like this make me think Computer Science isn't ready to be considered science yet. I may be wrong though, it just feels to me CS isn't hardcore science because lots of things can be interpreted as you like. There is real computer science. That's mostly restricted to academia. Most people who study computer science in school end up doing software engineering/dev, not computer science. | ||
|
nunez
Norway4003 Posts
On August 11 2013 09:06 Morfildur wrote: Oh my god, what have i started. Does it really matter? Let's just agree that it's O(N) with N being 1 and both sides are right. 1-1-1 is right, the rest is wrong. your algorithm does not have a variable, n, just because it has some hard coded loop in it... | ||
|
One Student
73 Posts
http://www.amazon.com/gp/product/1600490069 I wonder if anyone here has any advice on how to deal with this. Another problem is no one at my company has a lot of experience with this, I think it's their first time with machine learning and data modeling. | ||
|
Kambing
United States1176 Posts
On August 11 2013 12:16 phar wrote: There is real computer science. That's mostly restricted to academia. Most people who study computer science in school end up doing software engineering/dev, not computer science. Virtually all software developers employ computer science skills on some level whether it be deep specializations in machine learning, algorithms, etc. or broadly exercising computational thinking skills. "Real" computer science is vaguely defined because the field is so damn big. Some people practice pure theory that resembles mathematics more than a science. Others treat computers and software systems as physical phenomena, amendable to experimentation and explorative reason (e.g., hardware folk, practice-oriented security researchers). | ||
|
Kambing
United States1176 Posts
On August 11 2013 14:08 One Student wrote: I just graduated with BS in CS and started working with a company. Thing is they threw me in the deep end and expect a lot from me because of my gpa. My colleagues who have been working on the project for months are cashing in their days off and are leaving for a month or two. We have a deadline in two months and I got stuck with everything. Basically we are working on machine learning/data mining to come up with a model to predict the failure of a particular device in the field. I have no idea how to go on about this as the only thing close I took in college was AI and Fundamental Statistics. Because of the tight deadline I'm not sure if I should read this book: http://www.amazon.com/gp/product/1600490069 I wonder if anyone here has any advice on how to deal with this. Another problem is no one at my company has a lot of experience with this, I think it's their first time with machine learning and data modeling. Good luck with that. Machine learning is difficult but rewarding. You can also try Andrew Ng's course on coursera: https://www.coursera.org/course/ml You might find the content there more digestible than what the book offers (in addition to references to other top-notch resources). | ||
|
ZenithM
France15952 Posts
On August 11 2013 10:02 darkness wrote: Situations like this make me think Computer Science isn't ready to be considered science yet. I may be wrong though, it just feels to me CS isn't hardcore science because lots of things can be interpreted as you like. Don't worry, CS is a science alright. You just don't see it on Teamliquid. | ||
|
spinesheath
Germany8679 Posts
If N is the length/height of the image, it's O(N^2), if N is the number of pixels, it's O(N), and if we assume a fixed image size it's O(1). Saying something is O(f(N)) without specifying N is nonsense anyways. You usually can't omit it "because it's obvious" because there are many possible interpretations (as shown above). | ||
|
one-one-one
Sweden551 Posts
On August 11 2013 19:17 spinesheath wrote: How about we just make everyone happy and actually specify what N is whenever we write O(f(N))? If N is the length/height of the image, it's O(N^2), if N is the number of pixels, it's O(N), and if we assume a fixed image size it's O(1). Saying something is O(f(N)) without specifying N is nonsense anyways. You usually can't omit it "because it's obvious" because there are many possible interpretations (as shown above). Yeah. It is also important to not bring up asymptotic complexity when uncalled for. This is a programming thread. In most cases you care about raw performance. To express yourself in more fine grained terms you might use execution time, number of instructions, etc. which might be depend on one or more variable quantities. When saying that something is O(n) or O(n log n), or whatever, you have most certainly made a number of idealizations that don't reflect how a modern computer actually works. So instead of worrying about theoretical complexity you should focus on writing simple, reasonable code with good cache access patterns. Or in the words of Linus Torvalds: https://lkml.org/lkml/2008/5/7/456 | ||
|
Abominous
Croatia1625 Posts
On August 11 2013 14:08 One Student wrote: I just graduated with BS in CS and started working with a company. Thing is they threw me in the deep end and expect a lot from me because of my gpa. My colleagues who have been working on the project for months are cashing in their days off and are leaving for a month or two. We have a deadline in two months and I got stuck with everything. Basically we are working on machine learning/data mining to come up with a model to predict the failure of a particular device in the field. I have no idea how to go on about this as the only thing close I took in college was AI and Fundamental Statistics. Because of the tight deadline I'm not sure if I should read this book: http://www.amazon.com/gp/product/1600490069 I wonder if anyone here has any advice on how to deal with this. Another problem is no one at my company has a lot of experience with this, I think it's their first time with machine learning and data modeling. My friend is in Machine Learning and he bought that book. He says he's satisfied with it however he says it does not come close to Yaser's lectures. I think he has them on youtube, the entire course and he used to give certificates of completion, not anymore I think. Also as someone suggested Ng's course on coursera is very helpful too. The thing is, they teach you mostly basics with easy implementation(At least the Ng's course). I think that real life implementation is a bit harder but a lot of people skip the basics and look ridiculous to experts then. I'm not sure how much help will they provide you with that certain project (versus the time invested) but they will educate you really, really well and you can't put a pricetag on good education. (In his course, Ng keeps repeating that people in Silicon Valley implement lots of learning techniques wrong and that by completion of his course you'd probably know more Machine Learning than most of the "experts" in Silicon Valley. Don't kid yourself, I think he's just being nice and trying to encourage you But I do think a lot of machine learning techniques are implemented in a wrong way due to poor understanding of the field itself.) | ||
|
Blisse
Canada3710 Posts
On August 11 2013 11:47 tec27 wrote: Its convoluted and there's absolutely zero point to ever doing it. The compiler can unroll loops just fine on its own, I'm not sure why you would want to half-unroll it. Not to mention that it was already said that the application wasn't time critical. In such situations, clearer code should *always* be preferred. It's not that convoluted to do half the iterations where on each iteration you two twice the actions and flip the x and y? Then again, the grid doesn't seem to be a square, so I'm not certain it works this way, and I can't tell if it even works properly, which is the biggest problem with writing like that I guess. Wait actually, I don't think that even offers any benefit. Hah you're right, yeah it doesn't. Statements retracted. | ||
|
obesechicken13
United States10467 Posts
Basically I have a config file that looks like this: cat1 Eventually I'll consider putting this in a db, though if I want the program I'm making to be shareable I may keep it like this since not everyone has MySQL installed on their machines. I read the program in line by line, and right now I want a way to manipulate the contents of the config file. Obviously, while I'm the only one using the program, I can edit the config file by hand and restart the app. But in the future if I want to share it, it'd be nice to give people a gui to edit and use the file dynamically. ![]() I'm just not sure if this is the best approach. Maybe there's a simpler solution? Maybe Linked lists fail to address a performance issue? | ||
|
Deleted User 101379
4849 Posts
On August 12 2013 00:51 obesechicken13 wrote: I need some help deciding whether to use a linked list or a dynamic array (or some other data structure). Basically I have a config file that looks like this: cat1 + Show Spoiler + Eventually I'll consider putting this in a db, though if I want the program I'm making to be shareable I may keep it like this since not everyone has MySQL installed on their machines. I read the program in line by line, and right now I want a way to manipulate the contents of the config file. Obviously, while I'm the only one using the program, I can edit the config file by hand and restart the app. But in the future if I want to share it, it'd be nice to give people a gui to edit and use the file dynamically. ![]() I'm just not sure if this is the best approach. Maybe there's a simpler solution? Maybe Linked lists fail to address a performance issue? How many items are in the config file? The correct answer is most likely: It does not matter, just pick the easy solution. I usually go with a Dictionary/Associative array of arrays, e.g. (C#) "Dictionary<String, List<String>>" or something similar. | ||
| ||
But I do think a lot of machine learning techniques are implemented in a wrong way due to poor understanding of the field itself.)![[image loading]](http://i.imgur.com/ByGyUlY.png)