Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. Algorithms
  4. Big Oh Computation

Big Oh Computation

Scheduled Pinned Locked Moved Algorithms
question
20 Posts 6 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • J Jason Lepack LeppyR64

    So as you can see now. When you nest loops you multiply the complexity. When you have loops side by side, you add.

    I Offline
    I Offline
    Ian Uy
    wrote on last edited by
    #9

    When you say we add, that means N+N+N or simply 3N. Correct me if I'm wrong but there is no such thing as O(3N) but only O(N)?

    It is said that the most complex structures built by mankind are software systems. This is not generally appreciated because most people cannot see them. Maybe that's a good thing because if we saw them as buildings, we'd deem many of them unsafe.

    J 1 Reply Last reply
    0
    • I Ian Uy

      When you say we add, that means N+N+N or simply 3N. Correct me if I'm wrong but there is no such thing as O(3N) but only O(N)?

      It is said that the most complex structures built by mankind are software systems. This is not generally appreciated because most people cannot see them. Maybe that's a good thing because if we saw them as buildings, we'd deem many of them unsafe.

      J Offline
      J Offline
      Jason Lepack LeppyR64
      wrote on last edited by
      #10

      That's exactly correct, on both counts.

      1 Reply Last reply
      0
      • J Jason Lepack LeppyR64

        So as you can see now. When you nest loops you multiply the complexity. When you have loops side by side, you add.

        S Offline
        S Offline
        supercat9
        wrote on last edited by
        #11

        leppyr64 wrote:

        When you nest loops you multiply the complexity.

        If the number of iterations on an inner loop is proportional to the size of the problem, and will be the same for all iterations of the outer loop, then the complexity of the outer loop is a factor of N greater than that of the inner loop. The same will be true if the number of iterations for the inner loop will be uniformly distributed over a range, the top of which is proportional to the size of the problem. There will be occasions, however, where nested loops aren't nearly as bad as they appear because, while the worst-case time of the inner loops is proportional to the size of the problem, they will almost always execute much faster. In Shell Sort, for example, there are three nested loops. In the last iteration of the outer loop, the middle loop will execute N-1 times and the inner loop may (worst-case) execute O(N) times, but the worst-case time is far less than O(N^2).

        I 1 Reply Last reply
        0
        • S supercat9

          leppyr64 wrote:

          When you nest loops you multiply the complexity.

          If the number of iterations on an inner loop is proportional to the size of the problem, and will be the same for all iterations of the outer loop, then the complexity of the outer loop is a factor of N greater than that of the inner loop. The same will be true if the number of iterations for the inner loop will be uniformly distributed over a range, the top of which is proportional to the size of the problem. There will be occasions, however, where nested loops aren't nearly as bad as they appear because, while the worst-case time of the inner loops is proportional to the size of the problem, they will almost always execute much faster. In Shell Sort, for example, there are three nested loops. In the last iteration of the outer loop, the middle loop will execute N-1 times and the inner loop may (worst-case) execute O(N) times, but the worst-case time is far less than O(N^2).

          I Offline
          I Offline
          Ian Uy
          wrote on last edited by
          #12

          Hmmm, how about this nested loop?

          main()
          {
          List<int[]> n = new List<int[]>();

          for(int i=0;i<n.count;i++)>
          {
          	n\[i\]=new int\[100\];
          	for(int j=0;j<n\[i\].length;j++)>
          	{
          		for(int k=0;k<n\[i\].length;k++)>
          		{
          			
          		}
          	}
          }
          

          }

          Will this still be O(N^3)? The two inner loops is not proportional to the size of the problem.

          It is said that the most complex structures built by mankind are software systems. This is not generally appreciated because most people cannot see them. Maybe that's a good thing because if we saw them as buildings, we'd deem many of them unsafe.

          M 1 Reply Last reply
          0
          • I Ian Uy

            Hmmm, how about this nested loop?

            main()
            {
            List<int[]> n = new List<int[]>();

            for(int i=0;i<n.count;i++)>
            {
            	n\[i\]=new int\[100\];
            	for(int j=0;j<n\[i\].length;j++)>
            	{
            		for(int k=0;k<n\[i\].length;k++)>
            		{
            			
            		}
            	}
            }
            

            }

            Will this still be O(N^3)? The two inner loops is not proportional to the size of the problem.

            It is said that the most complex structures built by mankind are software systems. This is not generally appreciated because most people cannot see them. Maybe that's a good thing because if we saw them as buildings, we'd deem many of them unsafe.

            M Offline
            M Offline
            Mark Churchill
            wrote on last edited by
            #13

            This is when you can start talking about O(N*M^2), where M is the "usual" size of an array stuffed in the list. In reality you'd probably have some idea about how many elements are put in the arrays. Say you were storing four integers in each array, and had hundreds of these arrays in the list, you would probably refer to it as O(N), as the M is fairly insignificant. If the arrays contained n.Length items, then it would be ^3... Big-O notation is a very rough analysis, you are generally interested in the highest power. Depends on data too, some sort algorithms are worst case O(N^2), but the likely case is much gentler.

            Mark Churchill Director, Dunn & Churchill Pty Ltd Free Download: Diamond Binding: The simple, powerful, reliable, and effective data layer toolkit for Visual Studio.
            Alpha release: Entanglar: Transparant multiplayer framework for .Net games.

            I 1 Reply Last reply
            0
            • M Mark Churchill

              This is when you can start talking about O(N*M^2), where M is the "usual" size of an array stuffed in the list. In reality you'd probably have some idea about how many elements are put in the arrays. Say you were storing four integers in each array, and had hundreds of these arrays in the list, you would probably refer to it as O(N), as the M is fairly insignificant. If the arrays contained n.Length items, then it would be ^3... Big-O notation is a very rough analysis, you are generally interested in the highest power. Depends on data too, some sort algorithms are worst case O(N^2), but the likely case is much gentler.

              Mark Churchill Director, Dunn & Churchill Pty Ltd Free Download: Diamond Binding: The simple, powerful, reliable, and effective data layer toolkit for Visual Studio.
              Alpha release: Entanglar: Transparant multiplayer framework for .Net games.

              I Offline
              I Offline
              Ian Uy
              wrote on last edited by
              #14

              I see. So in the example above, if N>100, M (Integer in each array) does not really matter? But if N < M ,then it matters. So I can say that the best case is just O(N) and the worst is O(N^3)?

              It is said that the most complex structures built by mankind are software systems. This is not generally appreciated because most people cannot see them. Maybe that's a good thing because if we saw them as buildings, we'd deem many of them unsafe.

              1 Reply Last reply
              0
              • I Ian Uy

                Good Day, Given a pseudo code below: main() { for(int i=0;i<n;i++)> { x[i]=func1(func2(x[i])); } } func1(x[]) { for(int i=0;i<length(x);i++)> //Do something here } func2(x[]) { for(int i=0;i<length(x);i++)> //Do something here } How can I compute for the Asymptotic notation? I know that the loop in main() is O(n) and both func1 and func2 are O(n). But How can I combine the 3? Can I even combine the 3 to get O(N^3)? or it will be just O(3N)? Thanks! :)

                It is said that the most complex structures built by mankind are software systems. This is not generally appreciated because most people cannot see them. Maybe that's a good thing because if we saw them as buildings, we'd deem many of them unsafe.

                I Offline
                I Offline
                Ian Uy
                wrote on last edited by
                #15

                Hey Guys, don't want to start another thread so here it goes...

                for(int i=0;i<n;i++)>
                int x=1+1; //Constant Operation

                is this O(N) or O(1)? I'm just doing constant operation inside a loop.

                It is said that the most complex structures built by mankind are software systems. This is not generally appreciated because most people cannot see them. Maybe that's a good thing because if we saw them as buildings, we'd deem many of them unsafe.

                M M 2 Replies Last reply
                0
                • I Ian Uy

                  Hey Guys, don't want to start another thread so here it goes...

                  for(int i=0;i<n;i++)>
                  int x=1+1; //Constant Operation

                  is this O(N) or O(1)? I'm just doing constant operation inside a loop.

                  It is said that the most complex structures built by mankind are software systems. This is not generally appreciated because most people cannot see them. Maybe that's a good thing because if we saw them as buildings, we'd deem many of them unsafe.

                  M Offline
                  M Offline
                  Member 4194593
                  wrote on last edited by
                  #16

                  It is O(1). It has nothing to do with what is inside the loop (as long as it is not another loop dependent upon "n"), just how many times you execute the loop. In your stated case, it is linear, for each increase of n you only execute the loop one more time.

                  1 Reply Last reply
                  0
                  • I Ian Uy

                    Hey Guys, don't want to start another thread so here it goes...

                    for(int i=0;i<n;i++)>
                    int x=1+1; //Constant Operation

                    is this O(N) or O(1)? I'm just doing constant operation inside a loop.

                    It is said that the most complex structures built by mankind are software systems. This is not generally appreciated because most people cannot see them. Maybe that's a good thing because if we saw them as buildings, we'd deem many of them unsafe.

                    M Offline
                    M Offline
                    Mark Churchill
                    wrote on last edited by
                    #17

                    You are doing the constant operation N times...

                    Mark Churchill Director, Dunn & Churchill Pty Ltd Free Download: Diamond Binding: The simple, powerful, reliable, and effective data layer toolkit for Visual Studio.
                    Alpha release: Entanglar: Transparant multiplayer framework for .Net games.

                    I 1 Reply Last reply
                    0
                    • M Mark Churchill

                      You are doing the constant operation N times...

                      Mark Churchill Director, Dunn & Churchill Pty Ltd Free Download: Diamond Binding: The simple, powerful, reliable, and effective data layer toolkit for Visual Studio.
                      Alpha release: Entanglar: Transparant multiplayer framework for .Net games.

                      I Offline
                      I Offline
                      Ian Uy
                      wrote on last edited by
                      #18

                      Yeah. But it doesn't matter right? Its still O(n). It doesn't matter if the operations inside the loop is a expensive or inexpensive operation?

                      It is said that the most complex structures built by mankind are software systems. This is not generally appreciated because most people cannot see them. Maybe that's a good thing because if we saw them as buildings, we'd deem many of them unsafe.

                      M 1 Reply Last reply
                      0
                      • I Ian Uy

                        Yeah. But it doesn't matter right? Its still O(n). It doesn't matter if the operations inside the loop is a expensive or inexpensive operation?

                        It is said that the most complex structures built by mankind are software systems. This is not generally appreciated because most people cannot see them. Maybe that's a good thing because if we saw them as buildings, we'd deem many of them unsafe.

                        M Offline
                        M Offline
                        Mark Churchill
                        wrote on last edited by
                        #19

                        Yep, it doesnt matter if the execution time is trivial. The main thing is that if you double N then you double the execution time. N*10 -> 10*t, etc. In that exact case the compiler would probably optimise it to x = 2 ;)

                        Mark Churchill Director, Dunn & Churchill Pty Ltd Free Download: Diamond Binding: The simple, powerful, reliable, and effective data layer toolkit for Visual Studio.
                        Alpha release: Entanglar: Transparant multiplayer framework for .Net games.

                        1 Reply Last reply
                        0
                        • I Ian Uy

                          Good Day, Given a pseudo code below: main() { for(int i=0;i<n;i++)> { x[i]=func1(func2(x[i])); } } func1(x[]) { for(int i=0;i<length(x);i++)> //Do something here } func2(x[]) { for(int i=0;i<length(x);i++)> //Do something here } How can I compute for the Asymptotic notation? I know that the loop in main() is O(n) and both func1 and func2 are O(n). But How can I combine the 3? Can I even combine the 3 to get O(N^3)? or it will be just O(3N)? Thanks! :)

                          It is said that the most complex structures built by mankind are software systems. This is not generally appreciated because most people cannot see them. Maybe that's a good thing because if we saw them as buildings, we'd deem many of them unsafe.

                          S Offline
                          S Offline
                          sableng
                          wrote on last edited by
                          #20

                          i think it's just O(n). see http://pages.cs.wisc.edu/~vernon/cs367/notes/3.COMPLEXITY.html[^]

                          1 Reply Last reply
                          0
                          Reply
                          • Reply as topic
                          Log in to reply
                          • Oldest to Newest
                          • Newest to Oldest
                          • Most Votes


                          • Login

                          • Don't have an account? Register

                          • Login or register to search.
                          • First post
                            Last post
                          0
                          • Categories
                          • Recent
                          • Tags
                          • Popular
                          • World
                          • Users
                          • Groups