Skip to content

Latest commit

 

History

History
54 lines (40 loc) · 5.06 KB

README.md

File metadata and controls

54 lines (40 loc) · 5.06 KB

algorithmwiki

A rich set of practical computer science knowledge with beginner friendly explanations and full source code implementations for each topic. All topics are handled from a practical standpoint aware of numerical precision, performance, and hardware limitations. The algorithm wiki is a one stop resource that curates the best answers and sample code for complex CS problems that software developers previously had to do exhaustive web searches for.

Topics Covered:

  • Algorithms (Quicksort, Fast searching, Permutations)
  • Data Structures (Hashmaps, Smart Pointers)
  • Theoretical/Applied Math (https://en.wikipedia.org/wiki/Lists_of_mathematics_topics)
  • Realtime 3D Graphics Programming (OpenGL/GLSL, Rasterization Graphics)
  • Offline 3D Graphics (Path Tracers, Lightmappers)
  • Geometry Processing (Intersection/Triangulation/Area)
  • Image Signal Processing (Gamma Correction, Noise Reduction, Color Difference, Image Filters)
  • Natural Language Processing - How to run instructions by understanding English,Spanish, Portuguese, Japanese, Chinese, etc. Logical reasoning based on vocabulary, connotation, and context
  • Monte Carlo methods (Importance sampling, Fisher–Yates shuffle)
  • Game Engine Creation (Real time scripting languages, Memory management, Unicode Font Rendering, Lightmap baking, stbi_image)
  • Compiler Design (Abstract Syntax Trees, Type Systems, Parsing, Optmizing, Static Analysis)

Directory Structure

All code/resources/references are organized into folders for their appropriate domains.

Example

SmallPT http://www.kevinbeason.com/smallpt/ is a popular realistic graphics project that often takes hours to generate a single image.

SmallPT would be listed under: Offline 3D Graphics -> Pathtracer -> SmallPT

A project may contain PDFs/Power Points to provide supplemental understanding of high level theory

The SmallPT directory could include educational material like: https://drive.google.com/file/d/0B8g97JkuSSBwUENiWTJXeGtTOHFmSm51UC01YWtCZw/view?pli=1

NOTE: For anyone who wants to actually contribute SmallPT to algorithm wiki, SmallPT's code needs to be majorly cleaned up to fit with the Contribution Guidelines. All code in algorithmwiki must use self documenting identifiers, proper spacing, and code indent. It's highly encouraged to provide insightful comments that explain how code is implementing a high level theory. (And specifically for SmallPT, the high level theory demonstrated is The Rendering Equation) https://en.wikipedia.org/wiki/Rendering_equation

Contribution Guidelines

Each subproject should contain working source code implemented in C, C++, Javascript, Rust, or Swift. Every subproject should have a README.md file that gives an appropriate description of the topic/algorithm being shown. No project may consist solely of pseudocode. Haskell can only be used as educational commentary related to algorithms or type theory. Esoteric languages, and Java must NEVER be used. All code must use standard indentation, self documenting identifiers, and use cross platform code that compiles on Windows/Mac/Linux with minimal to no modification. The purpose of this project is to explain well-understood concepts clearly in well-understood programming languages and most of all - provide working code that is easy to modify and learn from.

Explanations must be Concise, Simplistic, and Minimalistic

All code and all explanations should be as short and descriptive as possible. Do not resort to domain specific jargon. Avoid academic fluff, avoid symbols, and briefly re-explain concepts instead of re-linking them. ANY math that uses special symbols must be explained and accompanied by a code snippet translation where possible.

Code must be Fully Featured yet Simple

Your code shouldn't be over-engineered - aim for the smallest amount of code you can possibly use to illustrate a point, but make sure to use good self-documenting naming and proper spacing/indenting of code. Comments should only explain desired results and how code implementation relates to higher level theory.

Code Snippet Goal & Licenses

Gather all useful general purpose code snippets from across the world and gather them in one organized space. All code must be available for any purpose - GPL/LGPL is NOT allowed, neither is Microsoft Public License. We prefer MIT, ZLIB, Apache 2.0, BSD, Boost Software License, or Public Domain. All code on AlgorithmWiki must allow use for commercial purposes and integration into existing proprietary/closed source code bases.

External Reference Material

We try to collect the best blog posts, scientific research papers, stackoverflow posts, and Wikipedia articles for additional reference. If you deeply understand a scientific research paper, we'd greatly appreciate your commentary on the paper! If you have successfully implemented a concept explained in a scientific research paper, we'd love to see any code snippets you're willing to share! This project is by programmers for programmers, so if you know a great paper, blog post, or explanation on a subject we cover, let us know!