title: BIG O In absence of enough information
body: <p>So, lets say you have a function, <code>X(N)</code> that is a total black box. You don't know the growth rate of the function, you can't look it up, and you can't view the source (at the moment).</p>
  
  <p>Next lets examine it in the context of another function</p>
  
  <pre><code>for(int i = 0; i &lt; N; ++i)
      X(N);
  </code></pre>
  
  <p>The code that you wrote is linear, yet clearly the function <code>X</code> has an impact of the growth rate of <em>your</em> function. 
  If, for example, <code>X(N)</code> expands into <code>for(int i = 0; i &lt; N; ++i)</code> your function is quadratic.</p>
  
  <p><strong>My question is this:</strong> If someone is asking what the Big O of your function is, what is the best way to describe the growth rate of your function?</p>
  
  <p>I said I would call this linear, and the defense of my answer is the following.</p>
  
  <p>If you knew the actual growth rate of <code>X</code>, you can give an accurate estimation of your code, yet while you can (in one way or another) get the code eventually, most functions don't come with performance statistics.</p>
  
  <p>So if you did get access to the code of <code>X</code>, you could include it in your estimation, but where do you draw the line? <code>X</code> likely also calls other functions, which then call other functions. I feel that outside of manufactured  scenarios where you are dealing with perfectly compartmentalized code, if you don't already know the growth rates of the black box functions being called you have to decide to estimate the code that you can.</p>