Como criar uma pesquisa linear e algoritmo de pesquisa binária em JS

Na ciência da computação, o uso de estruturas de dados e algoritmos é extenso e importante. A estrutura de dados refere-se ao conceito de como podemos armazenar e organizar dados de forma eficiente. Por outro lado, o termo algoritmo refere-se ao conceito do conjunto de etapas que estão sendo seguidas para resolver um determinado problema.

Podemos usar Estruturas de Dados para organizar dados e algoritmos que processam esses dados para resolver um problema específico. O conhecimento de estruturas de dados e algoritmos faz a diferença entre um programador e um programador melhor.

Um programador que tenha conhecimento de Estruturas de Dados e algoritmos escreve um programa eficiente para reduzir custos. Aqui, neste tutorial, implementaremos a pesquisa linear e o algoritmo de pesquisa binária usando JavaScript. Todos nós sabemos que JavaScript é a linguagem de programação número um para .

Se você é um desenvolvedor e está tentando tornar seu conhecimento diferente dos outros, este artigo o ajudará a chegar lá. Ao final deste tutorial, você conhecerá o conceito de algoritmos de busca linear e binária e quais algoritmos escolher e como implementá-los usando a linguagem JavaScript.

Pré-requisitos:

Não há regras rígidas e rápidas para concluir este tutorial. Mas se você quiser tirar o máximo proveito disso, você precisa manter algumas coisas em mente.

  • O computador está configurado com uma ligação à Internet.
  • Conhecimento básico de loops JavaScript.
  • Editor de texto - Você pode escolher qualquer editor de texto no qual possa escrever código JavaScript, como texto sublime, nod++ , etc. Neste tutorial usaremos o código do estúdio intuitivo.
  • Instalou o NodeJS em seu computador. Estamos usando o Node versão v16.14.2. Você pode usar esta versão ou superior. Mas você não deve usar a versão do nó abaixo de 10.0.0 ao concluir este tutorial.
  • Legal se você não tem um pouco de conhecimento de JavaScript, não se preocupe, nós vamos cobrir isso mais tarde neste tutorial.

Tópicos abordados neste guia:

Neste guia, abordaremos o seguinte:

  • Matrizes JavaScript e Conceitos de Matriz
  • Implementar pesquisa linear
  • Pesquisa Linear de Análise de Complexidade de Tempo com Histograma
  • Implementar pesquisa binária
  • Pesquisa binária de análise de complexidade de tempo com gráfico
  • Pesquisa binária independente de exemplo ou pedido
  • Inferência

Matrizes JavaScript e Conceitos de Matriz

Na ciência da computação, um array é considerado uma Estrutura de Dados, onde um tipo semelhante de dados pode ser armazenado e usado posteriormente, conforme necessário.

Agora, você pode estar perguntando, você pode usar variáveis ​​para armazenar dados, então por que usar um array? A razão por trás disso é que só podemos armazenar um único dado de cada vez com variáveis. Mas em uma única matriz, podemos armazenar muitos tipos de dados semelhantes.

Digamos que você queira armazenar os nomes de 50 alunos em uma classe e se quiser realizar essa ação usando variáveis, precisará usar a variável 50, o que tornará seu código confuso. Agora vamos imaginar, e se o número de alunos fosse 2000 ou até mais em vez de 50. Nesses casos seria quase impossível acompanhá-los se você usasse a variável.

Mas você pode tornar essa ação muito fácil e clara usando array e mais tarde você pode acessar qualquer dado usando o índice de array. Em nossa introdução dissemos que estruturas de dados são usadas para organizar dados de forma eficiente e você já deve ter uma ideia disso a partir do conceito de arrays.

Porque, se você olhar de perto, verá que estamos usando um array para armazenar e organizar uma grande quantidade de dados. Usaremos essa estrutura de dados básica, implementaremos algoritmos.

Importante: Os índices de matriz começam em 0 (zero) e são executados sequencialmente. Suponha que você tenha uma matriz composta por três elementos, a indexação para ela será 0, 1, 2.

Matrizes JavaScript

Array em JavaScript é diferente de outras linguagens de programação e aqui é considerado como Object. Podemos armazenar qualquer tipo de dado no array JavaScript e pode ser Integer, String, Function ou Object. Aqui, não precisamos especificar o tamanho do array antes. Siga o exemplo de código abaixo onde você pode ver que em arrays JavaScript são tratados como objetos.

const arr = [10, 20, 30, 40, 50]

console.log(arr)
console.log(typeof(arr))


// Output:
//[ 10, 20, 30, 40, 50 ]
//'object'

Aqui em JavaScript podemos verificar o tipo de dados usando o typeof()método e estamos tentando verificar o tipo de dados do nosso array JavaScript usando isso e o resultado está na sua frente. Para implementar algoritmos em um array JavaScript, você precisa saber como percorrê-lo, e deixe-me supor que você já sabe sobre isso. Mesmo assim, deixe-me mostrar rapidamente como você pode iterar em uma matriz usando um loop for em JavaScript.

const arr = [10, 20, 30, 40, 50]

for(let i = 0; i<arr.length; i++){
  console.log(arr[i])
}

/*
Output: 
10
20
30
40
50
*/ 

Aqui, na saída, você pode ver que percorremos cada elemento de nossos dados de matriz usando for-loop. Agora estamos prontos para passar para a nossa parte do algoritmo e na próxima vamos implementar um algoritmo de busca linear em JavaScript.

Implementar pesquisa linear

O algoritmo de busca linear é o algoritmo de busca mais popular. Aqui, cada dado é verificado sequencialmente e se os dados existirem, ele retornará o índice desses dados do array, caso contrário, retornará -1. Em outras palavras, os dados foram encontrados se existissem, e os dados não foram encontrados se não existissem. Também é chamado brute-force algorithmvamos ver um exemplo básico de um algoritmo de busca linear usando arrays JavaScript na seção abaixo:

function linearSearch(arr, target){
    for(let i = 0; i < arr.length; i++){
        if(arr[i] === target){
            return console.log('Value found at index',i)
        }
    }
    return  console.log('Value not found')
}

linearSearch([10, 22, 44, 65, 34, 89], 44)

// Output:  Value found at index 2

Esta é a implementação básica do algoritmo de busca linear em JavaScript. Aqui em nosso programa você pode ver que usamos uma função chamada linearSearch()Esta função espera dois parâmetros, o primeiro parâmetro é o valor arraye o segundo parâmetro é targeto valor que o usuário deseja Find. Por fim, você pode ver que, quando passamos um array e um valor de destino, esse algoritmo verifica sequencialmente cada dado e o compara com o valor de destino. quando encontrar dados, basta devolvê-los.

Pesquisa Linear de Análise de Complexidade de Tempo com Histograma

Ao calcular a complexidade de tempo de um algoritmo, devemos sempre considerar o pior cenário. Porque não sabemos qual será a entrada que o usuário dará. No melhor caso, a complexidade de tempo do algoritmo de busca linear é O(1) e no pior caso é O(n) Isso significa que se tivermos uma matriz de 100 núcleos de dados, no melhor caso, ele fará apenas uma pesquisa para encontrar os dados e, na pior das hipóteses, você levará 100 pesquisas para encontrar os dados. Dê uma olhada no gráfico da complexidade de tempo de um algoritmo de busca linear:

Aqui, você pode ver que a linha do gráfico aumenta à medida que o volume de dados aumenta. Isso significa que podemos dizer que não é aplicável ao trabalhar com uma grande quantidade de dados. Então, qual algoritmo devemos usar para processar grandes quantidades de dados? Na próxima seção, vamos explorar isso.

Implementar pesquisa binária

A pesquisa binária é um tipo de algoritmo usado para descobrir a posição específica do elemento de uma matriz de uma matriz classificada. Também é conhecido como pesquisa de meio intervalo, pesquisa logarítmica ou divisão binária. A base principal deste algoritmo é divide and conquer. Este algoritmo é muito eficiente para processar grandes quantidades de dados. Dê uma olhada na implementação deste algoritmo em JavaScript:

var binarySearch = function(arr, target) {
    let left = 0;
    let right = arr.length - 1

    while(left <= right){
        let mid = Math.floor((left + right)/ 2)

        if(arr[mid] === target){
            return mid
        }else if(arr[mid] > target){
            right = mid - 1
        }else{
            left = mid + 1
        }
    }
    return -1
};

console.log(binarySearch([10,20,33,44,54,65,77,79,80,100],77))

// Output:  6

Aqui, esse algoritmo primeiro dividirá o array e depois verificará se o valor está no lado esquerdo ou direito. Supondo que esteja no lado direito, ele simplesmente remove o elemento esquerdo. Em seguida, divida novamente o restante do tamanho da matriz e assim por diante. Seguindo este método, pode-se descobrir um determinado valor do array em várias pesquisas.

Importante: Você deve sempre lembrar que o algoritmo de busca binária só se aplica a arrays ordenados.

Pesquisa binária de análise de complexidade de tempo com gráfico

O algoritmo de busca binária é muito útil e desempenha um papel importante durante a busca de um dado específico de um array ordenado e a complexidade de tempo deste algoritmo O(log n)significa que o tempo de execução é o tamanho da cabeça. A entrada aumenta com a forma do logaritmo. Digamos, se o tamanho da entrada for 10, levará x vezes, se for 100, levará 2 vezes, se for 1000, levará 3x e assim por diante. Vamos provar este conceito matematicamente na seção abaixo:

Aqui você pode ver que provamos que a complexidade de tempo do algoritmo de busca binária é O(log n) matematicamente. Dê uma olhada no gráfico de complexidade de tempo deste algoritmo na seção abaixo:

algoritmos de busca linear e binária em JavaScript

Aqui, você pode ver que inicialmente a linha está subindo, mas os dados de tempo do gráfico vão cair. Agora é hora de levar nosso conhecimento um passo à frente e ver um problema relacionado à busca binária na próxima seção.

Pesquisa binária independente de exemplo ou pedido

Já sabemos o que é um algoritmo de busca binária e como ele funciona. Agora, se você precisar encontrar um elemento de matriz específico de uma matriz classificada em ordem crescente, poderá implementá-lo facilmente ou, se os elementos da matriz estiverem em ordem decrescente, também poderá encontrá-lo. Mas se você não conhece a ordem da matriz antes, como pode implementar um algoritmo de pesquisa binária para encontrar um dado específico.

Suponha que a matriz possa ser classificada em ordem crescente ou decrescente. Como você pode implementar o algoritmo de pesquisa binária aqui? Veremos a solução na seção seguinte. Mas antes de fazer isso, quero que você pense sobre isso e tente encontrar uma solução e depois combine a sua solução com a nossa.

Quando nosso algoritmo pode encontrar dados de array ordenado ascendente e descendente, ele é chamado Order-Agnostic Binary SearchVeja abaixo o exemplo de código deste algoritmo:

function orderAgnosticBinarySearch(arr, target){
    let left = 0
    let right = arr.length -1

    let mid = Math.floor((left+right)/2)
    let isAsending

    if(arr[left] < arr[right]){
        isAsending = true
    }else{
        isAsending = false
    }
    while(left <= right){
    

        if(arr[mid] === target){
            return mid
        }
        if(isAsending){
            if(arr[mid] > target){
                right = mid - 1
            }else{
                left = mid + 1
            }
        }else{
            if(arr[mid] < target){
                right = mid - 1
            }else{
                left = mid + 1
            }
        }
        
        mid = Math.floor((left+right)/2)
    }
    return -1
}

console.log(orderAgnosticBinarySearch([1,2,3,4,5,77,88,99,100],88))
console.log(orderAgnosticBinarySearch([100,99,88,77,5,4,3,2,1],88))

// Output:
// 6
// 2

JavaScript

Aqui você pode ver que pesquisamos os mesmos dados, mas a partir da matriz classificada em ordem crescente e decrescente. Estamos obtendo a saída 6 para o array ordenado ascendente e 2 para o array ordenado descendente. Isso significa que nosso programa está funcionando perfeitamente e em linguagem de programação esse conceito é chamado de Order Agnostic Binary Search.

conclusão

O conceito de Estruturas de Dados e Algoritmos é enorme. A partir deste tutorial, você conhece apenas a pesquisa binária e a pesquisa linear, como elas funcionam e sua complexidade de tempo. Você também teve a ideia de arrays e arrays JavaScript.

Este guia irá ajudá-lo a desenvolver seu interesse no mundo das Estruturas de Dados e Algoritmos. O domínio desses algoritmos não virá da noite para o dia. Você precisa praticar cada vez mais e tentar experimentar isso. Tente entender o conceito desses algoritmos neste tutorial e tente resolver os problemas em diferentes Online Examiners.

Porque para ser um bom programador você precisa ser um bom solucionador de problemas. Se você completou este tutorial corretamente, deixe-me dar-lhe o desafio. Tente explorar o conceito floore ceilingdepois tente resolver esse problema com busca binária.

Digamos que você tenha um array [1, 5, 6, 8, 11, 15]. Agora, a partir deste array, você precisa descobrir que o piso de 9 é 8 ou o teto de 9 é 11. Isso significa que se o elemento do array existir, então retorne o número de índice desse elemento do array e se não existir, então retorne o piso ou número de índice ceil da matriz.

Isso é tudo sobre esses dois algoritmos. Use este guia como referência para seu estudo e tente resolver este problema e certifique-se de não copiar ou pesquisar os resultados deste problema. Se você resolver esse problema, pode me notar na seção de comentários e, se tiver alguma confusão, também pode descrevê-la na seção de comentários.

fonte: https://codesource.io/

#javascript 

What is GEEK

Buddha Community

Como criar uma pesquisa linear e algoritmo de pesquisa binária em JS

NBB: Ad-hoc CLJS Scripting on Node.js

Nbb

Not babashka. Node.js babashka!?

Ad-hoc CLJS scripting on Node.js.

Status

Experimental. Please report issues here.

Goals and features

Nbb's main goal is to make it easy to get started with ad hoc CLJS scripting on Node.js.

Additional goals and features are:

  • Fast startup without relying on a custom version of Node.js.
  • Small artifact (current size is around 1.2MB).
  • First class macros.
  • Support building small TUI apps using Reagent.
  • Complement babashka with libraries from the Node.js ecosystem.

Requirements

Nbb requires Node.js v12 or newer.

How does this tool work?

CLJS code is evaluated through SCI, the same interpreter that powers babashka. Because SCI works with advanced compilation, the bundle size, especially when combined with other dependencies, is smaller than what you get with self-hosted CLJS. That makes startup faster. The trade-off is that execution is less performant and that only a subset of CLJS is available (e.g. no deftype, yet).

Usage

Install nbb from NPM:

$ npm install nbb -g

Omit -g for a local install.

Try out an expression:

$ nbb -e '(+ 1 2 3)'
6

And then install some other NPM libraries to use in the script. E.g.:

$ npm install csv-parse shelljs zx

Create a script which uses the NPM libraries:

(ns script
  (:require ["csv-parse/lib/sync$default" :as csv-parse]
            ["fs" :as fs]
            ["path" :as path]
            ["shelljs$default" :as sh]
            ["term-size$default" :as term-size]
            ["zx$default" :as zx]
            ["zx$fs" :as zxfs]
            [nbb.core :refer [*file*]]))

(prn (path/resolve "."))

(prn (term-size))

(println (count (str (fs/readFileSync *file*))))

(prn (sh/ls "."))

(prn (csv-parse "foo,bar"))

(prn (zxfs/existsSync *file*))

(zx/$ #js ["ls"])

Call the script:

$ nbb script.cljs
"/private/tmp/test-script"
#js {:columns 216, :rows 47}
510
#js ["node_modules" "package-lock.json" "package.json" "script.cljs"]
#js [#js ["foo" "bar"]]
true
$ ls
node_modules
package-lock.json
package.json
script.cljs

Macros

Nbb has first class support for macros: you can define them right inside your .cljs file, like you are used to from JVM Clojure. Consider the plet macro to make working with promises more palatable:

(defmacro plet
  [bindings & body]
  (let [binding-pairs (reverse (partition 2 bindings))
        body (cons 'do body)]
    (reduce (fn [body [sym expr]]
              (let [expr (list '.resolve 'js/Promise expr)]
                (list '.then expr (list 'clojure.core/fn (vector sym)
                                        body))))
            body
            binding-pairs)))

Using this macro we can look async code more like sync code. Consider this puppeteer example:

(-> (.launch puppeteer)
      (.then (fn [browser]
               (-> (.newPage browser)
                   (.then (fn [page]
                            (-> (.goto page "https://clojure.org")
                                (.then #(.screenshot page #js{:path "screenshot.png"}))
                                (.catch #(js/console.log %))
                                (.then #(.close browser)))))))))

Using plet this becomes:

(plet [browser (.launch puppeteer)
       page (.newPage browser)
       _ (.goto page "https://clojure.org")
       _ (-> (.screenshot page #js{:path "screenshot.png"})
             (.catch #(js/console.log %)))]
      (.close browser))

See the puppeteer example for the full code.

Since v0.0.36, nbb includes promesa which is a library to deal with promises. The above plet macro is similar to promesa.core/let.

Startup time

$ time nbb -e '(+ 1 2 3)'
6
nbb -e '(+ 1 2 3)'   0.17s  user 0.02s system 109% cpu 0.168 total

The baseline startup time for a script is about 170ms seconds on my laptop. When invoked via npx this adds another 300ms or so, so for faster startup, either use a globally installed nbb or use $(npm bin)/nbb script.cljs to bypass npx.

Dependencies

NPM dependencies

Nbb does not depend on any NPM dependencies. All NPM libraries loaded by a script are resolved relative to that script. When using the Reagent module, React is resolved in the same way as any other NPM library.

Classpath

To load .cljs files from local paths or dependencies, you can use the --classpath argument. The current dir is added to the classpath automatically. So if there is a file foo/bar.cljs relative to your current dir, then you can load it via (:require [foo.bar :as fb]). Note that nbb uses the same naming conventions for namespaces and directories as other Clojure tools: foo-bar in the namespace name becomes foo_bar in the directory name.

To load dependencies from the Clojure ecosystem, you can use the Clojure CLI or babashka to download them and produce a classpath:

$ classpath="$(clojure -A:nbb -Spath -Sdeps '{:aliases {:nbb {:replace-deps {com.github.seancorfield/honeysql {:git/tag "v2.0.0-rc5" :git/sha "01c3a55"}}}}}')"

and then feed it to the --classpath argument:

$ nbb --classpath "$classpath" -e "(require '[honey.sql :as sql]) (sql/format {:select :foo :from :bar :where [:= :baz 2]})"
["SELECT foo FROM bar WHERE baz = ?" 2]

Currently nbb only reads from directories, not jar files, so you are encouraged to use git libs. Support for .jar files will be added later.

Current file

The name of the file that is currently being executed is available via nbb.core/*file* or on the metadata of vars:

(ns foo
  (:require [nbb.core :refer [*file*]]))

(prn *file*) ;; "/private/tmp/foo.cljs"

(defn f [])
(prn (:file (meta #'f))) ;; "/private/tmp/foo.cljs"

Reagent

Nbb includes reagent.core which will be lazily loaded when required. You can use this together with ink to create a TUI application:

$ npm install ink

ink-demo.cljs:

(ns ink-demo
  (:require ["ink" :refer [render Text]]
            [reagent.core :as r]))

(defonce state (r/atom 0))

(doseq [n (range 1 11)]
  (js/setTimeout #(swap! state inc) (* n 500)))

(defn hello []
  [:> Text {:color "green"} "Hello, world! " @state])

(render (r/as-element [hello]))

Promesa

Working with callbacks and promises can become tedious. Since nbb v0.0.36 the promesa.core namespace is included with the let and do! macros. An example:

(ns prom
  (:require [promesa.core :as p]))

(defn sleep [ms]
  (js/Promise.
   (fn [resolve _]
     (js/setTimeout resolve ms))))

(defn do-stuff
  []
  (p/do!
   (println "Doing stuff which takes a while")
   (sleep 1000)
   1))

(p/let [a (do-stuff)
        b (inc a)
        c (do-stuff)
        d (+ b c)]
  (prn d))
$ nbb prom.cljs
Doing stuff which takes a while
Doing stuff which takes a while
3

Also see API docs.

Js-interop

Since nbb v0.0.75 applied-science/js-interop is available:

(ns example
  (:require [applied-science.js-interop :as j]))

(def o (j/lit {:a 1 :b 2 :c {:d 1}}))

(prn (j/select-keys o [:a :b])) ;; #js {:a 1, :b 2}
(prn (j/get-in o [:c :d])) ;; 1

Most of this library is supported in nbb, except the following:

  • destructuring using :syms
  • property access using .-x notation. In nbb, you must use keywords.

See the example of what is currently supported.

Examples

See the examples directory for small examples.

Also check out these projects built with nbb:

API

See API documentation.

Migrating to shadow-cljs

See this gist on how to convert an nbb script or project to shadow-cljs.

Build

Prequisites:

  • babashka >= 0.4.0
  • Clojure CLI >= 1.10.3.933
  • Node.js 16.5.0 (lower version may work, but this is the one I used to build)

To build:

  • Clone and cd into this repo
  • bb release

Run bb tasks for more project-related tasks.

Download Details:
Author: borkdude
Download Link: Download The Source Code
Official Website: https://github.com/borkdude/nbb 
License: EPL-1.0

#node #javascript

Como criar uma pesquisa linear e algoritmo de pesquisa binária em JS

Na ciência da computação, o uso de estruturas de dados e algoritmos é extenso e importante. A estrutura de dados refere-se ao conceito de como podemos armazenar e organizar dados de forma eficiente. Por outro lado, o termo algoritmo refere-se ao conceito do conjunto de etapas que estão sendo seguidas para resolver um determinado problema.

Podemos usar Estruturas de Dados para organizar dados e algoritmos que processam esses dados para resolver um problema específico. O conhecimento de estruturas de dados e algoritmos faz a diferença entre um programador e um programador melhor.

Um programador que tenha conhecimento de Estruturas de Dados e algoritmos escreve um programa eficiente para reduzir custos. Aqui, neste tutorial, implementaremos a pesquisa linear e o algoritmo de pesquisa binária usando JavaScript. Todos nós sabemos que JavaScript é a linguagem de programação número um para .

Se você é um desenvolvedor e está tentando tornar seu conhecimento diferente dos outros, este artigo o ajudará a chegar lá. Ao final deste tutorial, você conhecerá o conceito de algoritmos de busca linear e binária e quais algoritmos escolher e como implementá-los usando a linguagem JavaScript.

Pré-requisitos:

Não há regras rígidas e rápidas para concluir este tutorial. Mas se você quiser tirar o máximo proveito disso, você precisa manter algumas coisas em mente.

  • O computador está configurado com uma ligação à Internet.
  • Conhecimento básico de loops JavaScript.
  • Editor de texto - Você pode escolher qualquer editor de texto no qual possa escrever código JavaScript, como texto sublime, nod++ , etc. Neste tutorial usaremos o código do estúdio intuitivo.
  • Instalou o NodeJS em seu computador. Estamos usando o Node versão v16.14.2. Você pode usar esta versão ou superior. Mas você não deve usar a versão do nó abaixo de 10.0.0 ao concluir este tutorial.
  • Legal se você não tem um pouco de conhecimento de JavaScript, não se preocupe, nós vamos cobrir isso mais tarde neste tutorial.

Tópicos abordados neste guia:

Neste guia, abordaremos o seguinte:

  • Matrizes JavaScript e Conceitos de Matriz
  • Implementar pesquisa linear
  • Pesquisa Linear de Análise de Complexidade de Tempo com Histograma
  • Implementar pesquisa binária
  • Pesquisa binária de análise de complexidade de tempo com gráfico
  • Pesquisa binária independente de exemplo ou pedido
  • Inferência

Matrizes JavaScript e Conceitos de Matriz

Na ciência da computação, um array é considerado uma Estrutura de Dados, onde um tipo semelhante de dados pode ser armazenado e usado posteriormente, conforme necessário.

Agora, você pode estar perguntando, você pode usar variáveis ​​para armazenar dados, então por que usar um array? A razão por trás disso é que só podemos armazenar um único dado de cada vez com variáveis. Mas em uma única matriz, podemos armazenar muitos tipos de dados semelhantes.

Digamos que você queira armazenar os nomes de 50 alunos em uma classe e se quiser realizar essa ação usando variáveis, precisará usar a variável 50, o que tornará seu código confuso. Agora vamos imaginar, e se o número de alunos fosse 2000 ou até mais em vez de 50. Nesses casos seria quase impossível acompanhá-los se você usasse a variável.

Mas você pode tornar essa ação muito fácil e clara usando array e mais tarde você pode acessar qualquer dado usando o índice de array. Em nossa introdução dissemos que estruturas de dados são usadas para organizar dados de forma eficiente e você já deve ter uma ideia disso a partir do conceito de arrays.

Porque, se você olhar de perto, verá que estamos usando um array para armazenar e organizar uma grande quantidade de dados. Usaremos essa estrutura de dados básica, implementaremos algoritmos.

Importante: Os índices de matriz começam em 0 (zero) e são executados sequencialmente. Suponha que você tenha uma matriz composta por três elementos, a indexação para ela será 0, 1, 2.

Matrizes JavaScript

Array em JavaScript é diferente de outras linguagens de programação e aqui é considerado como Object. Podemos armazenar qualquer tipo de dado no array JavaScript e pode ser Integer, String, Function ou Object. Aqui, não precisamos especificar o tamanho do array antes. Siga o exemplo de código abaixo onde você pode ver que em arrays JavaScript são tratados como objetos.

const arr = [10, 20, 30, 40, 50]

console.log(arr)
console.log(typeof(arr))


// Output:
//[ 10, 20, 30, 40, 50 ]
//'object'

Aqui em JavaScript podemos verificar o tipo de dados usando o typeof()método e estamos tentando verificar o tipo de dados do nosso array JavaScript usando isso e o resultado está na sua frente. Para implementar algoritmos em um array JavaScript, você precisa saber como percorrê-lo, e deixe-me supor que você já sabe sobre isso. Mesmo assim, deixe-me mostrar rapidamente como você pode iterar em uma matriz usando um loop for em JavaScript.

const arr = [10, 20, 30, 40, 50]

for(let i = 0; i<arr.length; i++){
  console.log(arr[i])
}

/*
Output: 
10
20
30
40
50
*/ 

Aqui, na saída, você pode ver que percorremos cada elemento de nossos dados de matriz usando for-loop. Agora estamos prontos para passar para a nossa parte do algoritmo e na próxima vamos implementar um algoritmo de busca linear em JavaScript.

Implementar pesquisa linear

O algoritmo de busca linear é o algoritmo de busca mais popular. Aqui, cada dado é verificado sequencialmente e se os dados existirem, ele retornará o índice desses dados do array, caso contrário, retornará -1. Em outras palavras, os dados foram encontrados se existissem, e os dados não foram encontrados se não existissem. Também é chamado brute-force algorithmvamos ver um exemplo básico de um algoritmo de busca linear usando arrays JavaScript na seção abaixo:

function linearSearch(arr, target){
    for(let i = 0; i < arr.length; i++){
        if(arr[i] === target){
            return console.log('Value found at index',i)
        }
    }
    return  console.log('Value not found')
}

linearSearch([10, 22, 44, 65, 34, 89], 44)

// Output:  Value found at index 2

Esta é a implementação básica do algoritmo de busca linear em JavaScript. Aqui em nosso programa você pode ver que usamos uma função chamada linearSearch()Esta função espera dois parâmetros, o primeiro parâmetro é o valor arraye o segundo parâmetro é targeto valor que o usuário deseja Find. Por fim, você pode ver que, quando passamos um array e um valor de destino, esse algoritmo verifica sequencialmente cada dado e o compara com o valor de destino. quando encontrar dados, basta devolvê-los.

Pesquisa Linear de Análise de Complexidade de Tempo com Histograma

Ao calcular a complexidade de tempo de um algoritmo, devemos sempre considerar o pior cenário. Porque não sabemos qual será a entrada que o usuário dará. No melhor caso, a complexidade de tempo do algoritmo de busca linear é O(1) e no pior caso é O(n) Isso significa que se tivermos uma matriz de 100 núcleos de dados, no melhor caso, ele fará apenas uma pesquisa para encontrar os dados e, na pior das hipóteses, você levará 100 pesquisas para encontrar os dados. Dê uma olhada no gráfico da complexidade de tempo de um algoritmo de busca linear:

Aqui, você pode ver que a linha do gráfico aumenta à medida que o volume de dados aumenta. Isso significa que podemos dizer que não é aplicável ao trabalhar com uma grande quantidade de dados. Então, qual algoritmo devemos usar para processar grandes quantidades de dados? Na próxima seção, vamos explorar isso.

Implementar pesquisa binária

A pesquisa binária é um tipo de algoritmo usado para descobrir a posição específica do elemento de uma matriz de uma matriz classificada. Também é conhecido como pesquisa de meio intervalo, pesquisa logarítmica ou divisão binária. A base principal deste algoritmo é divide and conquer. Este algoritmo é muito eficiente para processar grandes quantidades de dados. Dê uma olhada na implementação deste algoritmo em JavaScript:

var binarySearch = function(arr, target) {
    let left = 0;
    let right = arr.length - 1

    while(left <= right){
        let mid = Math.floor((left + right)/ 2)

        if(arr[mid] === target){
            return mid
        }else if(arr[mid] > target){
            right = mid - 1
        }else{
            left = mid + 1
        }
    }
    return -1
};

console.log(binarySearch([10,20,33,44,54,65,77,79,80,100],77))

// Output:  6

Aqui, esse algoritmo primeiro dividirá o array e depois verificará se o valor está no lado esquerdo ou direito. Supondo que esteja no lado direito, ele simplesmente remove o elemento esquerdo. Em seguida, divida novamente o restante do tamanho da matriz e assim por diante. Seguindo este método, pode-se descobrir um determinado valor do array em várias pesquisas.

Importante: Você deve sempre lembrar que o algoritmo de busca binária só se aplica a arrays ordenados.

Pesquisa binária de análise de complexidade de tempo com gráfico

O algoritmo de busca binária é muito útil e desempenha um papel importante durante a busca de um dado específico de um array ordenado e a complexidade de tempo deste algoritmo O(log n)significa que o tempo de execução é o tamanho da cabeça. A entrada aumenta com a forma do logaritmo. Digamos, se o tamanho da entrada for 10, levará x vezes, se for 100, levará 2 vezes, se for 1000, levará 3x e assim por diante. Vamos provar este conceito matematicamente na seção abaixo:

Aqui você pode ver que provamos que a complexidade de tempo do algoritmo de busca binária é O(log n) matematicamente. Dê uma olhada no gráfico de complexidade de tempo deste algoritmo na seção abaixo:

algoritmos de busca linear e binária em JavaScript

Aqui, você pode ver que inicialmente a linha está subindo, mas os dados de tempo do gráfico vão cair. Agora é hora de levar nosso conhecimento um passo à frente e ver um problema relacionado à busca binária na próxima seção.

Pesquisa binária independente de exemplo ou pedido

Já sabemos o que é um algoritmo de busca binária e como ele funciona. Agora, se você precisar encontrar um elemento de matriz específico de uma matriz classificada em ordem crescente, poderá implementá-lo facilmente ou, se os elementos da matriz estiverem em ordem decrescente, também poderá encontrá-lo. Mas se você não conhece a ordem da matriz antes, como pode implementar um algoritmo de pesquisa binária para encontrar um dado específico.

Suponha que a matriz possa ser classificada em ordem crescente ou decrescente. Como você pode implementar o algoritmo de pesquisa binária aqui? Veremos a solução na seção seguinte. Mas antes de fazer isso, quero que você pense sobre isso e tente encontrar uma solução e depois combine a sua solução com a nossa.

Quando nosso algoritmo pode encontrar dados de array ordenado ascendente e descendente, ele é chamado Order-Agnostic Binary SearchVeja abaixo o exemplo de código deste algoritmo:

function orderAgnosticBinarySearch(arr, target){
    let left = 0
    let right = arr.length -1

    let mid = Math.floor((left+right)/2)
    let isAsending

    if(arr[left] < arr[right]){
        isAsending = true
    }else{
        isAsending = false
    }
    while(left <= right){
    

        if(arr[mid] === target){
            return mid
        }
        if(isAsending){
            if(arr[mid] > target){
                right = mid - 1
            }else{
                left = mid + 1
            }
        }else{
            if(arr[mid] < target){
                right = mid - 1
            }else{
                left = mid + 1
            }
        }
        
        mid = Math.floor((left+right)/2)
    }
    return -1
}

console.log(orderAgnosticBinarySearch([1,2,3,4,5,77,88,99,100],88))
console.log(orderAgnosticBinarySearch([100,99,88,77,5,4,3,2,1],88))

// Output:
// 6
// 2

JavaScript

Aqui você pode ver que pesquisamos os mesmos dados, mas a partir da matriz classificada em ordem crescente e decrescente. Estamos obtendo a saída 6 para o array ordenado ascendente e 2 para o array ordenado descendente. Isso significa que nosso programa está funcionando perfeitamente e em linguagem de programação esse conceito é chamado de Order Agnostic Binary Search.

conclusão

O conceito de Estruturas de Dados e Algoritmos é enorme. A partir deste tutorial, você conhece apenas a pesquisa binária e a pesquisa linear, como elas funcionam e sua complexidade de tempo. Você também teve a ideia de arrays e arrays JavaScript.

Este guia irá ajudá-lo a desenvolver seu interesse no mundo das Estruturas de Dados e Algoritmos. O domínio desses algoritmos não virá da noite para o dia. Você precisa praticar cada vez mais e tentar experimentar isso. Tente entender o conceito desses algoritmos neste tutorial e tente resolver os problemas em diferentes Online Examiners.

Porque para ser um bom programador você precisa ser um bom solucionador de problemas. Se você completou este tutorial corretamente, deixe-me dar-lhe o desafio. Tente explorar o conceito floore ceilingdepois tente resolver esse problema com busca binária.

Digamos que você tenha um array [1, 5, 6, 8, 11, 15]. Agora, a partir deste array, você precisa descobrir que o piso de 9 é 8 ou o teto de 9 é 11. Isso significa que se o elemento do array existir, então retorne o número de índice desse elemento do array e se não existir, então retorne o piso ou número de índice ceil da matriz.

Isso é tudo sobre esses dois algoritmos. Use este guia como referência para seu estudo e tente resolver este problema e certifique-se de não copiar ou pesquisar os resultados deste problema. Se você resolver esse problema, pode me notar na seção de comentários e, se tiver alguma confusão, também pode descrevê-la na seção de comentários.

fonte: https://codesource.io/

#javascript 

Hire Dedicated Node.js Developers - Hire Node.js Developers

If you look at the backend technology used by today’s most popular apps there is one thing you would find common among them and that is the use of NodeJS Framework. Yes, the NodeJS framework is that effective and successful.

If you wish to have a strong backend for efficient app performance then have NodeJS at the backend.

WebClues Infotech offers different levels of experienced and expert professionals for your app development needs. So hire a dedicated NodeJS developer from WebClues Infotech with your experience requirement and expertise.

So what are you waiting for? Get your app developed with strong performance parameters from WebClues Infotech

For inquiry click here: https://www.webcluesinfotech.com/hire-nodejs-developer/

Book Free Interview: https://bit.ly/3dDShFg

#hire dedicated node.js developers #hire node.js developers #hire top dedicated node.js developers #hire node.js developers in usa & india #hire node js development company #hire the best node.js developers & programmers

Desmond Ivana

1602569524

The E-Scooters Wave Is Coming: Steer Your Business To Success

E-scooters are becoming more and more familiar. The compactness, coupled with the skill of evading jam-packed traffics, makes the fast-paced world lean towards this micro-mobility innovation. Besides, with COVID-19 propelling the need for safety and privacy, you do not have drivers in an E-scooters ecosystem! With the system being entirely automated, people can smart-lock and unlock E-scooters without any hassle.

Various top manufacturers are spending quality hours exhaustively on their R&D to shift from fuel-led automobiles to electric power-generating vehicles. Although people hesitate to make investments when it comes to buying an e-vehicle, using such vehicles for commuting is no big deal. If you’re an entrepreneur aiming to launch an Uber for E-Scooters app, now is the time to roll up your sleeves as E-scooters are being legalized in numerous countries, including New York.

Now, let’s discuss the remunerative advantages of E-scooters and why entrepreneurs needn’t hesitate to initiate their E-scooter App development.

Lucrative Benefits of E-Scooters

Outplay traffic effortlessly: One of the main concerns of people worldwide is not reaching the destination on time due to prolonged traffic. With four-wheelers becoming more predominant, the situation is steeping towards the worsening phase. With its compact nature, E-scooters can help people sail past traffic without a sweat. This way, people conserve and utilize their time efficiently.

The environmental impact: As simple as it may sound, automobiles pollute the environment on a massive scale. It is high-time people raise their concerns against environmental degradation. E-scooters are the best alternatives from the environmental perspective. These scooters run on a 500W electric motor, eliminating any form of pollution.

Inexpensive in every aspect: The maintenance and fuel costs of automobiles is way too high as vehicles get older. However, with an E-scooter, all it takes is a rechargeable battery with less or no maintenance at all. Moreover, entrepreneurs get to enhance their profits seamlessly, even after providing economical rides to passengers. There’s only an initial investment cost that an entrepreneur needs to take care of.

The 5-Step Workflow of an E-Scooters App

While building a smartphone application, it is essential to focus on the platform’s workflow. An E-scooter app with a user-friendly architecture and immersive workflow can create an instant impact among the audience. Let’s discuss the simple yet intuitive 5-step workflow here,

  • Users register with the platform and locate E-scooters nearby by enabling their location preferences.

  • Users choose their best-suited E-scooters based on numerous metrics like pricing, battery capacity, ratings, etc.

  • Users unlock the vehicle by scanning the QR code. They initiate their trip and drive towards their destination.

  • Upon reaching the destination, users park the E-scooters securely and smart-lock the vehicle.

  • The app displays the total fare with a detailed breakdown. Users pay the amount via a multitude of payment gateways and share their experience in the form of ratings & reviews.

Features that make the E-Scooter app stand apart

Apps like Lime, Bird, etc., have already set a benchmark when it comes to the E-Scooter app market. You need USPs to lure customer attention. Some of the unique elements worth-considering include,

  • QR scanning - To initiate and terminate rides.

  • In-app wallet - To pay for rides effortlessly.

  • Multi-lingual support - To access the app in the customers’ preferred language.

  • Schedule bookings - To book rides well-in-advance.

  • In-app chat/call - To establish a connection between the support team and users.

  • VoIP-based Call masking - To mask users’ contact details.

  • Geofencing - To map virtual boundaries and keep an eye on E-scooters.

Capitalize on the growing market

Establishing your E-Scooters Rental app at the spur of the moment is highly essential if you wish to scale your business in the shortest possible time. Some of the reasons to initiate your app development right away include,

The unexplored market: The E-Scooter market is still in its nascent stages. Rolling out an app with the right feature-set and approach can help you yield unrestricted revenue.

Competitors are experiencing massive growth: Apps like Lime, Bird, etc., witness unprecedented growth in the past few years. Lime was valued at $2.4 billion in 2019. On the other hand, Bird has spread across 100 cities in Europe. With competitors reaping profits, it is high-time entrepreneurs needn’t hesitate to invest in this business opportunity.

The ‘E’ shift among customers: People are gradually moving towards e-vehicles as a measure to conserve time and environment. By rolling out an on-demand app for E-scooters that is economical, people will inevitably turn towards your platform for the daily commute.

Conclusion

In this modern world, saving time and energy is the need of the hour. Add to that the indispensable role of conserving the environment. E-scooters cater to all these aspects comprehensively. Make the most out of the situation and have no second thoughts about initiating your E-Scooter app development.

#uber for e-scooters #e-scooter app development #e-scooter app #e-scooter rental app #uber like app for e-scooters #uber for e-scooters app

joe biden

1617255938

¿Cómo migrar los buzones de correo de Exchange a la nube de Office 365?

Si tiene problemas para migrar los buzones de correo de Exchange a Office 365, debe leer este artículo para saber cómo migrar los buzones de correo de Exchange EDB a Office 365. Al migrar a Office 365, los usuarios pueden acceder a sus buzones de correo desde cualquier lugar y desde cualquier dispositivo.

En esta publicación, explicaremos las razones detrás de esta migración y una solución profesional para migrar de Exchange a Office 365.

Razones para migrar Exchange Server a la nube de Office 365

Office 365 apareció por primera vez en 2011 y, dado que se considera la mejor plataforma para aquellas organizaciones que desean administrar todo su sistema de correo electrónico en la nube. Estas son las características clave de Office 365:

  1. Permite trabajar desde cualquier lugar y desde cualquier lugar.
  2. No se preocupe por el spam y el malware.
  3. La seguridad proporcionada por Office 365 es altamente confiable.
  4. Controla el costo total y brinda flexibilidad financiera.
  5. Todas las actualizaciones y mejoras son administradas por Microsoft.

¿Cómo migrar los buzones de correo de Exchange a Office 365?

Hay varias formas manuales de migrar los buzones de correo de Exchange EDB a Office 365, pero para evitar estos complicados y prolongados procedimientos, presentamos una solución de terceros, es decir, la herramienta de migración de Exchange, que es automatizada y directa para la migración de Exchange a Office 365. La herramienta funciona rápidamente y migra todos los elementos del buzón de Exchange Server a Office 365.

La herramienta de migración de Datavare Exchange es demasiado fácil de usar y ofrece pasos sencillos para migrar EDB a Office 365:

  1. Descargue e instale el software en su sistema.
  2. Agregue el archivo EDB de Exchange con el botón Examinar.
  3. Seleccione exportar a buzones de correo de Office 365.
  4. Proporcione los detalles de inicio de sesión de la cuenta de Office 365.
  5. Seleccione la carpeta y presione el botón Finalizar.

Por lo tanto, todos sus buzones de correo de Exchange EDB ahora se migran a Office 365.
Nota: puede usar filtros para migrar los elementos de datos deseados de la cuenta de Exchange a la de Office 365

Líneas finales

Este blog le indica una solución profesional para la migración de buzones de correo de Exchange a la cuenta de Office 365. Dado que las soluciones manuales son complicadas, sugerimos la herramienta de migración de Exchange, que es demasiado simple de usar. Los usuarios no se enfrentan a problemas al operar el programa. La mejor parte de este software es que no necesita habilidades técnicas para realizar la migración. Se puede comprender el funcionamiento del software descargando la versión de demostración que permite la migración de los primeros 50 elementos por carpeta.

Más información:- https://www.datavare.com/software/edb-migration.html

#herramienta de migración de intercambio #migración de intercambio #migrar buzones de correo de exchange