Affinity Category

Genrich Altshuller, the founder of the Theory of Inventive Problem Solving (TRIZ), grouped hundreds of thousands of specific problems into affinity categories as a part of his research. The idea was to identify common patterns and principles that could be applied to solve a wide range of problems. These affinity categories became the basis for the 40 inventive principles and other tools in TRIZ, which are designed to offer systematic approaches to problem-solving across various disciplines.

By categorizing problems into affinity groups, Altshuller aimed to transcend the specifics of each problem, focusing instead on their underlying structure. This enables a level of abstraction that allows for the application of generalized solutions. His work has had a significant impact, especially in engineering and product development, where TRIZ methodologies are often applied.

In the context of Genrich Altshuller’s Theory of Inventive Problem Solving (TRIZ), an affinity category is a classification that groups various problems based on their underlying structure or the principles that can solve them. Instead of looking at problems as isolated challenges, Altshuller’s affinity categories allow for the examination of problems at a more abstract level.

The term “affinity” in this context implies a shared characteristic or relationship among a group of problems. The affinity categories help in identifying problems that, although they may appear different on the surface, share a similar structure and can often be solved using similar approaches.

  1. Data Collection: Altshuller and his team analyzed a large number of patents and solutions to various engineering problems.

  2. Pattern Identification: They looked for recurring themes and patterns in the problems and their solutions.

  3. Principle Extraction: Based on these patterns, they identified generalized principles that could solve multiple problems.

  4. Categorization: Finally, problems were grouped into categories based on these principles. Each category represents a set of problems that can be tackled using a similar inventive principle or set of principles.

The affinity categories serve as a basis for TRIZ’s 40 inventive principles, contradiction matrix, and other problem-solving tools. They enable problem solvers to approach challenges systematically, using proven principles that have solved similar problems in the past.

Identifying the underlying structure of a programming problem involves a series of steps that help you extract the essential features and constraints of the problem. These steps guide you in formulating an effective solution.

  1. Understand the Problem: Read the problem statement carefully. Look for what the problem is asking for and what it provides as inputs.

  2. Isolate Key Components: Identify key elements like variables, data structures, and operations. For example, does the problem involve arrays, trees, or graphs? Is it asking for optimization, counting, or something else?

  3. Look for Patterns: Are there recurring themes or sequences in the problem? For instance, do you see a need for sorting, searching, or traversing a data structure?

  4. Identify Constraints: Note the time and space complexity constraints. These will guide you on what kind of solution is feasible.

  5. Categorize: Try to categorize the problem into known types like “Dynamic Programming,” “Greedy,” “Graph Theory,” etc. This will give you clues about the underlying structure and possible approaches to solve it.

  6. Use Test Cases: Before even coding, think through some example cases. This can help in understanding edge cases and also give insights into the problem’s structure.

  7. Break it Down: Decompose the problem into smaller parts or steps. Each step should be a simpler problem to solve. The manner in which a problem can be decomposed often reveals its structure.

  8. Map to Known Problems: Think about whether this problem or its sub-problems resemble any well-known problems or algorithms. Knowing that a problem is a variant of, say, a well-known sorting problem can instantly provide structure.

  9. Iterate: Sometimes the structure isn’t clear initially. You may need to revisit your categorization or decomposition as you start solving the problem. Iterative refinement can help make the structure more clear.

  10. Consult Others: Sometimes discussing the problem with others can help reveal hidden structures or perspectives you may have missed.

Understanding the underlying structure will guide you in choosing the right algorithmic and data structure approaches, thus making problem-solving more efficient.