ProHoster > Блог > ozi ịntanetị > Ịdozi nsogbu site na ajụjụ ọnụ Google na Javascript: 4 ụzọ dị iche iche
Ịdozi nsogbu site na ajụjụ ọnụ Google na Javascript: 4 ụzọ dị iche iche
Mgbe m na-amụ arụmọrụ nke algọridim, ahụrụ m nke a Nke a bụ vidiyo nke ajụjụ ọnụ Google mock.. Ọ bụghị naanị na-enye echiche nke otu esi eme ajụjụ ọnụ na nnukwu ụlọ ọrụ teknụzụ, kamakwa na-enye gị ohere ịghọta otú edozi nsogbu algọridim dị ka o kwere mee.
Akụkọ a bụ ụdị nkwado na vidiyo. N'ime ya, m na-enye nkọwa na ngwọta niile egosiri, gbakwunyere ụdị ngwọta nke m na Javascript. A na-atụlekwa nuances nke algọridim ọ bụla.
Anyị na -echetara:maka ndị na-agụ Habr niile - ego 10 ruble mgbe ị na-edebanye aha na nkuzi Skillbox ọ bụla site na iji koodu mgbasa ozi Habr.
A na-enye anyị usoro iwu kwadoro yana uru akọwapụtara. A na-arịọ ya ka ịmepụta ọrụ na-alaghachi eziokwu ma ọ bụ ụgha dabere na nchikota ọnụọgụ abụọ ọ bụla n'usoro nwere ike ha nhata uru enyere.
N'ikwu ya n'ụzọ ọzọ, enwere ọnụọgụ abụọ dị n'usoro, x na y, na mgbe agbakwunyere ọnụ ha ruru uru akọwapụtara?
Ọmụmaatụ A
Ọ bụrụ na e nyere anyị nhazi [1, 2, 4, 9] na uru ya bụ 8, ọrụ ahụ ga-alaghachi ụgha n'ihi na ọ dịghị ọnụọgụ abụọ dị n'usoro nwere ike ịgbakwunye ruo 8.
Ọmụmaatụ B
Ma ọ bụrụ na ọ bụ nhazi [1, 2, 4, 4] na uru ya bụ 8, ọrụ ahụ kwesịrị ịlaghachi n'eziokwu n'ihi na 4 + 4 = 8.
Ngwọta 1: ike ike
Oge mgbagwoju anya: O(N²).
Mgbagwoju anya oghere: O(1).
Ihe kacha pụta ìhè bụ iji otu ụzọ loops akwụ akwụ.
const findSum = (arr, val) => {
for (let i = 0; i < arr.length; i++) {
for (let j = 0; j < arr.length; j++) {
if (i !== j && arr[i] + arr[j] === val) {
return true;
};
};
};
return false;
};
Ngwọta a adịghị arụ ọrụ nke ọma n'ihi na ọ na-enyocha nchikota ihe abụọ ọ bụla nwere ike ime n'usoro ma na-atụnyere indices ọ bụla ugboro abụọ. (Dịka ọmụmaatụ, mgbe i = 1 na j = 2 bụ n'ezie otu ihe atụnyere i = 2 na j = 1, ma na nke a ngwọta anyị na-agbalị abụọ nhọrọ).
N'ihi na ngwọta anyị na-eji ụzọ akwụ ụgwọ maka loops, ọ bụ quadratic na oge mgbagwoju anya O(N²).
Ngwọta 2: Ọchụchọ ọnụọgụ abụọ
Oge mgbagwoju anya: O(Nlog(N)).
Mgbagwoju anya oghere: O (1).
Ebe ọ bụ na a na-enye iwu nhazi, anyị nwere ike ịchọ ngwọta site na iji ọnụọgụ ọnụọgụ abụọ. Nke a bụ algọridim kacha arụ ọrụ maka nhazi usoro iwu. Ọchịchọ ọnụọgụ abụọ n'onwe ya nwere oge ịgba ọsọ nke O(log(N)). Otú ọ dị, ị ka kwesịrị iji loop maka ịlele ihe ọ bụla megide ụkpụrụ ndị ọzọ niile.
Nke a bụ ihe ngwọta nwere ike ịdị ka. Iji mee ka ihe doo anya, anyị na-eji ọrụ dị iche iji jikwaa ọchụchọ ọnụọgụ abụọ. Nakwa ọrụ wepụIndex() nke na-eweghachi ụdị nke n'usoro na-ewepu ndeksi enyere.
const findSum = (arr, val) => {
for (let i = 0; i < arr.length; i++){
if (binarySearch(removeIndex(arr, i), val - arr[i])) {
return true;
}
};
return false;
};
const removeIndex = (arr, i) => {
return arr.slice(0, i).concat(arr.slice(i + 1, arr.length));
};
const binarySearch = (arr, val) => {
let start = 0;
let end = arr.length - 1;
let pivot = Math.floor(arr.length / 2);
while (start < end) {
if (val < arr[pivot]) {
end = pivot - 1;
} else if (val > arr[pivot]) {
start = pivot + 1;
};
pivot = Math.floor((start + end) / 2);
if (arr[pivot] === val) {
return true;
}
};
return false;
};
Algọridim na-amalite site na ndeksi [0]. Ọ na-emepụta ụdị nke array na-ewepu nke mbụ ma jiri ọnụọgụ ọnụọgụ abụọ chọpụta ma enwere ike ịgbakwunye ụkpụrụ ndị fọdụrụ na nhazi ahụ iji mepụta nchikota achọrọ. A na-eme ihe a otu ugboro maka mmewere ọ bụla n'usoro.
Maka loop n'onwe ya ga-enwe mgbagwoju anya oge nke O(N), mana n'ime maka loop anyị na-eme ọchụchọ ọnụọgụ abụọ, nke na-enye mgbagwoju anya oge O(Nlog(N)). Ngwọta a dị mma karịa nke gara aga, mana a ka nwere ohere maka mmelite.
Ngwọta 3: Ogologo oge
Oge mgbagwoju anya: O(N).
Mgbagwoju anya oghere: O(1).
Ugbu a, anyị ga-edozi nsogbu ahụ, na-echeta na a na-ahazi nhazi ahụ. Ihe ngwọta bụ iji nọmba abụọ: otu na mmalite na otu na njedebe. Ọ bụrụ na nsonaazụ ya dị iche na nke achọrọ, gbanwee ebe mmalite na njedebe.
N'ikpeazụ, anyị ga-ezute uru achọrọ wee laghachi n'eziokwu, ma ọ bụ mmalite na njedebe ga-agbakọta ma laghachi azụ ụgha.
const findSum = (arr, val) => {
let start = 0;
let end = arr.length - 1;
while (start < end) {
let sum = arr[start] + arr[end];
if (sum > val) {
end -= 1;
} else if (sum < val) {
start += 1;
} else {
return true;
};
};
return false;
};
Ugbu a ihe niile dị mma, ihe ngwọta yiri ka ọ kacha mma. Ma onye ga-ekwe nkwa na e nyere iwu n'usoro?
Gịnịzi?
N'ileba anya na mbụ, anyị nwere ike ibu ụzọ nye nhazi usoro wee jiri ihe ngwọta dị n'elu mee ihe. Ma olee otú nke a ga-esi metụta oge igbu mmadụ?
Algọridim kacha mma bụ ngwa ngwa yana mgbagwoju oge O (Nlog (N)). Ọ bụrụ na anyị ejiri ya na ngwọta kachasị mma anyị, ọ ga-agbanwe arụmọrụ ya site na O(N) gaa O (Nlog(N)). Ọ ga-ekwe omume ịchọta ngwọta ahịrị n'usoro na-enweghị usoro?
Ngwọta 4
Oge mgbagwoju anya: O(N).
Oghere mgbagwoju anya: O(N).
Ee, enwere ngwọta ahịrị; iji mee nke a, anyị kwesịrị ịmepụta usoro ọhụrụ nwere ndepụta nke egwuregwu anyị na-achọ. Azụmahịa ebe a bụ iji ebe nchekwa karịa: ọ bụ naanị ngwọta dị na mpempe akwụkwọ nwere mgbagwoju anya oghere karịa O (1).
Ọ bụrụ na uru nke mbụ nke usoro enyere bụ 1 na uru nchọta bụ 8, anyị nwere ike itinye uru 7 na nhazi "ụkpụrụ nyocha".
Mgbe ahụ, ka anyị na-ahazi akụkụ nke ọ bụla nke nhazi ahụ, anyị nwere ike ịlele n'usoro nke "ụkpụrụ ọchụchọ" wee hụ ma otu n'ime ha hà nhata uru anyị bara. Ọ bụrụ ee, laghachi na eziokwu.
const findSum = (arr, val) => {
let searchValues = [val - arr[0]];
for (let i = 1; i < arr.length; i++) {
let searchVal = val - arr[i];
if (searchValues.includes(arr[i])) {
return true;
} else {
searchValues.push(searchVal);
}
};
return false;
};
Ndabere nke ngwọta bụ maka loop, nke, dịka anyị hụrụ n'elu, nwere mgbagwoju anya oge nke O (N).
Akụkụ nke abụọ nke ọrụ anyị bụ Array.prototype.include(), usoro Javascript nke ga-alaghachi n'eziokwu ma ọ bụ ụgha dabere ma n'usoro ahụ nwere uru enyere.
Iji chọpụta oge mgbagwoju anya nke Array.prototype.includes(), anyị nwere ike ilele polyfill nke MDN nyere (ma dee ya na Javascript) ma ọ bụ jiri usoro dị na koodu isi iyi nke engine Javascript dị ka Google V8 (C++).
// https://tc39.github.io/ecma262/#sec-array.prototype.includes
if (!Array.prototype.includes) {
Object.defineProperty(Array.prototype, 'includes', {
value: function(valueToFind, fromIndex) {
if (this == null) {
throw new TypeError('"this" is null or not defined');
}
// 1. Let O be ? ToObject(this value).
var o = Object(this);
// 2. Let len be ? ToLength(? Get(O, "length")).
var len = o.length >>> 0;
// 3. If len is 0, return false.
if (len === 0) {
return false;
}
// 4. Let n be ? ToInteger(fromIndex).
// (If fromIndex is undefined, this step produces the value 0.)
var n = fromIndex | 0;
// 5. If n ≥ 0, then
// a. Let k be n.
// 6. Else n < 0,
// a. Let k be len + n.
// b. If k < 0, let k be 0.
var k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);
function sameValueZero(x, y) {
return x === y || (typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y));
}
// 7. Repeat, while k < len
while (k < len) {
// a. Let elementK be the result of ? Get(O, ! ToString(k)).
// b. If SameValueZero(valueToFind, elementK) is true, return true.
if (sameValueZero(o[k], valueToFind)) {
return true;
}
// c. Increase k by 1.
k++;
}
// 8. Return false
return false;
}
});
}
Ebe a iterative akụkụ nke Array.prototype.include() bụ mgbe loop na nzọụkwụ 7 na (fọrọ nke nta) traverses dum ogologo nke nyere n'usoro. Nke a pụtara na oge mgbagwoju anya ya dịkwa ahịrị. Ọfọn, ebe ọ bụ na ọ bụ mgbe niile otu nzọụkwụ n'azụ anyị isi n'usoro, oge mgbagwoju anya bụ O (N + (N - 1)). Iji Big O notation, anyị na-eme ka ọ dị mfe na O(N) - n'ihi na ọ bụ N na-enwe mmetụta kachasị mgbe ọ na-abawanye nha ntinye.
Banyere mgbagwoju anya gbasara oghere, a chọrọ mgbakwunye mgbakwunye nke ogologo ya gosipụtara nhazi mbụ (mwepu otu, ee, mana nke ahụ nwere ike ileghara ya anya), na-ebute O(N) mgbagwoju anya oghere. Ọfọn, ịba ụba ojiji ebe nchekwa na-eme ka arụmọrụ kachasị nke algọridim rụọ ọrụ.
Enwere m olileanya na ị ga-ahụ akụkọ ahụ bara uru dị ka mgbakwunye na ajụjụ ọnụ vidiyo gị. Ọ na-egosi na enwere ike idozi nsogbu dị mfe n'ụzọ dị iche iche site na iji ego dị iche iche ejiri (oge, ebe nchekwa).