A question: Is 200,000 element array worth sorting and search?

M

mike-yue

The topic comes from a question:

Would you rather wait for the results of a quicksort, a linear search,
or a bubble sort on a 200000 element array?
1> Quicksort
2> Linear Search
3> Bubble Sort

The answer is 2> Linear Search

Could someone explain why Linear Search, not the other two options?
Or I misunderstood the original question?

Thanks you guys!
 
J

James Harris

The topic comes from a question:

Would you rather wait for the results of a quicksort, a linear search,
or a bubble sort on a 200000 element array?
1> Quicksort
2> Linear Search
3> Bubble Sort

The answer is 2> Linear Search

Could someone explain why Linear Search, not the other two options?

Well, it's a poor question: asking what /you/ would prefer to do; but
presuming you want to wait as little time as possible wouldn't option
2 finish soonest? The fact that sorting and searching accomplish
different things also seems to be there to confuse.

You might be better asking questions on programming (i.e. not on C) in
comp.programming.

--
 
P

Peter Nilsson

mike-yue said:
The topic comes from a question:

Would you rather wait for the results of a quicksort, a linear
search, or a bubble sort on a 200000 element array?
1> Quicksort
2> Linear Search
3> Bubble Sort

The answer is 2> Linear Search

Could someone explain why Linear Search, not the other two options?
Or I misunderstood the original question?

Given that 1 and 3 are sorts, and 2 is a search, and given that it's
far from clear what 'result' you're supposedly waiting for, I'd say
you have misunderstood, or you've mis-remembered it.

In any case, this is a general programming question, not a question
on the C language.
 
M

mike-yue

All very good answers. many thanks for you guys,
In a word, the Liner Search is the cheapest method to search. the
other two are complicated and expensive.

I know it is about algorithmic complexity, but I totally forget the
defination of the O, even the Log. University time seems a century ago
I almost forget everything.

I think it is useless for 99% programmer jobs, unfortunately it's
always been asked. Once a interviewer asked me to explain the
algorithmic complexity of quick sort!


Thanks again
 
C

Charlton Wilbur

my> The topic comes from a question: Would you rather wait for the
my> results of a quicksort, a linear search, or a bubble sort on a
my> 200000 element array?

I myself would rather wait for the results of a bubble sort; this
means I have much more chance of my tea being ready before the result
set is.

Charlton
 
K

Keith Thompson

mike-yue said:
All very good answers. many thanks for you guys,
In a word, the Liner Search is the cheapest method to search. the
other two are complicated and expensive.

Please quote some context when you post a followup.

The missing context is the question in your original article:

| Would you rather wait for the results of a quicksort, a linear search,
| or a bubble sort on a 200000 element array?
| 1> Quicksort
| 2> Linear Search
| 3> Bubble Sort

but neither Quicksort nor Bubblesort is a searching algorithm. Since
they do entirely different things, asking which one you'd rather wait
for doesn't make a whole lot of sense.
I know it is about algorithmic complexity, but I totally forget the
defination of the O, even the Log. University time seems a century ago
I almost forget everything.

I think it is useless for 99% programmer jobs, unfortunately it's
always been asked. Once a interviewer asked me to explain the
algorithmic complexity of quick sort!

And this was a problem? That's certainly something I'd expect any
good programmer to know. If you're going to be writing code that does
sorting and searching, and you don't know this stuff, there's an
excellent chance your code is going to be unacceptable slow.

(Quicksort is O(N log N) best case and average case; a straightforward
implementation is O(N**2) worst case, but it can be made O(N log N)
with a little tweaking.)
 
I

Ian Collins

Richard said:
mike-yue said:


Whilst your claim is true, it is meaningless. Linear search is a search
technique. The other two are sorting techniques. It's tempting to say that
you're comparing apples with oranges, but it's more like comparing apples
with October.


That's only true because 99% of programming jobs don't actually require
very much programming skill.
Or in my case, 99% of programming has been making hardware or web pages
tick, without a bit O in sight!
 
C

Chris Torek

CBFalconer said:
Rookie error...
if (a == item) break;
}
if ((i <= 200000) && (a == item)) return i;

...repeated.

Given the idea that the array has exactly 200000 elements, anyway.
In reality the "occupied size" would presumably be a variable.

In any case, this misses out on a handy trick that can be used when
the array has enough room. When a[] is the array to be searched and
n is "occupied size", if a[n] can be overwritten, one can use:

a[n] = item;
for (i = 0; a != item; i++)
continue;

This removes one test (i < n) from the loop, and yet is guaranteed
to terminate the loop. Then one need only apply the "i < n" test
afterward.

(Also, even with the "i < n" test in the loop, there is no need to
re-test a==item afterward.)

In reality, the original question is not very well formed, for
reasons that others have touched on. If the options include "sorting
the array", one has to consider how often the searches will happen
compared to the sort, and whether modifications to the array can
be done in ways that maintain the sorted order. If the array *is*
sorted, we can use binary or even interpolative searches rather
than linear searches. (Binary search is O(log n) and interpolative
search is O(log log n), in the mythical average case at least.)
 
K

Keith Thompson

CBFalconer said:
Richard said:
CBFalconer said:

It's a poor question. Quicksort is O(nLOGn), Linear search is
O(n), and bubble sort is O(n*n), where n is the size of the array,
here 200000. However linear searching doesn't require sorting, it
only requires examining each member of the original array for
equality. Since you get the linear answer quickest, and don't need
the array sorted, that is the optimum answer. The code is also the
simplest:

for (i = 0; i <= 200000; i++) {

Rookie error...
if (a == item) break;
}
if ((i <= 200000) && (a == item)) return i;


...repeated.


You didn't think. This was deliberate, since as I read it the
original asked for an array that could hold a[200000].

[...]

I'm curious how you inferred that from

| Would you rather wait for the results of a quicksort, a linear
| search, or a bubble sort on a 200000 element array?

There was no implication that a[200000] had to be valid.
 
A

Antoninus Twink

mike-yue said:


Whilst your claim is true, it is meaningless. Linear search is a search
technique. The other two are sorting techniques. It's tempting to say that
you're comparing apples with oranges, but it's more like comparing apples
with October.

I think it's pretty obvious to anyone who isn't so literal-minded that
he stops with a syntax error at the first place where most humans would
be happy to read between the lines that implicit in the question is:
would you rather linearly search a list, or first sort it and then
perform a binary search?

To which the answer depends primarily on *how many* searches you're
going to perform.
 
J

James Harris

....


And this was a problem? That's certainly something I'd expect any
good programmer to know. If you're going to be writing code that does
sorting and searching, and you don't know this stuff, there's an
excellent chance your code is going to be unacceptable slow.

(Quicksort is O(N log N) best case and average case; a straightforward
implementation is O(N**2) worst case, but it can be made O(N log N)
with a little tweaking.)

It's not difficult to /state/ the complexity of quicksort (assuming
one remembers it) but it is another thing to /explain/ it.

--
 
M

mike-yue

Please quote some context when you post a followup.

The missing context is the question in your original article:

| Would you rather wait for the results of a quicksort, a linear search,
| or a bubble sort on a 200000 element array?
| 1> Quicksort
| 2> Linear Search
| 3> Bubble Sort

There is no missing context. The question is exactly the original
question, no more no less.
but neither Quicksort nor Bubblesort is a searching algorithm.  Since
they do entirely different things, asking which one you'd rather wait
for doesn't make a whole lot of sense.



And this was a problem?  That's certainly something I'd expect any
good programmer to know.  If you're going to be writing code that does
sorting and searching, and you don't know this stuff, there's an
excellent chance your code is going to be unacceptable slow.

Seems I need pick up my old textbook again
 
M

mike-yue

It's not difficult to /state/ the complexity of quicksort (assuming
one remembers it) but it is another thing to /explain/ it.

--

agree with you. it is more difficult to explain if you learned the
theory in other language, e.g. in Chinese.
I was wondering if it is a easy thing to explain algorithmic
complexity for a programmer whose mother language is English(excluding
the geeks who are crazy about algorithmic).
 
M

mike-yue

CBFalconer said:
     if (a == item) break;
  }
  if ((i <= 200000) && (a == item)) return i;
  else        /* failure */            return -1;


why not

   if(a) for (i = 0;  i<=200000; ++i)
                    {if (a == item)  return   i;}
   else  return   -1;


Don't you think:
for (i = 0; i<200000; ++i)
if the condition i<=200000, the array will overflow.
 
K

Keith Thompson

mike-yue said:
There is no missing context. The question is exactly the original
question, no more no less.

Yes, and since you didn't quote it in your followup *that's* the
missing context.

Since you use Google Groups, you need to be aware that most of us
don't use a web-based interface to read Usenet. The article to which
you're replying may not be readily visible to someone reading your
followup; it might not be available at all. Because of this, you need
to provide enough context so that your followup makes sense on its
own. (But it's rarely necessary or appropriate to quote the *entire*
article.)

Once upon a time, Google Groups had a serious bug that made it
difficult to provide any context when posting a followup. Chris
F.A. Johnson put together a web page explaining how and why to work
around this bug. The bug was fixed some time ago, but the web page
and the ones it links to are still useful, particularly the links
under "Quoting".

<http://cfaj.freeshell.org/google/>
 
M

mike-yue

Yes, and since you didn't quote it in your followup *that's* the
missing context.

Since you use Google Groups, you need to be aware that most of us
don't use a web-based interface to read Usenet.  The article to which
you're replying may not be readily visible to someone reading your
followup; it might not be available at all.  Because of this, you need
to provide enough context so that your followup makes sense on its
own.  (But it's rarely necessary or appropriate to quote the *entire*
article.)

Once upon a time, Google Groups had a serious bug that made it
difficult to provide any context when posting a followup.  Chris
F.A. Johnson put together a web page explaining how and why to work
around this bug.  The bug was fixed some time ago, but the web page
and the ones it links to are still useful, particularly the links
under "Quoting".

<http://cfaj.freeshell.org/google/>

--
Keith Thompson (The_Other_Keith) <[email protected]>
Nokia
"We must do something.  This is something.  Therefore, we must do this.."
    -- Antony Jay and Jonathan Lynn, "Yes Minister"- Hide quoted text -

- Show quoted text -

glad to know the correct method to use google group.
I don't use google group very often, so sorry for that.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,744
Messages
2,569,483
Members
44,902
Latest member
Elena68X5

Latest Threads

Top