add

Saturday 6 May 2017

EF Code 12 Rules for RDBMS

EF Code 12 Rules for  RDBMS

Edger Frank “Ted ” code(august 1923-18 April 2003) was an English computer scientist who, while working for IBM, invented the relational model for database management, the theoretical basis for relational database Code proposed thirteen rules, numbered 0 to 12.

 According to him if a database meets these rules, it can be called relational database management system.  The system must qualify as relational as a database and as a management system. For a system to qualify as a relational database management system, that system must use its relational facilities to manage database.
The other 12 rules derive this rule.
All information (including metadata) is stored to be represented as stored data in cells of table. The rows and columns have to be strictly unordered Each unique piece of data (atomic value) should be accessible by Table Name + Primary key (row) + Attribute (column)NULL has several meanings, it can mean missing data, not applicable or no value. It should be handled consistently. Primary key must not be NULL. Expression on NULL must give NULL. Database dictionary must have description of Database. Catalogue to be governed by same rule as rest of the database. The same query language to be used on catalogue as on applicable database. One well defined language must be there to provide all manners of access to data Eg SQL
All view that are theoretically updatable should be updatable by the system View is a virtual table There must be Insert, Delete, Update operations at each level of relations. Set operation like Union, Intersection and minus should also be supported. The physical storage of data should not matter to the system. If say some file supporting table were renamed or moved from one disk to another, it’s should not affect the application. If there is change in the logical structure (table structure) of the database the user view of data should not change. Say, if a table is split into two tables, a new view should give result as the join of the two tables. This rule is most difficult to satisfy. The database should be able to conforce its own integrity rather than using other programs. Key and check constraints. Trigger etc should be stored in data Dictionary. This also make RDBMS impendent of front end. A database should work property regardless of its distribution across a network. This lays foundation of distributed database. If low level Access is allowed to a system it should not be able to subvert or by pass integrity rule to change data. This can be achieved by some sort of looking or encryption


Monday 13 March 2017

namespace c++ explanation with examples



C++ Standard Library:

In the C++ programming language, the C++ Standard Library is a collection of classes and functions, which are written in the core language and part of the C++ ISO Standard itself.The C++ Standard Library provides several generic containers, functions to utilize and manipulate these containers, function objects, generic strings and streams (including interactive and file I/O), support for some language features, and functions for everyday tasks such as finding the square root of a number. The C++ Standard Library also incorporates 18 headers of the ISO C90 C standard library ending with ".h", but their use is deprecated. No other headers in the C++ Standard Library end in ".h". Features of the C++ Standard Library are declared within the std namespace.

The C++ Standard Library is based upon conventions introduced by the Standard Template Library (STL), and has been influenced by research in generic programming and developers of the STL such as Alexander Stepanov and Meng Lee. Although the C++ Standard Library and the STL share many features, neither is a strict superset of the other.
A noteworthy feature of the C++ Standard Library is that it not only specifies the syntax and semantics of generic algorithms, but also places requirements on their performance. These performance requirements often correspond to a well-known algorithm, which is expected but not required to be used. In most cases this requires linear time O(n) or linearithmic time O(n log n), but in some cases higher bounds are 

allowed, such as quasilinear time O(n log2 n) for stable sort (to allow in-place merge sort). Previously sorting was only required to take O(n log n) on average, allowing the use of quicksort, which is fast in practice but has poor worst-case performance, but introsort was introduced to allow both fast average performance and optimal worst-case complexity, and as of C++11, sorting is guaranteed to be at worst linearithmic. In other cases requirements remain laxer, such as selection, which is only required to be linear on average (as in quick select), not requiring worst-case linear as in introselect.
The C++ Standard Library underwent ISO standardization as part of the C++ ISO Standardization effort, and is undergoing further work regarding standardization of expanded functionality.

std::list:

 

std::list is a container that supports constant time insertion and removal of elements from anywhere in the container. Fast random access is not supported. It is usually implemented as a doubly-linked list. Compared to std::forward_list this container provides bidirectional iteration capability while being less space efficient.
Addition, removal and moving the elements within the list or across several lists does not invalidate the iterators or references. An iterator is invalidated only when the corresponding element is deleted. 

std::list meets the requirements of Container, Al locator Aware Container, Sequence Container and Reversible Container.

Template parameters


-
The type of the elements.
T must meet the requirements of Copy Assignable and Copy Constructible.
The requirements that are imposed on the elements depend on the actual operations performed on the container. Generally, it is required that element type is a complete type and meets the requirements of Erasable, but many member functions impose stricter requirements.
The requirements that are imposed on the elements depend on the actual operations performed on the container. Generally, it is required that element type meets the requirements of Erasable, but many member functions impose stricter requirements. This container (but not its members) can be instantiated with an incomplete element type if the allocator satisfies the allocator completeness requirements.
Allocator
-
An allocator that is used to acquire/release memory and to construct/destroy the elements in that memory. The type must meet the requirements of Allocator. The behavior is undefined if Allocator::value_type is not the same as T.

Member types

Member type
Definition
value_type
T
allocator_type
Allocator
size_type
Unsigned integer type (usually std::size_t)
difference_type
Signed integer type (usually std::ptrdiff_t)
reference
Allocator::reference
value_type&

const_reference
Allocator::const_reference

const value_type&
pointer
Allocator::pointer
std::allocator_traits<Allocator>::pointer
const_pointer
Allocator::const_pointer
std::allocator_traits<Allocator>::const_pointer
iterator
BidirectionalIterator
const_iterator
Constant bidirectional iterator
reverse_iterator
std::reverse_iterator<iterator>
const_reverse_iterator
std::reverse_iterator<const_iterator>

Member functions

(constructor)
constructs the list
(public member function)
(destructor)
destructs the list
(public member function)
operator=
assigns values to the container
(public member function)
assign
assigns values to the container
(public member function)
get_allocator
returns the associated allocator
(public member function)
Element access
front
access the first element
(public member function)
back
access the last element
(public member function)
Iterators
begin cbegin
returns an iterator to the beginning
(public member function)
end cend
returns an iterator to the end
(public member function)
rbegin crbegin
returns a reverse iterator to the beginning
(public member function)
rend crend
returns a reverse iterator to the end
(public member function)
Capacity
empty
checks whether the container is empty
(public member function)
size
returns the number of elements
(public member function)
max_size
returns the maximum possible number of elements
(public member function)
Modifiers
clear
clears the contents
(public member function)
insert
inserts elements
(public member function)
emplace

constructs element in-place
(public member function)
erase
erases elements
(public member function)
push_back
adds an element to the end
(public member function)
emplace_back
constructs an element in-place at the end
(public member function)
pop_back
removes the last element
(public member function)
push_front
inserts an element to the beginning
(public member function)
emplace_front
constructs an element in-place at the beginning
(public member function)
pop_front
removes the first element
(public member function)
resize
changes the number of elements stored
(public member function)
swap
swaps the contents
(public member function)
Operations
merge
merges two sorted lists
(public member function)
splice
moves elements from another list
(public member function)
removeremove_if
removes elements satisfying specific criteria
(public member function)
reverse
reverses the order of the elements
(public member function)
unique
removes consecutive duplicate elements
(public member function)
sort
sorts the elements
(public member function)
Non-member functions
operator==operator!=operator<operator<=operator>operator>=
lexicographically compares the values in the list
(function template)
std::swap(std::list)
specializes the std::swap algorithm
(function template)
Example
Run this code
#include <algorithm>
#include <iostream>
#include <list>

int main()
{
    // Create a list containing integers

    std::list<int> l = { 7, 5, 16, 8 };

    // Add an integer to the front of the list

    l.push_front(25);
    // Add an integer to the back of the list

    l.push_back(13);

    // Insert an integer before 16 by searching

    auto it = std::find(l.begin(), l.end(), 16);
    if (it != l.end()) {
        l.insert(it, 42);
    }

    // Iterate and print values of the list

    for (int n : l) {
        std::cout << n << '\n';
    }
}
Output:
25
7
5
42
16
8
13

Saturday 4 March 2017

Quantum Computing Explanation



 

Quantum computing 

Quantum computing studies theoretical computation systems (quantum computers) that make direct use of mechanical Phenomena such as superposition and entanglement, to perform operations on data. Quantum computers are different from binary digital based on transistors. Whereas common digital computing requires that the data be encoded into binary digits (bits), each of which is always in one of two definite states (0 or 1), quantum computation uses quantum bits, which can be in super positions of states. A quantum Turing machine is a theoretical model of such a computer, and is also known as the universal quantum computer. The field of quantum computing was initiated by the work of Paul Ben off and Yuri Manin in 1980, Richard Feynman in 1982,and David Deutsch in 1985.A quantum computer with spins as quantum bits was also formulated for use as a quantum space–time in 1968.

As of 2017, the development of actual quantum computers is still in its infancy, but experiments have been carried out in which quantum computational operations were executed on a very small number of quantum bits. Both practical and theoretical research continues, and many national governments and military agencies are funding quantum computing research in an effort to develop quantum computers for civilian, business, trade, environmental and national security purposes, such as cryptanalysis.

Large-scale quantum computers would theoretically be able to solve certain problems much quicker than any classical computers that use even the best currently known algorithms, like integer factorization using Shor's algorithm or the simulation of quantum many-body systems. There exist quantum algorithms, such as Simon's algorithm, that run faster than any possible probabilistic classical algorithm. A classical computer could in principle (with exponential resources) simulate a quantum algorithm, as quantum computation does not violate the Church–Turing thesis. On the other hand, quantum computers may be able to efficiently solve problems which are not practically feasible on classical computers.

Basis:

A classical computer has a memory made up of bits, where each bit is represented by either a one or a zero. A quantum computer maintains a sequence of qubits. A single qubit can represent a one, a zero, or any quantum superposition of those two qubit states; a pair of qubits can be in any quantum superposition of 4 states, and three qubits in any superposition of 8 states. In general, a quantum computer with {\displaystyle n}qubits can be in an arbitrary superposition of up to different states simultaneously (this compares to a normal computer that can only be in one of these {\displaystyle 2^{n}}states at any one time). A quantum computer operates by setting the qubits in a perfect drift that represents the problem at hand and by manipulating those qubits with a fixed sequence of quantum logic gates. The sequence of gates to be applied is called a quantum algorithm. The calculation ends with a measurement, collapsing the system of qubits into one of the {\displaystyle 2^{n}}pure states, where each qubit is zero or one, decomposing into a classical state. The outcome can therefore be at most {\displaystyle n}classical bits of information. Quantum algorithms are often probabilistic, in that they provide the correct solution only with a certain known probability. Note that the term non-deterministic computing must not be used in that case to mean probabilistic (computing), because the term non-deterministic has a different meaning in computer science.

An example of an implementation of qubits of a quantum computer could start with the use of particles with two spin states: "down" and "up"{\displaystyle |1{\rangle }}). But in fact any system possessing an observable quantity A, which is conserved under time evolution such that A has at least two discrete and sufficiently spaced consecutive Eigen values, is a suitable candidate for implementing a qubit. This is true because any such system can be mapped onto an effective spin-1/2 system.
A quantum computer with a given number of qubits is fundamentally different from a classical computer composed of the same number of classical bits. For example, representing the state of an n-qubit system on a classical computer requires the storage of 2n complex coefficients, while to characterize the state of a classical n-bit system it is sufficient to provide the values of the n bits, that is, only n numbers. Although this fact may seem to indicate that qubits can hold exponentially more information than their classical counterparts, care must be taken not to overlook the fact that the qubits are only in a probabilistic superposition of all of their states. This means that when the final state of the qubits is measured, they will only be found in one of the possible configurations they were in before the measurement. It is in general incorrect to think of a system of qubits as being in one particular state before the measurement, since the fact that they were in a superposition of states before the measurement was made directly affects the possible outcomes of the computation.
To better understand this point, consider a classical computer that operates on a three-bit register. If the exact state of the register at a given time is not known, it can be described as a probability distribution over the {\displaystyle 2^{3}=8}different three-bit strings 000, 001, 010, 011, 100, 101, 110, and 111. If there is no uncertainty over its state, then it is in exactly one of these states with probability 1. However, if it is a probabilisticcomputer, then there is a possibility of it being in any one of a number of different states.

Principles of operation:

A quantum computer with a given number of qubits is fundamentally different from a classical computer composed of the same number of classical bits. For example, representing the state of an n-qubit system on a classical computer requires the storage of 2n complex coefficients, while to characterize the state of a classical n-bit system it is sufficient to provide the values of the n bits, that is, only n numbers. Although this fact may seem to indicate that qubits can hold exponentially more information than their classical counterparts, care must be taken not to overlook the fact that the qubits are only in a probabilistic superposition of all of their states. This means that when the final state of the qubits is measured, they will only be found in one of the possible configurations they were in before the measurement. It is in general incorrect to think of a system of qubits as being in one particular state before the measurement, since the fact that they were in a superposition of states before the measurement was made directly affects the possible outcomes of the computation.

To better understand this point, consider a classical computer that operates on a three-bit register. If the exact state of the register at a given time is not known, it can be described as a probability distribution over the {\displaystyle 2^{3}=8}different three-bit strings 000, 001, 010, 011, 100, 101, 110, and 111. If there is no uncertainty over its state, then it is in exactly one of these states with probability 1. However, if it is a probabilistic computer, then there is a possibility of it being in any one of a number of different states.

Quantum Coherence:

There are two formulations of mechanics: classical mechanics and quantum mechanics.   Classical mechanics was the formulation of the laws of nature until 1900. After 1900, quantum mechanics was discovered/invented as a way to explain numerous anomalies that couldn't be explained by classical mechanics.  It was quickly shown that many aspects of classical mechanics could be derived from quantum mechanics.

Having quantum mechanics supersede classical mechanics is necessary to avoid the contradictions between the two frameworks. 

The primary challenge was the transition from quantum realm where there are super positions of states (i.e. a particle can be "here and there", rather than only "here or there" as classical mechanics dictates).  There were ad hoc rules that were created to make the transition from one realm to the other and the loose concept of "measurement" was introduced to dictate when a quantum system becomes classical.  This led to many conceptual problems such as Schrodinger Cat.

It took a surprisingly long time to construct a non-ad hoc process to describe the change -- if you think about it, you could expect that the quantum realm and classical realm might not be a dichotomy, but instead something that can be interpolated between (i.e. a system might have lost part of its quantumness, but not all of it).  


Quantum decoherence is the physical process that describes this transition from the quantum realm to the classical realm.  Somewhat shockingly, quantum decoherence follows directly from taking quantum mechanics itself seriously.  No real, extension of quantum mechanics was necessary.

The details of quantum decoherence are as follows and are somewhat technical.
In quantum mechanics, a system is described by a state and if you have multiple independent components, you combine the states by concatenating the multiple states together.   

To see quantum mechanical behavior, a system must separated into two different states and then be brought back together.  I'll describe this as a process: Start in a state, split that state into two components (a coherent superposition), and bright the states back together
[math] |\Psi_1\rangle \rightarrow_{\text{split}} (|\Psi_1\rangle + |\Psi_2\rangle)/\sqrt {2} \rightarrow_{\text{combine}} |\Psi_1\rangle[/math]

                                       
The key realization is that you can't ignore the rest of the Universe.  If the two parts of the quantum wave function interact with the rest of the Universe while they were apart, they change the Universe.  If this happens, then when you try to bring the states back together, the Universe has changed (and you can't unchange the Universe simply, it's like unscrambling an egg).   

Mathematically
[math] |\Psi_1\rangle|U\rangle[/math]
[math].\qquad\rightarrow_{\text{split}}[/math]
[math].\qquad\qquad (|\Psi_1\rangle|U\rangle + |\Psi_2\rangle |U'\rangle)/\sqrt{2} [/math]
[math].\qquad\rightarrow_{\text{combine}} [/math]
[math].\qquad\qquad(|\Psi_1\rangle|U\rangle+ |\Psi_1\rangle |U'\rangle)\sqrt{2}[/math].

Where the second part of the "state" is the rest of the Universe.  Therefore, you can't observe quantum mechanical interference, the critical aspect that differentiates the quantum realm from the classical realm. The degree that the Universe has changed between the two halves of the wave function is the degree to which the quantumness has been lost. 
{\displaystyle |-\rangle ={\tfrac {1}{\sqrt {2}}}\left(1,-1\right)}