27 December, 2012

Some Basic Mathematical And Computer Stuff To Keep On Finger Tips

In How Many Number Of Ways n People Can Sit On r Chairs

Case 1: When n = r i.e. when number of people equals number of chairs


n!

At start all chairs are empty, so any of the n people can choose to sit on that first chair. So there are n possibilities for the first chair. For the second chair, n-1 people are left, so probability for the second chair is n-1. The probability for the first two chairs taken together is n * (n-1), its because any arrangement of the first chair can be combined with any arrangement of the second chair.

Its like if a room has two sets of doors, one to enter and one to exit, for example at opposite sides of wall, and in the first set there are 5 doors and in the second set there are 7 doors then altogether there are 35 combinations of entry-exit. You can enter from the first door and exit from any of the 7 exit doors, and you can enter from the second door and exit from any of the 7 exit doors, so 7 + 7 = 14 combinations so far. Accounting for the rest of the 3 entry doors you have a total of 7 + 7 + 7 + 7 + 7 = 35 combinations of entry-exit.

So, uptil now we have covered two chairs and the number of combination is (n) * (n-1). For the third chair the number of combinations is n-2 and for the first three chairs taken together there are (n) * (n-1) * (n-3) combinations. Altogether, for all the n chairs we have n! combinations.

Case 2: When r < n i.e. some people will be left standing

n! / (n-r)!

Lets suppose we have 5 people and 2 chairs. For the first chair there can be 5 possibilities, for second chair 4 possibilities i.e.

5 x 4  = 20

We know from case 1 above that if number of people is equal to number of chairs then its 5! = 120 possibilities.

So, its n! / (n-r)! possibilities.

5! / (5-2)! = 5! / 3! = 120 / 6 = 20.

Lets try some other numbers: n = 7, r = 4.

Our naive approach gives us: 7 x 6 x 5 x 4.

The formula we derived above gives us: 7! / (7-4) ! = 7! / 3! = 7x6x5x4x3! / 3! = 7 x 6 x 5 x4. Same answer as above.

So its confirmed that our formula is correct.


How Many States Can A Machine Having n Bits Can Hold

2 to the power n.

The number 2 came from the fact that a bit can have only two states: 0 and 1.

Note that only one state can be hold by the machine at any given time. The machine can hold 2 power n unique states each at a different time.

Consider a bit, it can have only two states. Now consider two bits, the second bit can independently have two states of its own. Taking the first and second bit together, four unique states can be hold. For three bits its 2 x 2 x 2 = 8 states. For n bits its 2 power n states.

How Much Time It Takes To Sort A Binary Tree

log2 of n.

The 2 is the base of the log. n is the total number of leaves in the tree.

Suppose we have 8 elements in binary tree. In a perfect binary tree, there would be three levels of nodes / root and at the last level there would be 8 leaves. That number 3 can come from taking log2 of 8. Its because 8 = 2 power 3.

If the tree is not binary, but say have 5 branches at each level, then the base would be of 5 when taking the log.

How Much Time It Takes To Run A Nested Loop

Case 1 : The Two Iterations Are Independent Of Each Other - Simplest

m * n.

Where m is the number of iterations in the first loop, and n is the number of iterations in the second loop.

for(i=0; i    for(j=0; j         
       // do some work here

Case 2: The Second Iteration Depends On The First - Harder

m + (m-1) + (m-2) + ... 1 = sum of a geometric series of difference 1.

for(i=0; i

    for(j=i; j        
        //do some work here

Its because in the inner loop, first iteration runs m times, second (m-1) times, third (m-2) times and so on.


If m = 5, then the inner loop would run 5 + 4 + 3 + 2 + 1 = 15 times.

Its a simple geometric sum of 5 items, starting from 1 and having difference 1.

Speed Classification of Algorithms

Algorithms considered here are typically of searching and sorting.

In descending order of speed, n is input size:


  • Constant Time - O(1), O(6) etc
  • Logarithmic Time - O(log n) etc
  • Linear Time - O(n) etc
  • Polynomial Time - O(n^2), O(n^3) etc
  • Exponential Time - O(2^n), O(3^n) etc
  • Factorial Time - O(n!).
Usually execution time of algorithms is a function of input size. Above are fundamental classes of algorithms, starting from the fastest. Ofcourse there are sub-classes in between such as sub-linear O(n/2) etc.

If big O notation is O(n) then for an input size of n the algorithm requires n steps or iterations.

             n      O(1)   O(log2 n)      O(n)        O(n^2)          O(2^n)              O(n!)

             1         1        ~ 0.1              1                    1               2                       1

           10         1            3.3            10                100         1 024             362 880

         100         1            6.6           100           10 000      1 exp 30           very large

      1 000         1            9.9         1 000      1 000 000      1 exp 300         very large

    10 000         1           13.3        10 000       1 exp  8      1 exp 3000        very large

   100 000        1           16.6       100 000      1 exp 10      1 exp 30 000     very large

1 000 000        1           19.9     1 000 000     1 exp 12      1 exp 300 000    very large



Note that in computers which are bi-state (0,1) machines, both exponential functions and log functions are always of base 2.

Factorial functions are the worst performants, then come exponentials, then polynomials, then linears, then logs and finally constant time ones which are special because they always execute in same time regardless of input size.


Any algorithm that actually works on input has to be atleast logarithmic. This is theory. Practically the most efficient algorithms are usually of efficiency O(n * log n).

 For searching, the fastest algorithms are those that divide the search space in every iteration. So its divide and conquer winning again. In more parts the space is divided each time, the faster is the algorithm. Usually the space is divided in two parts only, greater and smaller and the third possibility of equality is dealed directly at which point the algorithm stops. If we can divide the space say in 5 parts each time, then the base of log becomes 5, therefore we can cover space of 10 elements in log5 (10) = 1.1 iterations. This is called binary searching and requires an already sorted binary tree to work. 

The logarithmic function came from the fact that a binary tree containing 8 leaves have to have 3 levels and log2 (8) = 3. Since in every iteration we are omitting half of the remaining tree from search space, we need only 3 iterations in worst case. 

An example of this is finding a book in a library where books are arranged by topic in corridors then cabinets then floors and then rows (assuming multiple rows one behind other at each floor of cabinet). As we move along an iteration such as decide a corridor we omit the search space of rest of the corridors and so on. So even if we have 10 corridors, 10 cabinets in each corridor, 100 floors in each cabinet, 10 rows in each floor we just have to iterate 5 times till we reach the correct row. Till this point we have used a logarithmic function of base 10. Once in the row we can do a linear search, so altogether its O(log10 (total number of books in library ) * no. of books in each row).

So, if the data structure is an already sorted binary tree, then efficiency is exactly O(log n). For a general and unsorted data structure, such as an array, we have to divide the search space in every outer loop and in inner loop we have serially search the space, so its O( n * log n).

If we have to visit each element of data structure exactly once, such as in naive approach of searching, then its O(n).

Everytime we use nested loops each of which iterate through all elements of an array, we have O(n^2). Its when there are only two loops. If there are three loops, outer most, outer and inner, then O(n^3). Examples include bubble sort, comparing shopping items list with items purchased etc.

Understanding examples of O(2^n) is complicated. Its opposite of the logarithmic function shown above. In logarithmic function we have an existing tree and we use it. In exponential algorithms we make trees, by branching of to different points in execution paths in body of function (on basis of different conditions) as long as each execution path is a recursion. See example below:







public int fib(int n)  
{
    if (n <= 1)  
       return n;
    else 
        return fib(n - 2) + fib(n - 1);
}



In the fib function above fibonacii series is generated. In the "if" condition no branching or recursion happens, in the "else" condition the execution path branches off in either of two branches. Note that for algorithm to be O(2^n) its not enough to have multiple execution paths branching out, the necessary condition is that each of those branches have recursion i.e. call the original functions. In the "else" condition in the function above, two recursive calls to fib is made.

For n =1, there would be only one call of the function. For n = 2, the first call would have two more calls, so three calls. For n = 3, the first call would call two functions, one of which would have another calls so its 1 + 2 + 1 = 4 calls. Altogether, number of recursive calls increasing exponentially (of base 2) as size of n increase linearly.

Another example:

void somefunc(some input)
{
      some work;

      if(some condition)
           somefunc(...);

      some work;

      if(some other condition)
           somefunc(...);

      some work;

      if(some yet other condition)
           somefunc(...);

}





As the fib function above has potential to branch into any of two paths at each call (each path being recursive is necessary condition), the somfunc has potential to branch into any of three paths. Its O(3^n).


Finally the factorial algorithm. Its the most inefficient, naive and simplest algorithm. Easiest to program but hardest to execute. Its also called brute force. Its when instead of using an intelligent method of searching or sorting, we simply try to make as many combinations as we can and test which of them is correct.

An example is trying different combinations of numbers at a number-lock briefcase or keypad-lock door. 

Another example is making people sit in different arrangements to see which one looks best before taking a group photo.

Types of Relations Between Database Tables

There are only three types of relations between database tables: One-to-one, one-to-many, many-to-many.

Relationships are represented by Primary Keys (PK) and Foreign Keys (FK). When a primary key of a table A is referred in another table B, then in B its called a foreign key.

One-to-One Relation

Keeping one-to-one relation is meaningless because the two tables can be combined in one table, unless the parent table P can relate to different child tables C, D, E in different rows.

An example of one parent table relating to different child tables in different rows is a document management system where parent table Document have a record for all types of documents such as html pages, pdfs, images, word documents, audio files etc but separate child tables for each of these document-categories contain specific format and address information. Such as table C contains records for html pages only and have columns such as urls, useCookies etc. Another table D contains records for pdf files only and have columns such as isPasswordProtected, pageCount etc.

One-to-Many Relation

This is essentially same as many-to-one relation with just the sides changed so considered together.

Unlike the one-to-one relation considered above, here we are discussing simple form only, in which only one parent table relates with only one child table. The reason we are not discussing the complex form where one parent table relates to multiple child tables is that we do not have to because the concept and implementation can be well understood from simple form and can be extended for the complex form.

Parent is the one side, Child is the many side. Means for every record in Parent table, there can be multiple records in Child tables, but for every record in child table only one record exist in parent table.

It may happen that for a parent no child exist and for a child no parent exist but the latter though is a valid state as far as data is considered must be prevented because it go against data integrity.

Since a cell can contain only one value, and since a parent record can have multiple child records, parent cannot know about child. Its because we have no way of putting child information in parent record. For one parent record there can be 5 child records, for another 575, yet for another 0. How can we put so many different ids in parent record. 

Tables Are Not Ragged

Note that tables are by definition non-ragged, meaning number of columns are same in all records. Its not like the first record have 5 columns, the second 17 columns, no, all of the records would have same number of columns. 

If a parent record have 5 child records, then if parent knows about children then that parent record must have some way to store ids of all the child records, so these are 5 numbers (lets say 101, 102, 103, 109, 214). Since a cell can have only one number (1 NF), we have to have five columns to keep this information. Now if the second parent record has 17 children, then that record needs 17 columns to contain ids of children. Since any parent can have any number of children, it will all get mess up if we keep children information in parent table. A parent record can related to a billion children record or to no child record at all. Moreover, the relation is not fixed, as time moves on the record that links with 5 children can now link with 4 children only, and the one that links with 17 children can now link with 25 children. 

Although theoretically we can change definition of parent table for this purpose, keeping nulls in non-used columns, and design a dbms that deals with this efficiently, at the end of the day its all a big mess and can be elegantly avoided simply by putting the information about parent in child table instead.

So the child table have to have a foreign key which relates to the primary key of the parent table. The only issue with this is that some children may have information about parent records even after those parent records are deleted. Its like those child records have gone orphan since their parent record is deleted ("died").

Maintaining Data Integrity

To maintain data integrity, we have to have a consistent method of dealing with what to do about child records when their parents have to be deleted. We have following options:

(1) Do not delete a parent until all of its children are deleted.

(2) When a parent record is deleted, automatically delete all its child records too.

(3) Just delete the parent record letting the child records exist as orphans.

The third approach breaks data integrity and must be avoided. There is no fixed rule about (1) and (2), depends on intuition of programmer. 

Link With Transaction

Its the parent-child relation that become basis of transactions. In absence of such relations no transaction mechanism is needed in database management systems.

Its the transaction mechanism that ensures that data integrity is to be maintained if option (2) of above is chosen, means either both parent and child records would be deleted, or none of them. 

Transactions also maintains data integrity in insertion and updation.

Many-to-Many Relation

For the same reason by which we cannot put child information in parent table in one-to-many relations (one call can have only one value, tables are not ragged, its inefficient to keep changing table-definition / schema for updations in data), we cannot put information of other in any of the parent or child tables in many-to-many relations. Its because here a parent can have multiple children and a child can have multiple parents. 

The solution is to use a bridge table. This table has three columns: Id, IdParent, IdChild. Relations between parent and child records can either exist or not, so there would be only two operations in this bridge table: insert, delete. 

Joins vs Unions

If we join a table A (5 columns, 15 rows) with a table B (7 columns, 10 rows), then the join in its simplest form (called cross-join or cross-product) results in a recordset R (5 x 7 = 35 columns, 15 x 10 = 150 rows).

Its like nested loops complexity O(n^2) discussed above, but in two dimensions (columns and rows) and n is different for each table, so its m * n. 

The resultant recordset R gets both long and fat, basically big.

Since this has redundant information, we have to put some condition. Old method is to put the condition in where clause, new method is to use "join" keyword. 

When we add condition, we have to decide the null case i.e. when FK is null (PK ofcourse can never be null). Note that joins are supposed to be always between FKs and PKs.

Unions are different. Unions are made between tables that have same schema (columns' names, columns' count, columns' types, columns' size). Therefore in the resultant recordset number of columns remains same, rows increase. Typically all of these rows have unique PKs so we don't have to add any condition.

Tail Recursion And Stack Overflow

The default working of compilers is such that, whenever a function is called, its entry is made on stack. This ensures that when this functions calls another function (whose entry would also be made on stack), and that function will exit, control would be transferred to this function.

Even in OOP, the call stack is based only on functions, just that function-names are prefixed by object-identifiers. So when program starts the entry point function, which is usually the main function starts. This function then calls other functions through message-passing (a fancy name for calling methods of other objects). Event handling is a special type of message-passing.

Under the hood, in assembly language, its just goto command passing instruction pointer to different control segments of memory. Instruction pointer itself is outside memory, its a cpu register.

There is a problem in this architecture. The call stack can be filled upto a very small limit. This limit comes very quickly, long before the memory exhausts. This is called stack overflow problem.

Recursion i.e. a method calling itself is a very elegant solution to a variety of problems. The problem is, a function calling itself can very quickly (milli seconds) overflow the stack resulting in abrupt termination of program.

The solution to this is tail recursion. In this technique, the recursive call is made at the very last line of the function. Therefore when the called function exits, it not really have to return to one step backwards, because no computation is left there, it can return to two step backwards. If that is also a recursive call then three step backwards and so on. 

Ofcourse an elegant compiler is needed to understand this and convert these kind of recursive calls in non-recursive, loop-based calls internally. 

What Happens At Bit Level In Computers If We Try To Divide By Zero

Computers divide in the same way we do, called long division. For example:

  _012
8| 100
    _8
      20
      16
        4

Ofcourse we know how to divide, still please proceed with me looking at each step carefully because we have to use these rules below when we divide by 0.

We divide 100 by 8. First we take the first digit 1, since 1 is smaller than 8, we take another digit by putting a zero above. Now we have 10, we divide it by 8, remainder is 2, 2 is less than 8 so we get another digit making it 20. Note that since we have done division once we can take one digit without adding a zero. If we need more digit then we have to put more zeros. 

So we get 20, we divide it by 8, remainder is 4. 4 is less than 8 and no digit left, so program terminates.

Note that computers do divisions in the same way we do, its just that they use binary numbers. Since numbers in their essence are same, no matter in what system (decimal, binary, octal, hexa) we represent them, we do not have to consider binary numbers to understand working of following division in computers:

  111
0|95
   0
   9
   0
   9
   0
   9

So we take a number 95 and try to divide it by 0. Nothing special about 95, we can use any number. 

We take first digit 9, since its greater than 0 we do not need to take the second digit. 0 time 1 is 0. 9 minus 0 is 9. Since 9 is greater than 0 we cannot take the second digit, so we have to divide again. 

No matter how many times we divide, result is same as input. So this program conceptually never ends. However on a real computer, with finite memory, and finite word-size (32 or 64 bits) we get all 1 and then program terminates. All 1s mean maximum number that can be represented in that word-size. actually referring to infinity. 

On paper when we divide 1 by 1 we get 1, 1/0.1 = 10, 1/0.01 = 100 and so on. As the denominator decrease, result increase. So as denominator approaches zero, result approaches infinity.

22 December, 2012

Vector Comparison And A Solution To The Knapsack Problem

There are two things in world: (i) scalars (ii) vectors. Scalars have only one value i.e. only one dimensions, examples are numbers, boolean values, intensity of emotions etc. Vectors have multiple values i.e. multiple dimensions, examples are points, multi-column tables etc.

Its easy to compare scalars. Given a list of numbers its straightforward to tell which one is the largest or one among the largest ones. Vector analysis is very hard. A thing can be good in one aspect but bad in another aspect, how to tell that the goodness in one aspect is more important than the badness in the other aspect?

Lets have a situation. Suppose you are manager of three subordinates in a business organization. The organization have these four basic functions: production, accounting, marketing and customer interaction. Every subordinate provide some service in each of these functions but they are not equally good in any of these functions. Some employee is good in two things, average in the third thing and bad in the fourth thing. Another employee is good in some other set of functions, average in some other and bad in some other. How to tell which subordinate is the best among the three subordinates?

I have created this situation as a four dimensional vector analysis. The four dimensions are the four functions of the organization, in which each employee has some value. Each employee is a vector, so we have three vectors. To have an intuition about vectors, consider them as points in n-dimensional space.

The above situation is one of the knapsack problems. The classical knapsack problem has only two dimensions: weight and value (in dollars). You have a bag to fill with objects (vectors) where each object has a weight and a value (in dollars). The bag has a maximum capacity so total weight of all the objects that you put in the bag must be less than or equal to that capacity. The task is to fill the bag with as much cummulative value of objects as you can.

There is a long way to solve this problem which is quiet complicated. Infact the easiest solution that I can find is here on stackoverflow (please scroll down on that link to read the last comment). I really cannot understand why people do not offer a simpler solution, May be nobody has thought about it. Anyways, my solution is below and I think I am the first one to make it this simple.

Here is my algorithm to solve the knapsack problem:

Step 1: For each object, divide value with weight, so you get one number for each object. Lets call this number Efficiency Factor. Put these values in an array so we have one element in array for each object.

Step 2: Sort the Efficiency Factors array in descending order.

Step 3: For each element in array, put the element in the bag, till either the bag is full or the array exhausts.

The big O notation for the stackoverflow solution is O(nW) where n is number of items and W is the capacity of bag. The big O notation of my solution is, well lets see, we have to visit each object once to calculate the Efficiency factor, so we have a n there in our big O notation. Then we have to sort the array, so we have a log n there. Then we have to run through the Efficiency Factor array, which is of same length as number of objects. So its O(2nlogn). Since we remove co-efficients in big O notations, so its O(nlogn). Actually we might not have to visit every element in the last loop because the bag might be filled before the array exhausts.

This is great and I think more efficient than normally available algorithms. Its also quiet simple so score some points there too. The core of the algorithm is to reduce the vectors into scalars. Works great but what if the vectors are of more than 2 dimensions. In case of 2 dimensions we can use divisions but what to divide with what when there are more than 3 dimensions. Also in more general vector analysis i.e. in non-knapsack problems, like comparison of employees above, the division approach makes no sense and this algorithm of mine do not work. We cannot divide performance in one field by performance in another field because the result is meaningless. In two equally important fields A and B, if employee 1 scores 7 and 5, and employee 2 scores 5 and 7, then actually the two employees should have equal grading. But if we divide A by B, then the first employee gets a score 1.4 whereas the second employee gets score 0.714, wrongly grading the employee 1 better than the employee 2. If we swap place of A and B in the division then we see opposite result. Since fields are equal, so we cannot decide which field to go in nominator and which to do in denominator.

To solve this problem of employees grading in particular and vector analysis in general, lets use the analogy of points. Lets consider each employee a point in 4 dimensional space. Since that is hard to visualize lets first consider only two dimensions. Following is the performance of each employee in the four functions of the organization, lets call these functions A, B, C, D in the order given above (means A for production, B for accounting, 3 for marketing, 4 for customer interaction). Lets call each of our vectors (employees) Vi.

V1(7, 8, 5, 1)
V2(1, 9, 10, 4)
V3(4, 7, 4, 6)

Lets suppose we have only two employees to consider. The first one scores 5 in field A and 5 in field B. The second one scores 10 in field A and 0 in field B. A naive approach of summing the points (the same approach use in grading students in marks sheet) says that both employees are equal. However its easy to see that the first employee is an average performer whereas the second one is a specialist. We have two choices here: (i) Reward the specialist (ii) Reward the mediocre.

If we want to reward the specialist, which is generally the case in big organizations and govt institutes, which can afford to have specialists and where quality is more important than flexibility, we can use the following algorithm that I created:

The algorithm is to simply reward the employee who go farthest from the origin. In case of the first employee, the mediocre. who is at point x=5, y=5, we can use pythagorous theorem to find out that the distance from the origin is root(5*5 + 5*5) = root(25 + 25) = root(50) = 7.14. So thats the score of the first employee. For the second employee the score is root(10*10 + 0*0) = root(100 + 0) = root(100) = 10. So if the employees are enemy planes moving in two dimensional space and we have our anti-aircraft guns at origin, we have to have a range of 7.14 for our guns to hit the plane of the first employee but to hit the second employee we need far better guns of range 10. Therefore, where we reward the specialists, the solution is to simply use the phythagorous theorem. Every science person knows the phythagorous theorem of two dimensions, but the phythagorous theorem of three dimension is root(x*x + y*y + z*z) and for four dimensions it is root(A*A + B*B + C*C + D*D).

If we do not want to reward the specialists, but want to reward the mediocres, a strategy good for small organizations where flexibility and jack-of-all-tradeness is more desirable than specialism or intense knowledge of a very few things, we simply have to take the reciprocal of the length of diagonal calculated above. So in that case, for the first employee the score would be 1/7.14 = 0.14 and for the second employee the score would be 1/10 = 0.10. Here, the first employee scores more indicating that he is more valuable for the organization than the second employee. Unlike the diagonal approach, there is no way to easily visualize which employee is good, meaning no aircraft like story exists, other than saying that being closer to origin is desirable (consider both the planes and aircraft guns to be friendly and the planes are now going on bombing missions on enemy territories under the cover of our own anti aircraft guns so the enemy fighter planes cannot destroy our bombers, we do not want our planes to go very far from the origin).

Now to solve our employee situation, assuming that our organization is big and therefore reward specialists:

V1: root(7*7, 8*8, 5*5, 1*1) = root(49 + 64+ 25 + 1) = root(139) = 11.79

V2: root(1*1, 9*9, 10*10, 4*4) = root(1 + 81+100+16) = root(198) = 14.07

V2: root(4*4, 7*7, 4*4, 6*6) = root(16 + 49+ 16 + 36) = root(117) = 10.81

So the middle one is the best employee. A few things to note:

(1) We are assuming all values to be positive. For negative values where negation is undesirable, subtract instead of adding, after taking square of the value i.e. root(x*x + y*y - z*z) if z has a negative value. If negation is not undesirable then do not subtract but add as usual.

(2) We do not really have to take the root because the value before the roots is also reliable for grading. Its however not reliable for precise grading where we do not just have to tell which employee is best but also have to tell the margin of goodness. Suppose an organization has only three functions, and an employee has 5,5,5 value and another employee has 10, 10, 10 value. We know that the second employee is better than the first employee, but by how much. Can we say double, actually we can, because if the second employee has value 10,5,5 then that employee is obviously not twice as good as the first employee. To get the right grading, we do have to take root. Its because before taking roots, the values are (5*5 + 5*5 + 5*5 = 25 + 25 +25 = ) 75 vs (10*10 + 10*10 + 10*10 = 100 + 100 + 100 = ) 300 which wrongly says that the second employee is 4 times as good as the first employee. After taking roots the values become root(75) = 8.66 vs root(300) = 17.32, a difference of 2 times

(3) All we are doing is converting vectors into scalars. We humans are not capable of vector comparison, we can only compare scalars.

(4) We are assuming that each of the fields or functions of organization are equally important. If they are not, then we have to multiply each value with weight before taking square. Suppose the weights are as follows:

production: 5
accounting: 2
marketing: 3
customer interaction: 4

The scores of the employees would be as follows:

V1(7, 8, 5, 1) => (7*5, 8*2, 5*3, 1*4) => (35, 16, 15, 4)

V2(1, 9, 10, 4) => (1*5, 9*2, 10*3, 4*4) => (5, 18, 30, 16)

V3(4, 7, 4, 6) => (4*5, 7*2, 4*3, 6*4) => (20, 14, 12, 24)


03 December, 2012

Interior Spacings : First Part

This post is about recommended widths of corridors, mattresses, chairs, tables etc.

95% of humans have height under 6 ft. We can therefore take this height to cover 95% of situations.All of the following numbers are for this height, meaning for near to 95% of humans there is some extra space available when following numbers are used.

To Stand:
    Breadth-Wise:
  
        Shoulder to Shoulder                                                                18 inches
        Shoulder to Shoulder + Muscles + Hips                                     24 inches

        Stand Without Touching Another Person                                    27 inches
        Stand Without Touching + Room For Arms March Movement   36 inches

    Length-Wise:

        From Tip of Middle Toe of Foot to Back of Heel Of Foot          12 inches (definition of Ft.)
     
        Standing Without Touching Person In Front                                18 inches
        Standing Comfortably                                                                 24 inches

    Conclusion:
 
        Actual space needed to stand is 18 inches breadth-wise and 12 inches length-wise. This is when people are packed (in a bus or row for example) like bricks in wall. To just stand (no walking) without touching any person at side or front or back 1.5 times the above in each dimension is enough. To walk without touching any person 2 times the above is enough.

    Recommendation:

        36 inches breadth-wise and 24 inches length-wise per person space.

    Applications:

        Mattress Width. As long as person is laying flat means no turn-overs.

        Corridors: 36 inches width is good (and enough for almost anything) as long as only one person is supposed to walk in the corridor at any given time. If two people are supposed to walk in the corridor (for example coming from opposite directions), then we need a 27 inches per person plus a 9 inches space in between i.e. 63 inches minimum space. Practically this could be rounded to 60 inches (5 ft.). However a full 72 inches (36 inches per person, 6 ft.) results in maximum comfort to space ratio, means the optimum point. Its also the most beautiful.

        Doors: 36 inches width is optimum (comfort to space ratio, beauty) for single-person or couple rooms (bedrooms, kitchens, toilets, study rooms, computer rooms etc). These are the rooms which are supposed to be not used by more than two people at the same time. For rooms which are supposed to be used by more than two people at the same time (drawing rooms, halls, dining rooms, garages, main entrance to a large building, large warehouses etc) a 72 inches width is recommended as long as no vehicles are supposed to enter the room. If vehicles are supposed to enter the room then needed door width ofcourse depends on width of vehicle multiply by 1.25 (atleast) to 1.5 (recommended) to 2.0 (maximum).

        Office Tables: These are the tables that are supposed to be used by only one person at a time. Examples are normal office tables, study tables, computer tables plus some room to do paper work, repairman's tables used by carpenters, electricians etc to make or build some machine etc. Since a person's height is under 6 ft. in 95% of cases, the arms span of a person is 6 ft when stretched at 0 degrees. A table however have to be considerably less wide because angle has to be greater than zero to be able to grasp things in front at sides of table.
   
Chairs:

    To sit a person needs a chair that is maximum 2 ft long and 2 ft wide. We are not concerned with height of chair over here.

    Almost all chairs fit in these dimensions. The left over are very huge luxury chairs that are not usually used or even seen.

    These dimensions are not for sofas because some sofas have very thick bodies taking the whole scheme to something less than 4 ft x 4 ft, though these new dimensions cover almost all of the single person sofas.

    These dimensions are not for couches or multi-person sofas because we are talking about sitting devices only, not devices that can be used for laying down also.

    To move a chair comfortably backwards or sidewards to get out of the chair is 2 ft at each side. So, a chair when put in a position that its front-most end is touching the table and back-most end is 2 ft from the table, a 2 ft space at back of the chair (4 ft distance from table) is enough for people to comfortably move chair back and get out. In the same position, a 1 ft extra space at each side of chair is enough for comfortably move chair at sides while using it.

    For wheelchairs, corridors need to be 4 ft wide.

    From the above, it can be safely concluded that in a chair, the space for chair movement must be 4 ft wide for maximum comfort. It means that any drawers in the table at sides, or any wooden rack placed at far side of table (to place an electronic switch board or computer casing for example) must be beyond the 4 ft width. Since (as explained later below) recommended width of single-person table is 5 ft, placing drawers at sides in table is not practical unless the drawers are extremely narrow (4 inches wide).

Cabinets:

    Cabinets, be them kitchen ones or clothes ones or office ones needs a 4 ft space behind them for cabinet door to be comfortably open plus space for person to stand, as long as the door of cabinet is less than 2 ft wide. The point is that, the person standing must have a 2 ft space atleast when cabinet door is fully opened.

    Later we will see that depth of no cabinet should exceed 18 inches inside the cabinet (means other than the walls of cabinet). Its because distance between elbow and tip of middle finger of hand is under 18 inches in 95% of humans, therefore any length beyond 18 inches requires elbows to be bend which is a pain.

    Later we will see that the width of walls of cabinet should never exceed 2 inches. This limits the depth of cabinet including cabinet-walls to 22 inches, meaning that door of cabinet can not be greater than 11 inches if there are two doors and 22 inches if there is only one door. So about 2 ft length of door plus 2 ft space behind the cabinet for person to stand, a total of 4 ft space is needed near all cabinets to both stand and comfortably use the cabinets. Ofcourse 4 ft. width means that a person on wheel chair can also use that space to comfortably move around the room / kitchen when the cabinet is closed.

    As discussed below in the section of Office Tables, it is found that effective reach of a person width wise is under 5 ft, therefore no cabinet including walls should be more than this wide. Infact, the most comfortable width inside is 4.5 ft i.e. excluding walls.

    Therefore, recommended dimensions of cabinets is: 5 ft x 2 ft (outside), 4.5 ft x 1.5 ft (inside)

Office Tables:

    A 6 ft. person with arms stretched at 0 degrees covers as much space horizontally as his height i.e. 6 ft. When sitting on a table, a person has to reach not only the ends of table at 0 degrees but also at some greater than zero degrees to grasp things put at sides of tables at extreme i.e. corners of table. Therefore, 5 ft. is the recommended width of a single-person table i.e. office table. Beyond 5 ft the person cannot use without standing up or extending at uncomfortable positions at sides.

    Length wise, when sitting comfortably at table, a person has his elbows at the edge of table, so can reach to 18 inches in front. Since the length of whole arms is 27 inches (distance between shoulder and tip of middle finger of hand), a person can reach 27 inches in front. If the person sit as close to table as he can, that is table touching his chest, he can reach 27 inches in front without bending, and 36 inches in front when bending as much as he can without leaving the chair. Therefore, the maximum reach of hand on table is 36 inches. We have to keep this as a standard because a person's hands need not reach all the edges of table to fully use the table, this is because the objects the person want to grasp have some volume of their own, so a 27 inches reach is enough to utilize a 36 inches space when most of the things (files, papers, printers etc) have about 9 inches width of their own.

    Conclusion:

        5 ft width and 3 ft length.

Mattresses:

    A person needs 18 inches shoulder to shoulder when fully packed with other person, 24 inches if some muscles' and hips' space is allowed and 27 inches without having any physical contact with neighbours. 36 inches is good enough to walk but not enough to sleep because some people like to put arms at sides and also we have to keep room for turn-overs during sleep. However, if some open space is allowed at sides of mattress then 36 inches width of mattress is enough. If we do not want the person to extend any body part outside mattress during sleep, then 4.5 ft or 54 inches is the most we need.

    Length-wise, 81 inches is enough. This allows 72 inches (6 ft) of person's height plus 6 inches for pillow plus 3 inches below person.

    54 inches is also wide enough for two adults to sleep (but with some discomfort) and for one adult and one child to sleep comfortably.

29 November, 2012

No End In Sight


USAGE IN COMPETITION

A way to impress (and therefore force to surrender or quit) your enemy is to show no-end-in-sight in will, resources and reinforcements. They would not fight till end because they see no end. They will freak out and quit early, very early.

You cannot avoid taking losses but you can reduce their sense of achievement to near zero by quick replacement / rebuilding of what is lost.

You cannot avoid choke points but you can reduce your vulnerability by keeping a stock of redundant candidates that can fill the spot once your only trade route is blocked, your only sea port is burned to ashes or your great leader is assassinated.


Dents in your castle, holes in your formations, fatigue on your face, absence of replacements etc are silver linings in black clouds for your enemy. Prevent or atleast hide them so your enemy never see them.

USAGE FOR HAPPINESS

Any outlet to apparent-infinity at your house is a source of happiness for you. It could be a view of sky or sea or field etc. It not have to be infinite, it just have to appear infinite.

Any outlet to apparent-infinity in your career development is a source of happiness for you. As soon as you see a dead end you lose hope and with it eagerness to work. That is where you end.

Any outlet to apparent-infinity in your hobbies is a source of happiness for you. Sports not work beyond a certain point because its end (world championship) is apparent from start. Arts however provide such an outlet because you can go beyond anybody ever been to.

For purpose of exploration, exploitation and plunder, earth has no-end-in-sight for an individual. Its because in absence of nuking there is no way an individual can exhaust earth's resources. For a sufficiently large group of individuals its not the case even if given whole universe because certain things are available on earth only.

SEVERAL DIMENSIONS

There can be no-end-in-sight in a thing in more than one dimensions. One example is outerspace which has this in all three dimensions. Another example is an empire that may reach a limit on land area because of naval weakness, communication delays etc but still have other no-end-in-sight dimensions such as developing hamlets into villages into tows into cities, technology, arts etc. Yet another example is a person expanding in a hobby though cannot expand in career due to factors beyond his / her control.

IN CV

Suppose you have a topic in your CV, such as Job Experience or Education, that has a size of 1.25 pages. One case is to start it half way on a page, lets say first page and go three quarters on the next page, so it spread from 0.5 pages to 1.75 pages. Second case is to start it on a fresh page, no matter which page, and fill that entire page with it then go on the next page and cover quarter of it. Which approach gets a more favourable approach for you in eyes of reader?

The answer is the second case. Its because it has a no-end-in-sight factor in it. Seeing a page filled entirely by a topic with some part of topic still remaining to be read on next page results in a "sufficient-enough" impression to reader.

IN LECTURING STUDENTS

If you want your students to think a topic is easy enough to be understood, start by showing boundary line of the topic, that way students can see an end. Only then go in detail.

IN ADMINISTRATION

British administrators used to start by taking a trip of land when joining a position. That way they know the limits and can have an easy picture of their duties in mind. Its easier than having a continuous flow of never-heard-before-type-of-problems six months in the position.

IN TASK LISTS

Whenever you have more number of things to do that you can keep in head at one time, write them down. It not matter how complicated or big individual tasks are, if number or count of them is sufficient to result in forgetfulness, make a list of them.

The point of having a list is completeness means that list must contains all tasks. An incomplete list is worse than no list because an incomplete list force you to do mental effort of remembering as well as taking the pain of writing and reading the list.

IN COMPLEXES

A perfectly complex system is such where every part is connected to every other part directly so to understand one flow or one part or one fault you have to understand the whole system. Since as you start at a node (part, flow, path, fault) multiple nodes emerge from it and from each of them multiple and so on so its a no-end-in-sight situation.

A hierarchy on the other end is dead easy to understand because only a few number of things need to be kept in mind at any given time.

IN COMPUTER PROGRAMMING

Any method going beyond a page has a no-end-in-sight factor. Any class having list of methods and fields (one at each line) going beyond a page also has that factor. Any project having list of classes going beyond a screen full of list also has that factor.

This factor is also present in tables that have columns going horizontally beyond width of page.

RELATION WITH NUMBER SIX

The number six is the ultimate number of things a person can handle at a time without grouping. Beyond six we cannot imagine directly i.e. primarily i.e. without grouping. If you have seven different problems and you cannot group them in one heading such as related-to-work, related-to-finance, related-to-family then you get overwhelmed. If six different enemies operating independently attack you simultaneously then you are almost guaranteed to be stunned and defeated. This is why guerilla wars are effective against a very large and organized army. Its because being organized it has to be handle by only one leader whose brain can be easily exhausted by attack at more than six places and being large it cannot be hidden.

Btw, there are only two strategies to handle guerilla war if you happen to be the large and organized one. First is to decentralize and divide yourself in small groups and the other is to focus on one or two goals at the cost of the rest.

IN MANAGEMENT

No manager can actively administer more than six subordinates without having either assistants or grouping subordinates in bundles managed by higher subordinates.

IN MACHINE OPERATORSHIP

No machine operator can actively read more than six instruments.

14 October, 2012

Brainwashing - Part One


Brainwashing is more common than you think.There is brainwashing in politics, in marketing and even in all non-islam religions.There is brainwashing in science too, especially in modern physics but very little in classical/newtonian physics. However, there is no brainwashing in logic, common sense, islam and nature.

Its hard to have a wrong belief without brainwashing. Once the brainwashing is removed, its like sun shining when clouds go away, the person can see the matter in clear and then is very likely to discard the wrong believes and accept the right believes.

Brainwashing has nothing to do with the validity of the belief itself, you can brainwash a person on both right and wrong believes. Brainwashing however is bad for both wrong and right believes. The reason for the first is obvious and for second is that the brainwashed gets in such a mental state that would not be able to identify pollutions/additions/subtractions from the right belief and would very likely believe the once-right-but-now-wrongly-edited-belief.

What Is Brainwashing? Believing Without Thinking

Brainwashing is when a person is so much impressed by an idea or the person behind that idea, that he start believing it without giving it any thought. The person has just accepted it without questioning, inquiry or even explanation.

How To Identify A Brainwashed Person? Parroting, Avoidance-Of-Questions, Inconsistent answers, Agitation.

The most common and easy to identify trait of a brainwashed person is parroting. When asked about the belief, the person mindlessly repeat the exact words said to him. Since the person is not thinking deeply about the belief, he has not came up with alternate words or phrases to explain his belief.

Another way to find is to ask what-if questions. The immediate reaction of the brainwashed would be a surprise. Since he has never given the idea any logical thought, he has never thought about the questions before. Actually he has not even know that such questions can exist.  Whether or not that person can answer the question is an entirely different thing and do not depend on whether the person is brainwashed. Even a brainwashed person when start thinking logically can answer all the questions about the belief if the belief is right and the person is intelligent enough.

The third way to identify brainwashing is that the brainwashed would try to avoid the questions. Since in a conversation, the answer is expected immediately, and since the brainwashed is thinking about these questions the first time, it can be a great mental work to think depending on the validity of belief, the intelligence of person and the complexity of question, that the first thing the brainwashed try to do is to dodge the questions altogether. When pushed, the next thing the brainwashed try to do is to say that he has not enough information to answer the question. Not having enough information to believe something, yet believing it, is by definition brainwashing. When pushed still, the person try to excuse by saying that he is too busy in routine life that he do not have enough time or energy to answer the question. This again is a wrong excuse, because belief is the most important thing for a person, more important than family, work, money, fun etc.

The fourth way of identification is an inconsistent answer. Inconsistency is when one part of a thing is opposite of another part so much that both cannot coexist. Inconsistency is not invalidity. A fantasy fairy tale can be very consistent internally but is still invalid, false and wrong because fairies don't exist. Inconsistency is when for example it is claimed that certain character in story cannot do certain action and later on that character do that action without any change in power or outside help. Human mind is remarkably tilted towards consistency, even in our dreams when we see inconsistent things our mind come up with some reason or extra images to fulfill the gaps.

The fifth sign is overly respect of the person who originated the idea. You might hear sentences like "How can Einstein be wrong?", "Mr. X is more qualified to speak on this matter than me or you.", "How on earth can you question saint Y?" etc.

Cure Of Brainwashing

Like in other things in life, the best approach is direct approach. Its best both in terms of effectiveness and efficiency. Ofcourse the direct approach comes with its price. The price is that you have to bear the full impact of reaction. So you must be strong enough to handle it. 

The direct approach is to tell the person straightforwardly and immediately that he is brainwashed. Then go on to explain why you think so. If you took the opposite sequence of steps, then when you were trying to explain why he is brainwashed, the brainwashed would start arguing and when you push would stop listening to you entirely. It may happen that the conversation get lost in arguments so much that the message that "you are brainwashed" never go through. 

As warned earlier, be prepare to pay the price of direct approach. Since in direct approach you bravely go in front and attack directly in broad daylight with no hiding you must be strong enough to handle the impact of counter-attack. The brainwashed would probably say that its you who are brainwashed, be prepare to answer that. The brainwashed may get violent, even physically attack you, even in absence of an outright physical attack your relation with the person is likely to suffer. Still in long run the benefits of direct approach are immense. After this initial setback to your relation with that person, once that person stop arguing and fighting and go home and think about it, you are very likely to win. The person may come back with an apology and great admiration towards you, making the relation many orders of magnitude stronger than what it used to. 

Now comes the hard part of explaining why the person is brainwashed. Start with telling him that he is just parroting what he heard, and you know this because you have talked with people of same belief before. Say that you are not saying anything about the validity of the belief. You are just worried that the person is brainwashed and you want the person to start thinking. Ask the person politely to just rephrase what the belief actually is in his own words. Nobody can object this simple request of yours to rephrase his beliefs in his own words, after all if the person do truely believe it then must have his own words to describe it.
 
The brainwashed after thinking is very likely to rephrase the belief in his words. Its because it not take much effort to rephrase something. The person may have left some parts but be sure that he has covered the core of the belief. Now start asking what-if questions. By making the person rephrase the belief, you have made the ground for logical reasoning, and by asking actual questions you have started the process of thinking. What-if questions consists of scenarios, one per question, in which you want to know what the person think is the right thing to do or would happen. Ask a few of these questions, some of these questions have to be related to be used later but don't ask them in sequence so the questions seems random.

Now once the person has rephrased the belief, and answered the what-if questions, link those answers to see inconsistency. If the person is brainwashed there have to be inconsistencies even if the belief is right. This is because the person is thinking about the belief logically for the first time. Make sure that the scenarios in the questions are extreme ones so you have enough ground to play on. Note that if the person is not brainwashed but the belief is wrong then also there would be inconsistencies.

Show those inconsistencies to the person. The person is very likely to say that he has not understood the questions or you have not understood the answers. Ask the questions again. This time he would be careful to have consistent answers. If the answers are consistent with each other and also with the belief, stop there. You have achieved your goal. The person is no more brainwashed but is thinking logically about the belief. Do no more effort. If the answers are not consistent with themselves or with the belief then ask that person to try harder. The person may never be able to come up with consistent answers (within themselves and with the belief) if the person is not intelligent enough or the belief is wrong.

The target here is to make the person think. Start with asking about the belief, the person may or may not parrot the exact words that he has heard somewhere, depending on whether or not the person is brainwashed. Since people like to talk about themselves, its very unlikely that the person deny this simple and polite request to know what the person's belief is. If the person is not parroting then leave the person there, the person is not brainwashed. If the person is parroting then ask the person to rephrase the belief in simple words. Again seeing your interest, the person is unlikely to deny that request and would attempt to use his own words. There, you have started the process of thinking in the mind of the person.

Now ask what-if questions. The person may think that you are questioning the beliefs, say that you just want to know the beliefs more clearly and elaborately. Again its very unlikely that seeing your interest the person deny this request. Whether you agree with the answers or not, whether the answers are right or wrong, you have achieved your target, the person is now thinking logically about the belief. There, you have sown the seed. The person's mind can take over from there.

If you find that the person is not giving you enough attention, or not doing enough effort to answer the what-if questions, or is parroting the answers (this may happen if somebody else has used the technique I am telling you on the person before) then show the person the inconsistencies and ask for more explanation in simple and original words.

The final hit is to ask a simple question of the format: Can in X situation Y happen? This is the extreme that you can go in any logical conversation. Beyond that is outside the realm of logic.

Remember to first make the person state the belief. This ensures that you do not waste your effort attacking a strawman.

Also remember to attack the heart of the belief, not the periphery. March your forces directly to the capital.

Try to be as much brief, direct, polite and listening as you can be without breaking the core of your mission.

Examples Of "Can in X situation Y happen" Questions

(1) All non-muslims have one belief in common, they do not believe in one God. Either they believe that there is no God or they believe that there are multiple ones.

Lets talk about an approach to deal with those who believe in multiple ones. This technique is told by God Himself in quran. Ofcourse you have to first ask them to tell their belief including what they think is definition of God. Then after they have said that they believe that God has absolute power, ask them that if there are multiple then each of them trying to have complete control would try to terminate the other and since none of them can harm the other this would be an eternal war, with no start and no end, and in this war nothing could exist except them. It is because if any of them create anything the other in jealousy would destroy it immediately and totally even from past. Then how come the universe exist?

(2) If length really contract while traveling close to speed of light, that is, is not just an optical illusion, then if an alien launch a spaceship towards us with rest length of 20 m and in-motion length of 10 m and when it reach near earth, say in the orbit of moon, while still in motion, can we capture it in a cage of length 10.1 m?

(3) If universe is infinite having infinite stars, then why gravity is not infinite or why night sky don't have infinite intensity of stars-light?

(4) If I must answer to two equal-level bosses, and they give contradictory orders, which one I should follow and why, why not the other one?

(5) If democracy is assuming that whatever majority of people says is right, then why not discard the democracy itself if majority of people decline to vote (the suicide-of-democracy question)?

(6) How can a certain actress I been watching on tv and in films since 10 years, can be right when claiming that she is beautiful because of a certain fairness cream that is invented just one month ago, what was she using 10 years ago when also she was beautiful?

(7) Why should I believe that you are honest with me when you are literally showing me a false face made up of a thick layer of makeup? What else are you lieing about?

(8) How can I believe that you really care about me or even know what condition I am living in as an ordinary citizen when you the politician is living in a thousand acres house with one hundred servants and one billion dollars in bank?