惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
Vulnerabilities – Threatpost
Hacker News: Ask HN
Hacker News: Ask HN
S
Schneier on Security
G
GRAHAM CLULEY
AWS News Blog
AWS News Blog
C
CERT Recently Published Vulnerability Notes
T
The Exploit Database - CXSecurity.com
P
Privacy International News Feed
Cyberwarzone
Cyberwarzone
Spread Privacy
Spread Privacy
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
T
Tor Project blog
月光博客
月光博客
M
MIT News - Artificial intelligence
Stack Overflow Blog
Stack Overflow Blog
E
Exploit-DB.com RSS Feed
V
V2EX
量子位
Apple Machine Learning Research
Apple Machine Learning Research
J
Java Code Geeks
C
Cisco Blogs
G
Google Developers Blog
GbyAI
GbyAI
C
Check Point Blog
云风的 BLOG
云风的 BLOG
Cisco Talos Blog
Cisco Talos Blog
Jina AI
Jina AI
P
Palo Alto Networks Blog
Cloudbric
Cloudbric
N
Netflix TechBlog - Medium
酷 壳 – CoolShell
酷 壳 – CoolShell
C
Cybersecurity and Infrastructure Security Agency CISA
S
Secure Thoughts
雷峰网
雷峰网
博客园 - 三生石上(FineUI控件)
P
Privacy & Cybersecurity Law Blog
O
OpenAI News
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
有赞技术团队
有赞技术团队
I
Intezer
Blog — PlanetScale
Blog — PlanetScale
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Schneier on Security
Schneier on Security
Microsoft Security Blog
Microsoft Security Blog
D
DataBreaches.Net
Help Net Security
Help Net Security
S
Security Archives - TechRepublic
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
H
Hackread – Cybersecurity News, Data Breaches, AI and More
aimingoo的专栏
aimingoo的专栏

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant Common SOC 2 Failures (Real World) Stop Vibe-Checking Your AI App: A Practical Guide to Evals How to Use SonarQube and SonarScanner Locally to Level Up Your Code Quality Your Next To-Do App Is Dead — I Replaced Mine with an OpenClaw AI Sign a Nostr event in 60 lines of Python using coincurve — no nostr-sdk, no nbxplorer, no rust toolchain ITGC Audit Explained Like You’re in Big 4 Patch Tuesday abril 2026: Microsoft parcha 163 vulnerabilidades y un zero-day en SharePoint Stop scraping everything: a better way to track competitor price changes Listing on MCPize + the Official MCP Registry while routing payments OUTSIDE the marketplace — how I kept 100% of my x402 revenue Building an AI-Powered Risk Intelligence System Using Serverless Architecture Why We Ripped Function Overloading Out of Our AI Toolchain Testing AI-Generated Code: How to Actually Know If It Works SaaS Churn Is Killing Your Business. Here Is What to Do About It (Without a Support Team) The Speed of AI Is No Longer Linear - And Self-Improving Models Are Why How to Implement RBAC for MCP Tools: A Practical Guide for Engineering Teams From Standard Quote to Persuasive Proposal: AI Automation for Arborists I built a CLI that scaffolds complete multi-tenant SaaS apps Axios CVE-2025–62718: The Silent SSRF Bug That Could Be Hiding in Your Node.js App Right Now The dashboard that ended our friendship Data Pipelines Explained Simply (and How to Build Them with Python) The Hidden Cost of AI Systems Nobody Talks About. undefined vs undeclared, and how typeof behaves Switching from file-based jobs to NATS/Kafka in Rust without changing code io_uring Adventures: Rust Servers That Love Syscalls Why Agentic AI is Killing the Traditional Database The POUR principles of web accessibility for developers and designers Quantum Neural Network 3D — A Deep Dive into Interactive WebGL Visualization How To Install Caveman In Codex On macOS And Windows Automation Pipeline Reliability: Why Your Workflow Breaks When Nobody Is Watching I Built an 'Open World' AI Coding Agent — It Works From ANY Folder From Freelancing to Product: A Tech Service Company's SaaS Transformation China's AI Giants: Adding Tencent Hunyuan & ByteDance Doubao to AI University (74 Providers) On the Vibe Coders and Their Lies clerk: Auto-Summarize Your Claude Code Sessions AI Weekly — 2026/04/10–04/17 | The Model Lockdown Is Here, but the Toolchain Is the Real Battleground AI 週報 — 2026/04/10–2026/04/17 模型封鎖潮來了,但工具鏈才是真戰場 Maybe this is how Open-Source apps are born... 🚀 Fine-Tune LLMs with LoRA and QLoRA: 2026 Guide tRPC v11 + Next.js App Router: End-to-End Type Safety Without the Boilerplate ShadCN UI in 2026: Why I Stopped Installing Component Libraries and Started Owning My Components SaaS Billing in React Server Components: Stripe + Supabase Without a Single `useEffect` Join our DEV Weekend Challenge — $1,000 in Prizes Across TEN winners! Submissions Due April 20 at 6:59 AM UTC. Implementing FSRS Spaced Repetition in Flutter + Supabase — Adding Memory Science to an AI Learning App "I Texted My Localhost From the Train — Claude Code Fixed the Bug Before I Got Home" I Built a Sales Prep AI and It Went Deeper Than Expected Design to Code #2: One JSON, Eleven Outputs Solving the 100M-Row Problem: A Summary Table Pattern for High-Volume Push Notification Logs Flutter Web With Wasm: What Actually Changes For Developers I Built 50 Royalty-Free Soundtracks for My Side Project in a Weekend Using AI Music Generation The Vibe Coding Security Checklist: 7 Things to Check Before You Ship Stop Letting Googlebot Guess Fix Your React App's SEO Right Desconstruindo o Streaming do LinkedIn: Como Criar um Engine de Extração de Vídeo de Alta Performance com HLS e FFmpeg (EDA Part-1) EDA (Exploratory Data Analysis) Explained With Real Life — Why Looking at Your Data Is the Most Important Step in Machine Learning Brand Relationship Management at Scale: Our 4-Touch Outreach System for 200+ Brands Why String.fromEnvironment() Might Return an Empty String in Dart JGuardrails 1.0.0 — Hardening Java LLM Apps Against Jailbreaks, Toxicity, and Prompt Injection Plan and Schedule a Full Week of Threads Content From One Claude Conversation Coding Cat Oran Ep3, Five Tables Changed Everything Updated: BFF Pattern I'm done watching freelancers get buried by 200 proposals. So I'm building the alternative. This is my first post BFS Algorithm in Java Step by Step Tutorial with Examples Tracking LLM Pricing Monthly: An Open Dataset for 22 AI Models How We Measure Content ROI on a Comparison Site: Revenue Attribution Without Perfect Data Introducing Nova AI Ops: The AI-Native Operating System for SRE Teams I built a free desktop video downloader for Windows — Grabbit How Talkie OCR Helps Vision-Impaired & Dyslexic Users Read the World Around Them VRCFaceTracking安装和iPhone面捕配置教程,有bug Even CrowdStrike Can't See Your Agents The Automation Gold Rush: What n8n Workflows and Claude Are Opening Up for Developers Right Now
¿Búsqueda Binaria desde cero: la guía definitiva para dominar algoritmos?
Juan Carlos Garcia Esquivel · 2026-06-16 · via DEV Community

binary-search-hero.png

¿Cómo encontrar una aguja en un pajar de mil millones de elementos en tan solo 30 pasos? La Búsqueda Binaria (Binary Search) es el algoritmo fundamental que hace esto posible al descartar la mitad de las opciones en cada comparación. En esta guía exploraremos sus bases conceptuales, su implementación robusta en Go y los detalles de bajo nivel indispensables para entrevistas técnicas.

Tabla de contenidos

  • El problema de buscar a ciegas
  • Visualización del algoritmo en acción
  • Cómo se usa: Implementación en Go (1.18+)
  • Variaciones clave en la práctica
  • Para no morir en el intento y consejos que no pediste
  • Trade-offs y análisis de complejidad
  • Reflexión Final

El problema de buscar a ciegas

Imagina que estás buscando una palabra en un diccionario físico de 1000 páginas. No empiezas desde la página uno y pasas de una en una hasta encontrarla; eso sería una búsqueda lineal con una complejidad de O(n)O(n) . En su lugar, abres el libro aproximadamente por la mitad. Si la palabra que buscas empieza con una letra posterior, descartas toda la primera mitad del libro y repites el proceso en la mitad restante.

Este enfoque intuitivo es la esencia de la Búsqueda Binaria. A nivel de desarrollo, este algoritmo es indispensable para optimizar búsquedas en grandes volúmenes de datos donde realizar comparaciones secuenciales es demasiado costoso para el rendimiento del sistema.

¿Qué es la Búsqueda Binaria?

La Búsqueda Binaria es un método de búsqueda que localiza la posición de un valor objetivo (target) dentro de una estructura de datos lineal previamente ordenada. Utiliza el principio de diseño de algoritmos Divide and Conquer (Divide y Vencerás) para reducir el espacio de búsqueda a la mitad en cada iteración.

Conceptos clave

Para dominar el algoritmo, es fundamental entender los siguientes términos técnicos:

  • Target: El valor específico que deseamos encontrar dentro del conjunto de datos.
  • Mid: El índice que representa el punto medio del rango actual de búsqueda.
  • Low y High: Los punteros que delimitan los extremos inferior y superior del espacio de búsqueda activo.
  • Divide and Conquer: Estrategia que divide un problema en subproblemas más pequeños del mismo tipo hasta que se vuelven sencillos de resolver directamente.

Visualización del algoritmo en acción

Para ilustrar de forma clara cómo funciona la división del espacio de búsqueda, consideremos el arreglo de 9 elementos ordenados y supongamos que nuestro target es el número 9.

Arreglo: [3, 9, 10, 19, 21, 27, 38, 43, 82]

binary search.png

El flujo operativo para encontrar el target 9 paso a paso es el siguiente:

  1. Primera iteración:

    • Inicializamos los límites: low = 0 (elemento 3) y high = 8 (elemento 82).
    • Calculamos el punto medio: mid = 4 (elemento 21).
    • Comparamos el valor en mid con nuestro target: como 21 > 9, descartamos toda la mitad derecha y actualizamos el límite superior: high = 3.
  2. Segunda iteración:

    • Nuestro rango de búsqueda se reduce al sub-arreglo [3, 9, 10, 19] (low = 0 y high = 3).
    • Calculamos el punto medio (redondeando hacia arriba o según la lógica de división visual): mid = 2 (elemento 10).
    • Comparamos el valor en mid con nuestro target: como 10 > 9, descartamos el lado derecho y actualizamos el límite superior: high = 1.
  3. Tercera iteración:

    • El nuevo rango de búsqueda es [3, 9] (low = 0 y high = 1).
    • Calculamos el punto medio: mid = 1 (elemento 9).
    • Comparamos el valor en mid con nuestro target: al verificar que nums[1] == 9, la búsqueda es exitosa y retornamos el índice 1.

Cómo se usa: Implementación en Go (1.18+)

La implementación moderna en Go aprovecha los Generics y la restricción cmp.Ordered para que la función sea reutilizable con cualquier tipo de dato comparable que soporte operadores de ordenación (como enteros, flotantes o cadenas de texto).

package search

import "cmp"

// BinarySearch busca un target en un slice ordenado y retorna su índice, o -1 si no existe.
func BinarySearch[T cmp.Ordered](nums []T, target T) int {
    low, high := 0, len(nums)-1

    for low <= high {
        // Evitamos desbordamientos aritméticos en el cálculo del midpoint
        mid := low + (high-low)/2

        if nums[mid] == target {
            return mid
        } else if nums[mid] < target {
            low = mid + 1
        } else {
            high = mid - 1
        }
    }
    return -1
}

Variaciones clave en la práctica

En entrevistas técnicas de código y problemas de optimización real, rara vez se solicita una implementación directa del algoritmo base. Las siguientes variaciones son fundamentales para resolver retos complejos.

1. Búsqueda de primera ocurrencia (FindFirst)

Cuando el conjunto de datos contiene elementos duplicados y se requiere encontrar el límite izquierdo de la coincidencia, debemos continuar la búsqueda en la mitad izquierda del arreglo incluso después de haber encontrado una coincidencia inicial. Para ver una explicación detallada de esta variante y conceptos relacionados, puedes consultar la nota sobre First Occurrence with Duplicates o Lower Bound (Binary Search).

package search

import "cmp"

// FindFirst encuentra el índice de la primera ocurrencia de un target.
func FindFirst[T cmp.Ordered](nums []T, target T) int {
    low, high := 0, len(nums)-1
    result := -1

    for low <= high {
        mid := low + (high-low)/2

        if nums[mid] == target {
            result = mid
            high = mid - 1 // Continuamos reduciendo el espacio a la izquierda
        } else if nums[mid] < target {
            low = mid + 1
        } else {
            high = mid - 1
        }
    }
    return result
}

2. Búsqueda en arreglos no monótonos

Existen escenarios donde el arreglo no está ordenado linealmente en su totalidad, pero cuenta con propiedades de orden parcial. Un caso clásico es la búsqueda de un pico en un arreglo unimodal, el cual se analiza detenidamente en la nota sobre Peak of a Mountain Array.

Para no morir en el intento y consejos que no pediste

Implementar la búsqueda binaria sin errores requiere conocer ciertas sutilezas que diferencian una solución junior de una propuesta senior.

Evita el Integer Overflow

El cálculo clásico del punto medio mid = (low + high) / 2 puede provocar un desbordamiento de enteros (Integer Overflow) en lenguajes de tipado estático como Java o C++ si el arreglo es extremadamente grande.

Esto sucede porque si la suma de los índices low y high supera el valor máximo permitido para un entero de 32 bits ( 231−1=2,147,483,6472^{31} - 1 = 2,147,483,647 ), el resultado se desborda y se convierte en un número negativo en la representación de complemento a dos. Al dividir este valor negativo entre 2, se obtiene un índice negativo, lo que provoca inmediatamente una excepción de acceso fuera de límites (Out of Bounds) y hace que el programa falle.

Para evitar este fallo, se debe utilizar la fórmula matemáticamente equivalente:

mid=low+high−low2 mid = low + \frac{high - low}{2}

¿Por qué es segura esta alternativa?
Como high >= low, la diferencia high - low siempre es un número positivo y nunca excederá el tamaño máximo del arreglo (el cual, por definición de memoria del hardware, ya cabe en un entero estándar). Al dividir esta diferencia entre 2 y sumarla a low, el valor intermedio siempre se mantendrá acotado entre low y high, garantizando que nunca se sobrepase el límite máximo de almacenamiento del tipo de dato.

Para profundizar en este error histórico y su impacto en sistemas reales, puedes consultar la investigación de Google Research sobre el Overflow Bug o revisar la nota detallada sobre Integer Overflow in Midpoint Calculation.

Búsqueda Binaria Implícita

No te limites a buscar sobre arreglos físicos. Si puedes definir una función monotónica sobre un rango continuo o discreto de posibles respuestas (es decir, una función que siempre crece o decrece), puedes aplicar la Búsqueda Binaria sobre el rango de respuestas posibles.

Trade-offs y análisis de complejidad

La Búsqueda Binaria ofrece un rendimiento excepcional, pero exige condiciones estrictas de operación que debes analizar antes de implementarla.

Factor Ventaja Desventaja
Tiempo de búsqueda Complejidad de O(log⁡n)O(\log n) extremadamente rápida y escalable. Requiere que los datos estén previamente ordenados.
Complejidad de espacio Operación in-place con consumo espacial de O(1)O(1) de forma iterativa. La versión recursiva consume O(log⁡n)O(\log n) de memoria en el stack de llamadas.
Acceso a datos Óptimo para arreglos donde el acceso aleatorio toma O(1)O(1) . Ineficiente para listas enlazadas donde el acceso a un índice toma O(n)O(n) .

Para poner en práctica estos conceptos y resolver problemas reales de algoritmos, puedes consultar el recurso interactivo de LeetCode Explore sobre Búsqueda Binaria.

Reflexión Final

La Búsqueda Binaria no es solo un algoritmo para buscar números; representa una forma de pensar basada en la reducción sistemática de problemas complejos. Al estructurar tus datos ordenadamente, habilitas la capacidad de procesar grandes volúmenes de información en milisegundos.

¿Quieres seguir dominando patrones de búsqueda? Te sugiero explorar cómo optimizar búsquedas complejas mediante el patrón de Técnica de Dos Punteros.