Polynomial Time Code For 3-SAT Released, P==NP
An anonymous reader writes "Vladimir Romanov has released what he claims is a polynomial-time algorithm for solving 3-SAT. Because 3-SAT is NP-complete, this would imply that P==NP. While there's still good reason to be skeptical that this is, in fact, true, he's made source code available and appears decidedly more serious than most of the people attempting to prove that P==NP or P!=NP. Even though this is probably wrong, just based on the sheer number of prior failures, it seems more likely to lead to new discoveries than most. Note that there are already algorithms to solve 3-SAT, including one that runs in time (4/3)^n and succeeds with high probability. Incidentally, this wouldn't necessarily imply that encryption is worthless: it may still be too slow to be practical."
Even though this is probably wrong, just based on the sheer number of prior failures ...
Okay, so I'm going to agree with you that it's probably wrong. After reading the paper once last night in a sort of sleepy state, it's certainly a novel way of massaging each 3-Sat problem into an expanded space of memory (compact triplets structures) and then reducing this to solve the problem (all within polynomial time).
So the great thing about this paper is that it's short, it's not theoretical (which is a double-edged sword)/has been implemented (in Java, no less) and it's incredibly falsifiable. I'm not intelligent enough to poke holes in his proofs for this work but people can apply the code to DIMACS formatted problems to their heart's content and if they find one that produces the wrong answer then this is falsified.
I hope we find someone capable of commenting on the proof involving the transformation of the problem from compact triplets formula to compact triplets structure and the hyperstructures presented in the paper. If this is legit, the 3-Sat problem is one that more complex problems are reduced to in order to show that said complex problems are NP-complete. And that's something that's been proved by the Cook-Levin theorem and given in the classic Computers and Intractability: A Guide to the Theory of NP-Completeness by Garey and Johnson.
Refreshingly tangible implementation, if I may say so myself!
My work here is dung.
http://en.wikipedia.org/wiki/P==NP
Damn you math geeks. Why must you come here and spew your incomprehensible formulas.
I agree. Can we have a car analogy? Or at least Natalie Portman?
Faster! Faster! Faster would be better!
I tried to look the problem up on Wikipedia, and all I got was inscrutable high-level math. From what I can gather, I seems like something that could be explained in layman's terms. Would someone be kind enough to do so?
All the experts in the field agree that P != NP
Absolutely untrue. All experts in the field that I've spoken to think that P is probably not equal to NP, but that a proof either way is going to be very hard.
I am TheRaven on Soylent News
Please turn in your geek card. This is basic CS stuff.
If you understand Turing machines and big-O notation (and if you claim to be a programmer, you should) and polynomials (and if you claim to understand big-O notation, you should):
Incidentally, this wouldn't necessarily imply that encryption is worthless: it may still be too slow to be practical.
No, it means good encryption will be much less practical. Computers will always get faster so "too slow" is not a good argument. If P != NP you can always make encryption too hard to break by increasing the key size - the cost to encrypt and decrypt only goes up polynomial with key size but cost to break it goes up exponentially, which makes it too hard even for those with supercomputers. If P = NP it means the cost to break it only goes up polynomially. This put the cost to encrypt in the same realm as the cost to break. So you can use much bigger keys but it becomes more expensive and may stop petty criminals but won't stop people with supercomputers.
And the vague reference to "encryption" in TFS is silly; there aren't any crypto algorithms in use whose security rests on P != NP.
Every symmetrical encryption algorithm in the field currently relies on the idea that the computation of the plaintext from the ciphertext and key is easily verifiable, but the computation of the key from the ciphertext is hard. Many can be analyzed if you can perform same difficult mathematics in a short time.
Every asymmetrical encryption algorithm in the field relies on the factoring problem, which is NP hard. If P==NP, then suddenly we know the factoring problem is NP easy. Further, solving one NP hard problem would effectively supply new strategies to solve other NP hard problems. QED.
Encryption relies on the theory that some shit is just hard to do. Not that we don't know how, but that from what we know it's trivially doable but takes too god damn much work that can't be done in any shorter than a huge fucking length of time even with all the resources in the world pointed at it.
Support my political activism on Patreon.
there aren't any crypto algorithms in use whose security rests on P != NP.
You mean except RSA?
Math is a big part of a CompSci degree now-a-day.
lolwut? Since when has math NOT been a big part of computer science when computer science is a branch of mathematics? You must conflate computer science with programming or software engineering.
Interesting. You claim you can guarantee that it is wrong, but you offer no proof to that effect. I am compelled to suspect, therefore, that you do don't know what it actually means to "guarantee" something.
It may very well be wrong, and it almost certainly actually is, but unless you could offer a proof to that effect, your claim of guaranteeing it to be so is wholly meaningless.
If, however, you've been holding out on us and do actually possess such a proof, then please, either present it here or post a link to it.
File under 'M' for 'Manic ranting'
NP is short for Natalie Portman, and the car analogy follows:
Adleman's chief scientist, Nickolas Chelyapov, offered this illustration: Imagine that a fussy customer walks onto a million-car auto square and gives the dealer a complicated list of criteria for the car he wants.
"First," he says, "I want it to be either a Cadillac or a convertible or red." Second, "if it is a Cadillac, then it has to have four seats or a locking gas cap." Third, "If it is a convertible, it should not be a Cadillac or it should have two seats."
The customer rattles off a list of 24 such conditions, and the salesman has to find the one car in stock that meets all the requirements. (Adleman and his team chose a problem they knew had exactly one solution.) The salesman will have to run through the customer's entire list for each of the million cars in turn -- a hopeless task unless he can move and think at superhuman speed.
This serial method is the way a digital electronic computer solves such a problem.
I like what's already posted. But here's another one:
I want to pick the lock on your car. It's one of those fancy code entry locks and I only have to press 3 buttons, but that's not really important.
Everyone has been saying that it's very, very hard (NP) to crack the code by trying combinations. Now there's a guy saying it's not quite as hard (P) and he wants everyone on the internet to check his work.
I have code for a solution to the Goldbach Conjecture, but it doesn't fit into my free storage on github....
. . .
"he's made source code available"
Since checking the algorithm requires reading the source code - I would assume he's not spreading the source code of malware, because all interested parties WILL BE TRYING TO UNDERSTAND THE SOURCECODE.
I should add: mathematicians have been saying that NP is much, much harder than P, and it has always seemed logical to say that.
But if this guy can "crack the code" (that is, solve the 3-SAT problem), he has proven that NP is not harder than P.
The debate about whether NP is harder than P has been going for a long time.
No.
Every NP-Complete problem is based off the fact that 3-SAT is NP-Complete (3-SAT was the problem used by Levin and Cook to introduce the concept of NP-Completeness). Ever since then, getting into the NP-Complete club has meant reducing 3-SAT to your problem of choice in polynomial time.
The theorem is actually fairly simple, but I can't remember it off the top of my head, and the wikipedia article doesn't help at all. Anyone care to update it?
Like you, I have no idea what the article or summary means. Unlike you, in the finest traditions of slashdot, I will have strong opinions here shortly like I have in many other subjects. Abrasive, irrefutable, and loud ones.
Well, there's spam egg sausage and spam, that's not got much spam in it.
Well there probably should be at least one refuge where computer science nerds can discuss news that matters. Unlike mainstream media the news here shouldn't have to pander to the lowest common denominator - if you don't care for this article move on to one in a field that you are interested in. If you are not a nerd at all then news for nerds may not appeal to you.
Are we expected to get a CS degree before reading Slashdot?
Yes. And a PhD before posting. Didn't you read the T&Cs?
I am TheRaven on Soylent News
what does P stand for?
Portman.
Oh wait, sorry, I was answering the comment above yours...
coding is life
I can't really comment on the validity of the claims in the article. It's unclear if he has indeed proven P==NP. I do know that this article clearly proves I am only of average or slightly sub average intelligence.
Absolutely untrue. All experts in the field that I've spoken to think that P is probably not equal to NP, but that a proof either way is going to be very hard.
Absolutely correct. The difference between say, computer science and sociology, is that computer scientists require absolute proofs. In other words, if you claim that P==NP, as this paper does, then I require you to show that it is so for all possible inputs.
The paper, in fact, does not show such a thing. To the contrary, it fails to show a sound and complete reduction of 3-SAT to hyperstructures, or CTF or CTS or whatever other acronyms were made up by the author. I'm not saying that he's wrong, simply that this is not a proof - it is only a claim. The author claims to have "proven" his algorithm is polynomial time by giving it a smattering of inputs and noting that the time the algorithm took to complete increased by a polynomial factor of the input size.
Clearly the author has not studied his algorithmic complexity texts well enough to understand the definition of Big-O. Big-O only claims that algorithmic growth is asymptotic to a given curve as the input size goes to infinity from some value n0. In other words, many algorithms may display linear growth to a point, and then become exponential after input size greater than n0. A statistical analysis will not prove anything. The author needs to do a full algorithmic analysis instead.
I predict this paper will be rapidly debunked and we will still not know if P==NP.
Government is not reason; it is not eloquent; it is force. Like fire, it is a dangerous servant and a fearful master.
While you did a good job at explaining the general relation between NP-hardness and cryptography, there are several factual errors in your message. First, there are many asymmetrical encryption algorithm that are not based on factorization: many are based on the discrete logarithm, and other hard problems are used in a few construction. Second, we don't know whether factoring is NP-hard and it is conjectured not to be NP-hard (which does not mean we think it's polynomial!).
Also, you seem to have missed the point of NP-harder or NP-completeness: if we can sole one NP-hard problem in polynomial time, then by definition this proves that P=NP and we can solve all NP problems in polynomial time. (A problem is said to be NP-complete if it is NP-hard, and it is itself in NP)
Best car analogy i can think of is:
;)
Is it easy to both plan a car trip and check that your car trip is planned well. If yes, the P=NP, if no, then P!=NP, if you cant determine either yes or no then its all wrong
I love to slaughter the english language.
And NS/. is a set as well. It is defined as the set of /.ers that do not understand sarcasm. I believe you have just proven that it is not empty.
The Internet has given stupid people the resources of intelligent people.
Best car analogy i can think of is:
;)
Is it easy to both plan a car trip and check that your car trip is planned well.
If yes, the P=NP
if no, then P!=NP
if you cant determine either yes or no, then its all wrong
I love to slaughter the english language.
Every asymmetrical encryption algorithm in the field relies on the factoring problem, which is NP hard. If P==NP, then suddenly we know the factoring problem is NP easy. Further, solving one NP hard problem would effectively supply new strategies to solve other NP hard problems. QED.
No. You're neglecting the discrete log problem which underpins Differ Hellman. There are probably other esoteric algorithms that rest on other hard problems like the knapsack problem. And I believe you also misstated the RSA assumption.
The RSA assumption is that computing the Euler phi/totient function for n=p*q where p,q are prime is HARD*. The RSA assumption is RELATED to but NOT EQUIVALENT to factoring. The relationship is that RSA can be reduced to factoring, i.e., factor n into p,q and return phi(n)=(p-1)(q-1). That's a single direction. The reverse, a reduction from factoring to RSA/totient is NOT KNOWN to exist.
So you're correct in the sense that if factoring is easy, RSA is easy. If RSA is easy, factoring may still be HARD*. Reductions in both directions would prove "necessary and sufficient/if and only if".
*HARD has a technical definition that's not necessary for this comment.
You are expect to understand this site is for nerds. If you aren't a math nerd, then move to the next article. IF you want to be pandered to, do to a different site. I'll assume something Murdoch owns would suit your ilk.
If you want to understand, ask, or take a class.
do NOT whine that you don't understand it, so it shouldn't be here.
The Kruger Dunning explains most post on
For more information about what experts think about P =? NP, check out Bill Gasarch's wonderfully entertaining poll: http://www.cs.umd.edu/~gasarch/papers/poll.pdf
I predict the same thing; however how awesome would it be it the paper is correct!
I wouldn't use the term debunked. Shown to be incorrect is better. Which is fine and expected in science. To me ;debunked; implies some sort of fraud is taking place.
The Kruger Dunning explains most post on
Next frontpage article title: "Malware Authors Target Computer Scientists with Complexity Theory"
The Internet has given stupid people the resources of intelligent people.
That's exactly right!
Please read these two blog posts about the consequences of P=NP from an expert in the field:
http://rjlipton.wordpress.com/2009/09/18/why-believe-that-pnp-is-impossible/
http://rjlipton.wordpress.com/2009/02/18/insider-baseball-and-pnp/
I won't say every asymmetrical encryption algorithm relies on the factoring problem, as there are asymmetrical algorithms which are proof against even quantum computing attacks.
It's a small world and it smells funny; I'd buy another if it wasn't for the money; Take back what I paid (SoM)
the factoring problem, which is NP hard.
Quick correction. The integer factoring problem is in NP, but is not known to be NP-hard. Here are a couple of explanations:
http://cstheory.stackexchange.com/questions/159/is-integer-factorization-an-np-complete-problem
http://en.wikipedia.org/wiki/Integer_factorization
Maybe there wasn't enough space in the margin.
Contentment is the greatest wealth
- Sukhavagga Dhammapada
Contentment is the goal behind all goals.
But now, Romanov claims that it is sufficient merely to say the mathematical equivalent of "Please" (P). Naturally, people are skeptical.
You left out the most important part. It takes lots of work to find the car, but it takes a short time to check that it's the right car once it's found. In other words, if you're lucky and always guess the right car on your first try (in other words nondeterministically), you can check that it's the right solution quickly (in polynomial time). Nondeterministic polynomial time = NP.
In 3-SAT, it takes exponential of time to find the assignment to the variables that satisfies all the conditions, but it takes polynomial time to check whether a particular assignment is correct. It takes exponential time to factor a product of two large primes, but it takes polynomial time to make sure it's the correct factorization.
What a fool believes, he sees, no wise man has the power to reason away.
Good call. You're right. It will be shown to be a false claim. I never intended to imply that the author is intentionally misleading anyone, only that his methods are not rigorous enough to prove his claim.
Government is not reason; it is not eloquent; it is force. Like fire, it is a dangerous servant and a fearful master.
NP: set of problems you can solve in polynomial time on a non-deterministic Turing Machine ...on a deterministic TM
P:
Any problem in NP can be reduced to an NP-Complete problem (clique, vertex cover, 3-SAT, etc...) in polynomial time.
So, if you have an algorithm to solve an NP-Complete (like 3-SAT) problem in p(n) on a deterministic Turing Machine then you have NP == P.
| (ceci n'est pas une pipe)
Not to get completely off the subject, but there are many perfectly understandable proofs of why 0.999... = 1. For instance, one of the things that defines what a real number is that it is not exactly the same as a different number. Seems pretty common sense, huh? So what number, exactly, comes between 0.999... and 1? Like you said, those 9s go on forever, so if there is nothing that you can add to the first term to turn it into the second, they must be the same. They are just 2 different ways of expressing the exact same number. You probably don't have a problem with the idea that 1/3 = .333..., so multiply both sides by 3 and what do you get?
There's even a wikipedia page that I'd totally paste in here if Chrome was able to do so.
-- Give me ambiguity or give me something else!
If you have a secure channel to transmit the one time pad, you could use that for the message instead and not need encryption.
Just because it CAN be done, doesn't mean it should!
P is defined as the set of decision problems that can be solved by a deterministic Turing machine in polynomial time. NP is the set of decision problems that can be solved by a non-deterministic Turing machine in polynomial time. NP-Complete problems are problems in NP such that the existence of a deterministic polynomial time algorithm to solve any one of the NP-complete problems would imply that P=NP; any NP complete problem can be reduced to any other NP complete problem in polynomial time.
Palm trees and 8
And if each car is located in a different city, then he'll have to go travelling in order to test all the criteria. Of course, he wouldn't want to end up hitting the same city twice...
WARNING! This girl exceeds the MAXIMUM SAFE standards established by the FDA for BRATTINESS
there's a 9 at the end
This is why your understanding fails. There is no end.
What is really so complicated by these simple examples:
1/3 + 1/3 + 1/3 = 3/3 = 1
And since 1/3 exactly equals 0.333... we have:
0.333... + 0.333... + 0.333... = 0.999...
And since the two sums are exactly equal, 0.999... equals 1. It's not really that magic, and your normal daily life will not be affected. It is, however, true.
c++;
In fact to the authors credit, he knows this is a big claim, so he's posting everything and saying: "Check this out". As opposed to several other "I have proof" people who when asked to show their work, say "no"
whois gawk date unzip strip find touch finger mount join nice man top fsck grep eject more yes exit umount sleep dump
Can anyone explain to me how someone would even believe this particular statement?
Sure. Think about 1 - 0.999... it gives you 0.000... = 0. You might worry about a 1 sitting out there in the "infiniteth" decimal place, but remember that you can never get there; the 1 never happens. Since 0.000... = 0 then 1 - 0.999... = 0 and 0.999... = 1. Nothing fancy.
Take a look at it through a fairly simple algebraic proof.
// decimal multiplication by 10 means we just shift to the left and the infinite decimal expansion isn't affected.
// the infinite decimal expansion is still a number and there's no reason we can't subtract it.
// if we take the difference from the above subtraction and "undo" the multiplication in step 1, we need to divide by 9 because we've just removed one of what we multiplied.
1.) 0.99999... * 10 = 9.99999...
2.) 9.99999... - 0.99999... = 9
3.) 9 / 9 = 1
Therefore 0.99999... = 1. Q.E.D.
I'm disabling ads until because I choose not to reward redesigns that are less usable than "view source".
I saw code like this when I worked on an implementation of Levenberg Marquardt that I had to migrate, on a neural network toolkit, and on an Ant Colony Optimization program I ended up optimizing. It's full of needless interfaces and classes, and it's too objectified to be understandable. Usually, I throw everything away and start from scratch.
By the way, I'll give credit where credit is due: if the algorithm is what it's stated, then let congratulations be given to them. Until then, all I see is a yucky mess.
Never send a comp-sci to do an engineer's work.
I rarely respond to comments. Also, don't ask for clarifications: a brain and Google are faster, believe me!
You should read a little bit more about complexity theory and debunk your idea that because there are easy solutions to some problems for some sizes the solutions scale.
lolwut? Since when has math NOT been a big part of computer science when computer science is a branch of mathematics? You must conflate computer science with programming or software engineering.
Math shmath. It's much more logic than math.
It is Axiomatic Mathematical Logic, a branch of Mathematics. So to say CS is "more logic than math" does not make any sense, unless you are conflating Axiomatic Mathematical Logic with Logic in the broader/philosophical sense.
Unless you count logic as part of math, but I don't.
How does it feel to stand in a does-not-compute vantage point? Seriously, any CS graduate worth its CS salt knows (or should know) that the logic piece in computer science is simply axiomatic mathematical logic and set theory.
Finite State Machines? Logic Grammars? Logic Resource Contention? Logic Composite Systems? Logic Encryption? Logic and the ability to multiply and divide numbers, which is about as "math-centered" as paying your bills.
No.
Yes. Every single example you mentioned involves theory of computation (which utilizes but it is not the same as axiomatic mathematical logic) in addition to discrete mathematics, combinatorics, axiomatic set and category theories, and graph theory. Please entertain me by telling me that the last four are not branches of mathematics.
As for encryption, it is based on number theory and abstract algebra. Fields, rings, eliptic curves, that's all way above the ability of multiplication and division, serious subjects in Mathematics proper. Seriously, where did you get your CS education from?
And if one of those cities is Konigsberg he'll never get it done...
There is something wonderful in seeing a wrong-headed majority assailed by truth. ~John Kenneth Galbraith
You do get 1 = 1, but you don't get 1 = 0.999... like you claim you do. By analogy with limits, the limit of an equation as x approaches y is not the same as the same equation evaluated at x = y.
Yes, yes it is. In fact that's the easiest way to calculate the limit if the function is defined at that point. It's just that functions that are defined at the limit you're looking for aren't particularly interesting. Limits get more interesting at asymptotes and infinity where you can't just plug in y into f(x).
Romanov's algorithm strongly resembles an algorithm from a debunked paper published around 2004.
Sergey Gubin wrote a series of similarly designed proofs around 2004. Instead of Romanov's notion of "concretization," Gubin used the term "depletion." Gubin's paper was debunked by some students at the University of Rochester.
Both reduction algorithms throw out key information about the original truth tables that cause the final solutions to be incorrect.
Constructive and exhaustive proofs that P != NP should never be trusted. I'm not a huge fan of formality in proofs, but sometimes you really need it.
In grad school we also learned P-complete problems, the equivalent of NP-complete but for the P problem set (ie can transform any P problem to a P-complete problem in polynomial time). Those were a bitch to prove.
There is also NP-Hard. Essentially NP-complete is the intersection of NP and NP-Hard.
Right, and 1 exists. QED.
There is no artifact of notation, here. 0.999... is the sum of 10^-n for n of one to infinity. The limit of that expression as n approaches infinity is 1. Since the limit exists and real numbers are defined at 1, the sum of 10^-n as n goes to infinity IS 1. Therefore, 0.999... is 1.
The 0.333... * 3 = 0.999... business is mostly just a shorthand way of making that same argument.
Actually, it's unknown whether integer factorization (into primes) is an NP problem. Although a P-time solution to an NP-complete problem class (e.g. 3-SAT) would result in a P-time solution to integer factorization, the converse (polynomial time factorization implying P=NP) isn't known to hold. (And seems unlikely to be the case given the number of complexity classes that would collapse together. (ibid.))
For a long time, it was believed that even just testing an integer for primality might require super-polynomial (equiv. sub-exponential) time, which would have made the problem of just testing a candidate factor for primality not lie in P-time. But Agrawal et al. produced a P-time primality test algorithm in 2002. This result made it less clear that integer factorization into primes was necessarily not P-time. (If it were provable that testing for primality was impossible in P-time then integer factoring is not in P-time, because otherwise an integer could be tested for primality by trying to factor it and this would either return "is prime" (i.e. the trivial factorization n = 1*n) or would return "is composite" (i.e. the nontrivial factorization n = p*q) in polynomial time.) So a P-time primality test made it less clear which time complexity class integer factorization (into primes) lived in.
In spite of this nit-picking, your basic idea is right. :-)
Why not create your own incomprehensible CS paper?
http://pdos.csail.mit.edu/scigen/
There's no -1 for "I don't get it."
The people who think there's a non-zero "digit" after 0.0000.... need to be given the example of 12/99 = 0.1212121212... what do they think the number "ends" with, 1 or 2? Either their heads will explode trying to figure out what 0.1212121212.... ends with, or they will realize that such decimal strings do _not_ end.
Duh. There's obviously a 5 that can be added at the end of all those infinite 9s, which makes that number halfway between 0.999~ and 1.
If you can't convince them, convict them.
Blizzard once posted a pretty good, understandable explanation.
let x = 0.999~ (repeating)
then, 10x = 9.999~ (repeating)
thus, 10x -x = 9x = 9.999~ - 0.999~ = 9.
9x = 9, so 9x / 9 = x
9/9 = 1
x = 1, so 0.999~ = 1.
If you can't convince them, convict them.
um, no. 0.333... is the decimal expansion of 1/3. It just has a clumsy decimal (base-10) expansion. The ternary (base 3) expansion is quite simple: 0.1.
Or IS it that simple:
I thought the ternary expansion of decimal 1/3 was (base 3) 0.1000....
Next you're going to tell me that (base 3) 0.1 == (base 3) 0.1000....
[/silliness]
Let me try to address your questions in a manner that is not disrespectful.
1) The assertion that 0.999... = 1 is not equivalent to or in any way related to assertions like 0.888... = 1, which are false (why? there exists a real number between 0.888... and 1, take 0.9 for example). However, you could think of it as being related to the assertion that 0.888... = 8/9.
2) Yes, the assertion has everything to do with the infinite number of repeating digits. For comparison, the assertion that 0.999...9 = 1, where there is a finite number of 9s, is false, no matter how large that number of 9s is.
3) There are many explanations behind this infinite nature. One of the basic ones is that 0.999... is actually representing a series (infinite sum), in this case a geometric series of the form 0.9 * (0.1^0 + 0.1^1 + 0.1^2 + 0.1^3 + ...). The sum of a geometric series with ratio r is 1/(1-r), and so the sum of the series is 0.9 * 1/(1-0.1) = 0.9 * 1/0.9 = 1. I've seen some other, more elegant explanations offered here and elsewhere, but this explanation is sound and requires only knowledge of calculus (the proof of the summation formula requires limits).
4) There is no "property" that enables this assertion. Instead, this claim arises because of the disparity between the representation of numbers and the numbers themselves. Within the real numbers, 0.999... and 1 are not distinct. They appear distinct because of the decimal representation (and indeed, a representation in any base exhibits the same characteristic). This is true for all rational numbers when represented as decimals, e.g. 0.4999... = 0.5 or 0.888... = 8/9 from above.
You made an error in your third line:
.5 * 10 = 5 .5 = 4.5 = 9 * .5
5 -
4.5 / 9 = 0.5
0.5 = 0.5. QED.
On such an epic journey he'd no doubt decide to document the experience by creating a map of all the cities he'd visited. To make it more appealing, he'd probably want to colour in the cities. Of course, it would look odd if two adjacent cities had the same colour...
One of the first things I learned is that 0.333... (as an example) is an approximation of 1/3. A fraction such as 1/3 cannot be 100% accurately represented in a decimal system.
This is incorrect, and is apparently the source of most of your confusion. 1/3 = 0.333...; there's no approximation going on. 1/3 is approximated by 0.3, and 0.33, and 0.333, but the infinite decimal is *not* an approximation.
The problem here is that people are generally very ill-equipped to handle the idea of infinity, and a lot of common sense doesn't really work. You can't "tack another 5 on the end" of 0.999... to get a number halfway between 0.999... and 1, as some other poster commented, precisely because there is no end for it to be tacked onto. This is why it's ultimately equal to 1.0.
The ringing of the division bell has begun... -PF
...and because his crayons are different sizes, he wants to pack them into the smallest possible volume of his crayon-carrying knapsack.