Məzmuna keçin

Kompüter elmi

Kompüter elmləri əsaslı müzakirə kateqoriyası

19 Mövzular 24 Yazılar

Alt kateqoriyalar


  • Data strukturu, verilənlərin yaddaşda səmərəli şəkildə istifadə olunması üçün təşkil edilmə üsuludur.

    7 10
    7 Mövzular
    10 Yazılar
    codexC
    Doubly Linked List-in Typescript-də full implementasiyası // Node classı class Node<T> { value: T; // Dəyər next: Node<T> | null; // Növbəti qovşağa işarə prev: Node<T> | null; // Əvvəlki qovşağa işarə constructor(value: T) { this.value = value; this.next = null; this.prev = null; } } // DLL classı class DoublyLinkedList<T> { head: Node<T> | null; // Baş qovşaq tail: Node<T> | null; // Sonuncu qovşaq length: number; // Siyahının uzunluğu constructor() { this.head = null; this.tail = null; this.length = 0; } // Siyahının sonuna element əlavə etmək push(value: T): this { const newNode = new Node(value); if (!this.head) { // Siyahı boşdursa, həm head, həm tail eyni node olur this.head = newNode; } else { if (this.tail) { this.tail.next = newNode; newNode.prev = this.tail; } } this.tail = newNode; this.length++; return this; } // Siyahının sonundan element silmək pop(): Node<T> | undefined { if (!this.head) return undefined; const removed = this.tail!; if (this.length === 1) { // Siyahıda tək element varsa, hər ikisi də `null` olur this.head = null; this.tail = null; } else { this.tail = removed.prev; if (this.tail) this.tail.next = null; removed.prev = null; } this.length--; return removed; } // Siyahının əvvəlindən element silmək shift(): Node<T> | undefined { if (!this.head) return undefined; const removed = this.head; if (this.length === 1) { this.head = null; this.tail = null; } else { this.head = removed.next; if (this.head) this.head.prev = null; removed.next = null; } this.length--; return removed; } // Siyahının əvvəlinə element əlavə etmək unshift(value: T): this { const newNode = new Node(value); if (!this.head) { this.head = newNode; this.tail = newNode; } else { this.head.prev = newNode; newNode.next = this.head; this.head = newNode; } this.length++; return this; } // Verilmiş indeksə əsasən qovşağı əldə etmək get(index: number): Node<T> | null { if (index < 0 || index >= this.length) return null; let current: Node<T>; let count: number; // İndeks siyahının ortasından əvvəldirsə, başdan axtar if (index <= this.length / 2) { current = this.head!; count = 0; while (count !== index) { current = current.next!; count++; } } else { // Ortanı keçibsə, sondan axtar current = this.tail!; count = this.length - 1; while (count !== index) { current = current.prev!; count--; } } return current; } // Verilmiş indeksdəki qovşağın dəyərini dəyişmək set(index: number, value: T): boolean { const node = this.get(index); if (node) { node.value = value; return true; } return false; } // Verilmiş indeksə yeni qovşaq əlavə etmək insert(index: number, value: T): boolean { if (index < 0 || index > this.length) return false; if (index === 0) return !!this.unshift(value); if (index === this.length) return !!this.push(value); const newNode = new Node(value); const before = this.get(index - 1); const after = before!.next; before!.next = newNode; newNode.prev = before; newNode.next = after; if (after) after.prev = newNode; this.length++; return true; } // Verilmiş indeksdəki qovşağı silmək remove(index: number): Node<T> | undefined { if (index < 0 || index >= this.length) return undefined; if (index === 0) return this.shift(); if (index === this.length - 1) return this.pop(); const removed = this.get(index)!; const before = removed.prev!; const after = removed.next!; before.next = after; after.prev = before; removed.next = null; removed.prev = null; this.length--; return removed; } // Siyahını array kimi qaytarmaq (debug üçün) toArray(): T[] { const result: T[] = []; let current = this.head; while (current) { result.push(current.value); current = current.next; } return result; } } Jenny “bajı” qəşşəng başa salır. Baxmağa dəyər https://www.youtube.com/watch?v=nquQ_fYGGA4
  • Alqoritm, adətən müəyyən bir problem sinfini həll etmək və ya hesablama aparmaq üçün istifadə olunan, riyazi cəhətdən dəqiq təlimatlardan ibarət sonlu bir ardıcıllıqdır.

    6 7
    6 Mövzular
    7 Yazılar
    codexC
    Radix Sort-un Java proqramlaşdırma dilində implementasiyası import java.util.ArrayList; import java.util.List; public class RadixSort { // Ədədin müəyyən mövqedəki rəqəmini qaytarır public static int getDigit(int num, int place) { return (int)(Math.abs(num) / Math.pow(10, place)) % 10; } // Ədədin neçə rəqəmdən ibarət olduğunu tapır public static int digitCount(int num) { if (num == 0) return 1; return (int)Math.floor(Math.log10(Math.abs(num))) + 1; } // Massivdə ən çox rəqəmə sahib ədədin rəqəm sayını tapır public static int mostDigits(int[] nums) { int maxDigits = 0; for (int num : nums) { maxDigits = Math.max(maxDigits, digitCount(num)); } return maxDigits; } // Radix Sort-un əsas funksiyası public static int[] radixSort(int[] nums) { int maxDigitCount = mostDigits(nums); for (int k = 0; k < maxDigitCount; k++) { List<List<Integer>> digitBuckets = new ArrayList<>(); // 0-dan 9-a qədər 10 bucket (siyahı) yaradılır for (int i = 0; i < 10; i++) { digitBuckets.add(new ArrayList<>()); } // Ədədlər müvafiq bucket-lərə yerləşdirilir for (int num : nums) { int digit = getDigit(num, k); digitBuckets.get(digit).add(num); } // Bütün bucket-lər birləşdirilərək yeni massiv yaradılır int index = 0; for (List<Integer> bucket : digitBuckets) { for (int num : bucket) { nums[index++] = num; } } } return nums; } // Test məqsədli əsas metod public static void main(String[] args) { int[] data = {170, 45, 75, 90, 802, 24, 2, 66}; int[] sorted = radixSort(data); for (int num : sorted) { System.out.print(num + " "); } } } Nəticə: 2 24 45 66 75 90 170 802
  • Dizayn Nümunələri (Design Patterns) proqram təminatı dizaynında tez-tez baş verən problemlərin tipik həlləridir.

    1 1
    1 Mövzular
    1 Yazılar
    codexC
    Abstract Factory nümunəsi, konkret klasları(classes) göstərmədən, bir-biri ilə əlaqəli və ya asılı olan obyektlər ailəsini yaratmaq üçün bir interfeys təmin edir. Misal üçün // Abstrakt Məhsul class Button { render() { throw new Error("Bu metodu override edin!"); } } Button klası abstrakt məhsuldur. O, bu klası genişləndirən hər hansı konkret məhsul tərəfindən mütləq yenidən yazılmalı olan render metodunu müəyyən edir. // Konkret Məhsul class WindowsButton extends Button { render() { console.log("Windows üslubunda düymənin göstərilməsi."); } } class MacOSButton extends Button { render() { console.log("MacOS üslubunda düymənin göstərilməsi."); } } WindowsButton və MacOSButton, Button klasını genişləndirən konkret məhsullardır. Onlar render metodunun spesifik realizasiyasını təmin edirlər. // Abstrakt fabrik class GUIFactory { createButton() { throw new Error("Bu metodu override edin!"); } } GUIFactory klası abstrakt fabrikdir. O, bu klası genişləndirən hər hansı konkret fabrik tərəfindən mütləq yenidən yazılmalı olan createButton metodunu müəyyən edir. // Konkret fabrik class WindowsFactory extends GUIFactory { createButton() { return new WindowsButton(); } } class MacOSFactory extends GUIFactory { createButton() { return new MacOSButton(); } } WindowsFactory və MacOSFactory, GUIFactory klasını genişləndirən konkret fabriklərdir. Onlar createButton metodunun spesifik realizasiyasını təmin edirlər və müvafiq olaraq WindowsButton və MacOSButton instansiyalarını qaytarırlar. // Klient tərəfin kodu function createUI(factory) { const button = factory.createButton(); button.render(); } createUI funksiyası, fabriki istifadə edərək düymə yaratmaq və render etmək üçün klient kodudur. Bu funksiya fabriki arqument olaraq qəbul edir, fabrikin createButton metodunu çağırır və düyməni alır, sonra isə düymənin render metodunu çağırır. İstifadəsi const windowsFactory = new WindowsFactory(); createUI(windowsFactory); const macFactory = new MacOSFactory(); createUI(macFactory); Xülasə Burada, biz WindowsFactory və MacOSFactory instansiyalarını yaradıb, onları createUI funksiyasına ötürürük. Bu, kodun fərqli fabriklərlə işləyərək düymələri müxtəlif üslublarda yaratma və render etmə üsulunu nümayiş etdirir. Abstract Factory nümunəsi klient kodunun yaratması lazım olan obyektlərin konkret klaslardan ayrılmasına imkan verir, bu da çeviklik və genişlənə bilənlik təmin edir.
  • Ümumi problem həlli nümunələrin paylaşılması və mənimsəməsi üçün müzakirə kateqoriyası

    4 5
    4 Mövzular
    5 Yazılar
    codexC
    Aşağıda LeetCode platformasında bu nümunə ilə həll edilə bilinən problemlərin siyahısı aşağıdakı kimidir. Əgər bildiyiniz problemlər varsa aşağıda əlavə edə bilərsiniz: 643. Maximum Average Subarray I 3. Longest Substring Without Repeating Characters 438. Find All Anagrams in a String 413. Arithmetic Slices 219. Contains Duplicate II 209. Minimum Size Subarray Sum 187. Repeated DNA Sequences 30. Substring with Concatenation of All Words Bütün problemlərin siyahısını isə buradan baxa bilərsiz.