Hierarchical binary search over entity space by asking category, region, then first-letter questions to narrow candidates before guessing
Scanned 9/12/2026
Install to Claude Code
npx -y skills add wenmin-wu/ds-skills --skill binary-search-entity-narrowing --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Binary Search Entity Narrowing?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/wenmin-wu-binary-search-entity-narrowing)More formats (shields.io, HTML) on the badges page.
---
name: llm-binary-search-entity-narrowing
description: Hierarchical binary search over entity space by asking category, region, then first-letter questions to narrow candidates before guessing
---
# Binary Search Entity Narrowing
## Overview
When an LLM agent must identify an unknown entity from a large candidate set using yes/no questions, a hierarchical binary search strategy is far more efficient than open-ended questioning. Ask about broad categories first (person/place/thing), then sub-categories (continent/country), then discriminating features (first letter). Each answer halves the remaining candidate space.
## Quick Start
```python
CATEGORIES = ["place", "person", "thing"]
CONTINENTS = ["Europe", "Asia", "Africa", "North America", "South America", "Oceania"]
def ask_question(obs, candidates, cat_guess, con_guess, let_guess,
category_yes, continent_yes):
if cat_guess < len(CATEGORIES) and not category_yes:
q = f"Is the keyword the name of a {CATEGORIES[cat_guess]}?"
return q, cat_guess + 1, con_guess, let_guess
if con_guess < len(CONTINENTS) and not continent_yes:
cat = category_yes[0] if category_yes else "thing"
q = f"Is the {cat} located in {CONTINENTS[con_guess]}?"
return q, cat_guess, con_guess + 1, let_guess
filtered = apply_filters(candidates, category_yes, continent_yes)
letters = filtered['first_letter'].value_counts().index.tolist()
if let_guess < len(letters):
q = f"Does the keyword begin with the letter {letters[let_guess]}?"
return q, cat_guess, con_guess, let_guess + 1
return filtered.sample(1).iloc[0]['keyword'], cat_guess, con_guess, let_guess
```
## Workflow
1. Prepare a candidate keyword list with metadata (category, continent, first letter)
2. Ask category questions first (3 questions max → identifies type)
3. Ask continent/region questions (6 questions max → identifies location)
4. Ask first-letter questions to discriminate remaining candidates
5. When candidate set is small enough, guess directly
## Key Decisions
- **Question order**: broad→narrow maximizes information gain per question
- **Category granularity**: 3-5 top-level categories; more = more questions wasted
- **First letter**: high entropy discriminator — 26 possible values
- **When to guess**: when ≤3 candidates remain, guess the most common one
- **Budget**: 20 questions total — typically 3 category + 6 region + 5 letter + 6 guess attempts
## References
- [Starter Code for Llama 8B LLM - [LB 0.750+]](https://www.kaggle.com/code/cdeotte/starter-code-for-llama-8b-llm-lb-0-750)
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!